hassox (owner)

Fork Of

Revisions

gist: 224623 Download_button fork
public
Public Clone URL: git://gist.github.com/224623.git
Embed All Files: show embed
Ruby #
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
# encoding: utf-8
 
require 'methopara'
require 'rubygems'
require 'sinatra'
require 'dm-core'
require 'dm-types'
require 'dm-serializer'
require 'dm-validations'
require 'dm-migrations'
require 'dm-is-tree'
require 'dm-accepts_nested_attributes'
require 'memcache'
require 'haml'
require 'warden'
require 'bigdecimal/util'
# require 'rack/session/memcache'
 
Dir['lib/**/*.rb'].each{ |lib| require lib}
Dir['models/**/*.rb'].each{|m| require m}
 
Warden::Manager.serialize_into_session{|user| user.id }
Warden::Manager.serialize_from_session{|id| Entity.get(id) }
 
Warden::Manager.before_failure do |env,opts|
  env['REQUEST_METHOD'] = "POST"
end
 
Warden::Strategies.add(:password) do
  def valid?
    params["login"] || params["secret"]
  end
 
  def authenticate!
    u = Entity.authenticate(params["login"], params["secret"])
    u.nil? ? fail!("Could not log in") : success!(u)
  end
end
 
set :haml, {:attr_wrapper => '"' }
 
class Testing < Sinatra::Base
 
  use Rack::Session::Cookie
  use Warden::Manager do |manager|
    manager.default_strategies :password
    manager.failure_app = Testing
  end
 
  helpers do
    def warden
      env['warden']
    end
  end
 
  get "/" do
    warden.authenticate!
    return "Testing this"
  end
 
  post '/unauthenticated/?' do
    status 401
    haml :"session/login"
  end
 
  get '/login/?' do
    haml :"session/login"
  end
 
  post '/login/?' do
    warden.authenticate!
    redirect "/"
  end
 
  get '/logout/?' do
    warden.logout
    redirect '/'
  end
end
 
Testing.run!