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