/
session.rb
90 lines (73 loc) · 1.69 KB
/
session.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
89
90
module Melon
module Session
def self.new(*args)
Session::Model.new(*args)
end
class Model < Hash
def initialize session = {}
@env = session #unless session.empty?
self[:auth] = false
self[:failed] = 0
self <= session if session
self
end
# Copy a hash into the session
def <= s
s.each do |k, v|
self[ k ] = v
end
end
def god?
self[:god]
end
def god= bool
self[:god] = bool
end
def name
self[:name]
end
def login name = nil
self[:auth] = true
self[:name] ||= name
self
end
# Delete all cookies
def logout
self.each do |k,|
self.delete k
end
self
end
# Write session to env
def save!
@env.replace self
end
end
class Controller < Base::Controller
def create
unless @input.empty?
say "* " + @input['name'] + " is logging in..."
user = Sky.get @input['name']
if @input['password'] == thinker['password']
# Login
@session.login @input['name']
@session.god = @input['name'] == Settings.cloudder.god ? true : false
else
@session[:auth] = false
@session[:failed] += 1
end
end
return :session => @session, :redirect => self./
end
def new
return :session => @session
end
def destroy
return :session => @session.logout
end
def method_missing *args
super
end
end
end
end