1
0
Fork 0
fatkitten/pastekitten.rb

92 lines
2.0 KiB
Ruby

$:.unshift File.dirname(__FILE__)
require 'securerandom'
require 'base64'
require 'yaml'
require 'bundler/setup'
require 'sinatra'
require 'sinatra/assetpack'
require 'sequel'
require 'encryptor'
require 'slim'
require 'coffee_script'
require 'stylus'
require 'stylus/tilt'
require 'pygments'
require 'app/models/configuration'
require 'app/models/paste'
require 'config/initializers/configuration'
require 'config/initializers/database'
require 'lib/error_pages'
class Pastekitten < Sinatra::Application
set :root, File.dirname(__FILE__)
set :server, 'unicorn'
set :public_folder, 'public'
set :views, File.expand_path('../app/views', __FILE__)
set :slim, pretty: true
register Sinatra::AssetPack
use ErrorPages
helpers ErrorPages::Forbidden
assets do
serve '/assets/js', from: 'app/assets/js'
serve '/assets/css', from: 'app/assets/css'
serve '/assets/img', from: 'app/assets/img'
css :application, '/assets/css/application.css', [
'/assets/css/pastekitten.css',
'/assets/css/dropdown.css',
'/assets/css/pygments_solarized_modified.css'
]
js :application, '/assets/js/application.js', [
'/assets/js/pastekitten.js',
'/assets/js/dropdown.js'
]
js_compression :jsmin
css_compression :simple
end
before do
correct_domain_name
end
get '/' do
@syntaxes = CONFIG.syntaxes_map
slim :form, layout: :default
end
post '/' do
redirect '/' if params[:contents].nil? || params[:contents].strip.empty?
paste = Paste.new(params[:contents], params[:syntax])
id = paste.save
redirect "/#{id}/#{paste.key}"
end
get '/:id/:key' do
@paste = Paste.find(params[:id].to_i)
return not_found unless @paste
begin
@paste.decrypt(params[:key])
slim :show, layout: :default
rescue OpenSSL::Cipher::CipherError
forbidden
end
end
def correct_domain_name
if %w[ www.pastekitten.com pm.localhots.xxx ].include?(request.host)
redirect 'http://pastekitten.com' + request.fullpath
end
end
end