1
0
Fork 0
fatkitten/pastemaster.rb

65 lines
1.2 KiB
Ruby
Raw Normal View History

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-09 07:53:49 +00:00
require 'bundler/setup'
require 'sinatra'
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 09:46:37 +00:00
require 'lib/error_pages'
require 'lib/assets'
2013-07-09 07:53:49 +00:00
require 'app/config'
require 'app/database'
require 'app/paste'
class Pastemaster < Sinatra::Application
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 09:46:37 +00:00
set :slim, pretty: true
use ErrorPages
helpers ErrorPages::Forbidden
use CoffeeAssets
use StylusAssets
2013-07-10 18:20:10 +00:00
def fetch_lexers
@lexers_list ||= Pygments::Lexer.all.map do |lexer|
{ alias: lexer.aliases.first, name: lexer.name }
end.sort_by{ |a| a[:name] }
end
2013-07-09 07:53:49 +00:00
get '/' do
2013-07-10 18:20:10 +00:00
@lexers = fetch_lexers
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-10 18:20:10 +00:00
paste = Paste.new(params[:contents], params[:type])
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
@paste = Paste.find(params[:id])
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
end