-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.rb
88 lines (70 loc) · 1.89 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env ruby
require_relative 'models/init'
Warden::Strategies.add(:password) do
def valid?
params['user'] && params['user']['username'] && params['user']['password']
end
def authenticate!
user = User.first(username: params['user']['username'])
if user.nil?
throw(:warden, message: "The username you entered does not exist.")
elsif user.authenticate(params['user']['password'])
success!(user)
else
throw(:warden, message: "The username and password do not match.")
end
end
end
class MyApp < Sinatra::Base
enable :sessions
register Sinatra::Flash
set :session_secret, 'super'
use Warden::Manager do |config|
config.serialize_into_session{ |user| user.id }
config.serialize_from_session{ |id| User.get(id) }
config.scope_defaults :default,
strategies: [:password],
action: 'unauthenticated'
config.failure_app = self
end
Warden::Manager.before_failure do |env, opts|
env['REQUEST_METHOD'] = 'POST'
end
get '/' do
@html = Page.last.html
@current_user = env['warden'].user
erb :index
end
post '/' do
@page = Page.new(html: params[:html], created_at: Time.now)
if @page.save
redirect to '/'
else
redirect to '/'
end
end
get '/login' do
erb :login
end
post '/login' do
env['warden'].authenticate!
flash[:success] = env['warden'].message || "You've logged in."
if session[:return_to].nil?
redirect '/'
else
redirect session[:return_to]
end
end
get '/logout' do
env['warden'].raw_session.inspect
env['warden'].logout
flash[:success] = 'Sucessfully logged out'
redirect '/'
end
post '/unauthenticated' do
session[:return_to] = env['warden.options'][:attempted_path]
puts env['warden.options'][:attempted_path]
flash[:error] = env['warden'].message || "You must log in"
redirect '/login'
end
end