login_sugar_generator 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/USAGE +32 -0
- data/login_sugar_generator.rb +79 -0
- data/templates/README +194 -0
- data/templates/_view_edit.rhtml +30 -0
- data/templates/_view_password.rhtml +21 -0
- data/templates/clock.rb +14 -0
- data/templates/controller.rb +179 -0
- data/templates/controller_test.rb +254 -0
- data/templates/create_db +7 -0
- data/templates/default_setup.zip +0 -0
- data/templates/helper.rb +41 -0
- data/templates/integration_test.rb +95 -0
- data/templates/layout.rhtml +13 -0
- data/templates/login_environment.rb +21 -0
- data/templates/login_system.rb +54 -0
- data/templates/migration_login_sugar.rb +21 -0
- data/templates/mock_clock.rb +14 -0
- data/templates/mock_notify.rb +16 -0
- data/templates/notify.rb +50 -0
- data/templates/notify_change_password.rhtml +10 -0
- data/templates/notify_delete.rhtml +5 -0
- data/templates/notify_forgot_password.rhtml +11 -0
- data/templates/notify_pending_delete.rhtml +9 -0
- data/templates/notify_signup.rhtml +12 -0
- data/templates/stylesheet.css +74 -0
- data/templates/user.rb +101 -0
- data/templates/user_model.erbsql +18 -0
- data/templates/user_test.rb +133 -0
- data/templates/users.yml +48 -0
- data/templates/view_change_password.rhtml +15 -0
- data/templates/view_edit.rhtml +19 -0
- data/templates/view_forgot_password.rhtml +19 -0
- data/templates/view_login.rhtml +24 -0
- data/templates/view_logout.rhtml +8 -0
- data/templates/view_signup.rhtml +14 -0
- data/templates/view_welcome.rhtml +10 -0
- metadata +80 -0
@@ -0,0 +1,254 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require '<%= singular_name %>_controller'
|
3
|
+
require '<%= singular_name %>_notify'
|
4
|
+
|
5
|
+
# Raise errors beyond the default web-based presentation
|
6
|
+
class <%= class_name %>Controller; def rescue_action(e) raise e end; end
|
7
|
+
|
8
|
+
class <%= class_name %>ControllerTest < Test::Unit::TestCase
|
9
|
+
self.use_transactional_fixtures = false
|
10
|
+
fixtures :<%= plural_name %>
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@controller = <%= class_name %>Controller.new
|
14
|
+
@request = ActionController::TestRequest.new
|
15
|
+
@response = ActionController::TestResponse.new
|
16
|
+
@request.host = "localhost"
|
17
|
+
ActionMailer::Base.inject_one_error = false
|
18
|
+
ActionMailer::Base.deliveries = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_login__valid_login__redirects_as_specified
|
22
|
+
@request.session[:return_to] = "/bogus/location"
|
23
|
+
post :login, :<%= singular_name %> => { :login => "tesla", :password => "atest" }
|
24
|
+
assert_logged_in <%= plural_name %>(:tesla)
|
25
|
+
assert_response :redirect
|
26
|
+
assert_equal "http://#{@request.host}/bogus/location", @response.redirect_url
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_login__valid_login__shows_welcome_as_default
|
30
|
+
post :login, :<%= singular_name %> => { :login => "tesla", :password => "atest" }
|
31
|
+
assert_logged_in <%= plural_name %>(:tesla)
|
32
|
+
assert_response :redirect
|
33
|
+
assert_equal @controller.url_for(:action => 'welcome'), @response.redirect_url
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_login__wrong_password
|
37
|
+
post :login, :<%= singular_name %> => { :login => "tesla", :password => "wrong password" }
|
38
|
+
assert_not_logged_in
|
39
|
+
assert_template 'login'
|
40
|
+
assert_contains "Login failed", flash['message']
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_login__wrong_login
|
44
|
+
post :login, :<%= singular_name %> => { :login => "wrong login", :password => "atest" }
|
45
|
+
assert_not_logged_in
|
46
|
+
assert_template 'login'
|
47
|
+
assert_contains "Login failed", flash['message']
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_login__deleted_<%= singular_name %>_cant_login
|
51
|
+
post :login, :<%= singular_name %> => { :login => "deleted_tesla", :password => "atest" }
|
52
|
+
assert_not_logged_in
|
53
|
+
assert_template 'login'
|
54
|
+
assert_contains "Login failed", flash['message']
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_signup
|
58
|
+
post_signup :login => "new<%= singular_name %>",
|
59
|
+
:password => "password", :password_confirmation => "password",
|
60
|
+
:email => "newemail@example.com"
|
61
|
+
assert_not_logged_in
|
62
|
+
assert_redirected_to_login
|
63
|
+
assert_equal 1, ActionMailer::Base.deliveries.size
|
64
|
+
|
65
|
+
mail = ActionMailer::Base.deliveries[0]
|
66
|
+
assert_equal "newemail@example.com", mail.to_addrs[0].to_s
|
67
|
+
assert_match /login:\s+\w+\n/, mail.encoded
|
68
|
+
assert_match /password:\s+\w+\n/, mail.encoded
|
69
|
+
<%= singular_name %> = <%= class_name %>.find_by_email("newemail@example.com")
|
70
|
+
assert_match /<%= file_name %>\[id\]=#{<%= singular_name %>.id}/, mail.encoded
|
71
|
+
assert_match /key=#{<%= singular_name %>.security_token}/, mail.encoded
|
72
|
+
assert !<%= singular_name %>.verified
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_signup__validates_password_min_length
|
76
|
+
post_signup :login => "tesla_rhea", :password => "bad", :password_confirmation => "bad", :email => "someone@example.com"
|
77
|
+
assert_password_validation_fails
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_signup__raises_delivery_errors
|
81
|
+
ActionMailer::Base.inject_one_error = true
|
82
|
+
post_signup :login => "newtesla",
|
83
|
+
:password => "newpassword", :password_confirmation => "newpassword",
|
84
|
+
:email => "newtesla@example.com"
|
85
|
+
assert_not_logged_in
|
86
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
87
|
+
assert_contains "confirmation email not sent", flash['message']
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_signup__mismatched_passwords
|
91
|
+
post :signup, :<%= singular_name %> => { :login => "newtesla", :password => "newpassword", :password_confirmation => "wrong" }
|
92
|
+
<%= singular_name %> = assigns(:<%= singular_name %>)
|
93
|
+
assert_equal 1, <%= singular_name %>.errors.size
|
94
|
+
assert_not_nil <%= singular_name %>.errors['password']
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_signup__bad_login
|
98
|
+
post_signup :login => "yo", :password => "newpassword", :password_confirmation => "newpassword"
|
99
|
+
<%= singular_name %> = assigns(:<%= singular_name %>)
|
100
|
+
assert_equal 1, <%= singular_name %>.errors.size
|
101
|
+
assert_not_nil <%= singular_name %>.errors['login']
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_welcome
|
105
|
+
<%= singular_name %> = <%= plural_name %>(:unverified_<%= singular_name %>)
|
106
|
+
get :welcome, :<%= singular_name %>=> { :id => <%= singular_name %>.id }, :key => <%= singular_name %>.security_token
|
107
|
+
<%= singular_name %>.reload
|
108
|
+
assert <%= singular_name %>.verified
|
109
|
+
assert_logged_in( <%= singular_name %> )
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_welcome__fails_if_expired_token
|
113
|
+
<%= singular_name %> = <%= plural_name %>(:unverified_<%= singular_name %>)
|
114
|
+
Clock.advance_by_days 2 # now past verification deadline
|
115
|
+
get :welcome, :<%= singular_name %>=> { :id => <%= singular_name %>.id }, :key => <%= singular_name %>.security_token
|
116
|
+
<%= singular_name %>.reload
|
117
|
+
assert !<%= singular_name %>.verified
|
118
|
+
assert_not_logged_in
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_welcome__fails_if_bad_token
|
122
|
+
<%= singular_name %> = <%= plural_name %>(:unverified_<%= singular_name %>)
|
123
|
+
Clock.time = Time.now # now before deadline, but with bad token
|
124
|
+
get :welcome, :<%= singular_name %>=> { :id => <%= singular_name %>.id }, :key => "boguskey"
|
125
|
+
<%= singular_name %>.reload
|
126
|
+
assert !<%= singular_name %>.verified
|
127
|
+
assert_not_logged_in
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_edit
|
131
|
+
tesla = <%= plural_name %>(:tesla)
|
132
|
+
set_logged_in tesla
|
133
|
+
post :edit, :<%= singular_name %> => { :first_name => "Bob", :form => "edit" }
|
134
|
+
tesla.reload
|
135
|
+
assert_equal tesla.first_name, "Bob"
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_delete
|
139
|
+
<%= singular_name %> = <%= plural_name %>(:deletable_<%= singular_name %>)
|
140
|
+
set_logged_in <%= singular_name %>
|
141
|
+
post :edit, "<%= singular_name %>" => { "form" => "delete" }
|
142
|
+
<%= singular_name %>.reload
|
143
|
+
assert <%= singular_name %>.deleted
|
144
|
+
assert_not_logged_in
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_change_password
|
148
|
+
<%= singular_name %> = <%= plural_name %>(:tesla)
|
149
|
+
set_logged_in <%= singular_name %>
|
150
|
+
post :change_password, :<%= singular_name %> => { :password => "changed_password", :password_onfirmation => "changed_password" }
|
151
|
+
assert_equal 1, ActionMailer::Base.deliveries.size
|
152
|
+
mail = ActionMailer::Base.deliveries[0]
|
153
|
+
assert_equal "tesla@example.com", mail.to_addrs[0].to_s
|
154
|
+
assert_match /login:\s+\w+\n/, mail.encoded
|
155
|
+
assert_match /password:\s+\w+\n/, mail.encoded
|
156
|
+
assert_equal <%= singular_name %>, <%= class_name %>.authenticate(<%= singular_name %>.login, 'changed_password')
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_change_password__confirms_password
|
160
|
+
set_logged_in <%= plural_name %>(:tesla)
|
161
|
+
post :change_password, :<%= singular_name %> => { :password => "bad", :password_confirmation => "bad" }
|
162
|
+
<%= singular_name %> = assigns(:<%= singular_name %>)
|
163
|
+
assert_equal 1, <%= singular_name %>.errors.size
|
164
|
+
assert_not_nil <%= singular_name %>.errors['password']
|
165
|
+
assert_response :success
|
166
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_change_password__succeeds_despite_delivery_errors
|
170
|
+
set_logged_in <%= plural_name %>(:tesla)
|
171
|
+
ActionMailer::Base.inject_one_error = true
|
172
|
+
post :change_password, :<%= singular_name %> => { :password => "changed_password", :password_confirmation => "changed_password" }
|
173
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
174
|
+
assert_equal <%= plural_name %>(:tesla), <%= class_name %>.authenticate(<%= plural_name %>(:tesla).login, 'changed_password')
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_forgot_password__when_logged_in_redirects_to_change_password
|
178
|
+
<%= singular_name %> = <%= plural_name %>(:tesla)
|
179
|
+
set_logged_in <%= singular_name %>
|
180
|
+
post :forgot_password, :<%= singular_name %> => { :email => <%= singular_name %>.email }
|
181
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
182
|
+
assert_response :redirect
|
183
|
+
assert_equal @controller.url_for(:action => "change_password"), @response.redirect_url
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_forgot_password__requires_valid_email_address
|
187
|
+
post :forgot_password, :<%= singular_name %> => { :email => "" }
|
188
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
189
|
+
assert_match /Please enter a valid email address./, @response.body
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_forgot_password__ignores_unknown_email_address
|
193
|
+
post :forgot_password, :<%= singular_name %> => { :email => "unknown_email@example.com" }
|
194
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_forgot_password__reports_delivery_error
|
198
|
+
ActionMailer::Base.inject_one_error = true
|
199
|
+
post :forgot_password, :<%= singular_name %> => { :email => <%= plural_name %>(:tesla).email }
|
200
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
201
|
+
assert_match /Your password could not be emailed/, @response.body
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_invalid_login
|
205
|
+
post :login, :<%= singular_name %> => { :login => "tesla", :password => "not_correct" }
|
206
|
+
assert_not_logged_in
|
207
|
+
assert_response :success
|
208
|
+
assert_template 'login'
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_logout
|
212
|
+
set_logged_in <%= plural_name %>(:tesla)
|
213
|
+
get :logout
|
214
|
+
assert_not_logged_in
|
215
|
+
end
|
216
|
+
|
217
|
+
private
|
218
|
+
|
219
|
+
def set_logged_in( <%= singular_name %> )
|
220
|
+
@request.session[:<%= singular_name %>_id] = <%= singular_name %>.id
|
221
|
+
end
|
222
|
+
|
223
|
+
def assert_logged_in( <%= singular_name %> )
|
224
|
+
assert_equal <%= singular_name %>.id, @request.session[:<%= singular_name %>_id]
|
225
|
+
assert_equal <%= singular_name %>, assigns(:current_<%= singular_name %>)
|
226
|
+
end
|
227
|
+
|
228
|
+
def assert_not_logged_in
|
229
|
+
assert_nil @request.session[:<%= singular_name %>_id]
|
230
|
+
assert_nil assigns(:current_<%= singular_name %>)
|
231
|
+
end
|
232
|
+
|
233
|
+
def assert_redirected_to_login
|
234
|
+
assert_equal @controller.url_for(:action => "login"), @response.redirect_url
|
235
|
+
end
|
236
|
+
|
237
|
+
def post_signup( <%= singular_name %>_params )
|
238
|
+
post :signup, "<%= singular_name %>" => <%= singular_name %>_params
|
239
|
+
end
|
240
|
+
|
241
|
+
def assert_password_validation_fails
|
242
|
+
<%= singular_name %> = assigns(:<%= singular_name %>)
|
243
|
+
assert_equal 1, <%= singular_name %>.errors.size
|
244
|
+
assert_not_nil <%= singular_name %>.errors['password']
|
245
|
+
assert_response :success
|
246
|
+
assert_equal 0, ActionMailer::Base.deliveries.size
|
247
|
+
end
|
248
|
+
|
249
|
+
def assert_contains( target, container )
|
250
|
+
assert !container.nil?, %Q( Failed to find "#{target}" in nil String )
|
251
|
+
assert container.include?(target)
|
252
|
+
end
|
253
|
+
|
254
|
+
end
|
data/templates/create_db
ADDED
Binary file
|
data/templates/helper.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module <%= class_name %>Helper
|
2
|
+
|
3
|
+
DEFAULT_HEAD_OPTIONS = {
|
4
|
+
:notice => true,
|
5
|
+
:message => true,
|
6
|
+
:error => false
|
7
|
+
}.freeze unless defined? DEFAULT_HEAD_OPTIONS
|
8
|
+
|
9
|
+
def title_helper
|
10
|
+
"#{@controller.controller_class_name} #{@controller.action_name}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def head_helper(label, options = {})
|
14
|
+
notice = message = error = nil
|
15
|
+
opts = DEFAULT_HEAD_OPTIONS.dup
|
16
|
+
opts.update(options.symbolize_keys)
|
17
|
+
s = "<h3>#{label}</h3>"
|
18
|
+
if @flash['notice'] and not opts[:notice].nil? and opts[:notice]
|
19
|
+
notice = "<div><p>#{@flash['notice']}</p></div>"
|
20
|
+
s = s + notice
|
21
|
+
end
|
22
|
+
if @flash['message'] and not opts[:message].nil? and opts[:message]
|
23
|
+
message = "<div id=\"ErrorExplanation\"><p>#{@flash['message']}</p></div>"
|
24
|
+
s = s + message
|
25
|
+
end
|
26
|
+
if not opts[:error].nil? and opts[:error]
|
27
|
+
error = error_messages_for('<%= singular_name %>')
|
28
|
+
if not error.nil?
|
29
|
+
error = error + "<br/>"
|
30
|
+
s = s + error
|
31
|
+
end
|
32
|
+
end
|
33
|
+
return s
|
34
|
+
end
|
35
|
+
|
36
|
+
def start_form_tag_helper(options = {})
|
37
|
+
url = url_for(:action => "#{@controller.action_name}")
|
38
|
+
"#{self.send(:start_form_tag, url, options)}"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require '<%= singular_name %>_controller'
|
3
|
+
require '<%= singular_name %>_notify'
|
4
|
+
|
5
|
+
class <%= class_name %>SystemTest < ActionController::IntegrationTest
|
6
|
+
self.use_transactional_fixtures = false
|
7
|
+
fixtures :<%= plural_name %>
|
8
|
+
|
9
|
+
def setup
|
10
|
+
ActionMailer::Base.inject_one_error = false
|
11
|
+
ActionMailer::Base.deliveries = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_signup_and_verify
|
15
|
+
Clock.time = Time.now
|
16
|
+
post url_for( :controller => '<%= singular_name %>', :action => 'signup'),
|
17
|
+
:<%= singular_name %> => { :login => "new<%= singular_name %>",
|
18
|
+
:password => "password", :password_confirmation => "password",
|
19
|
+
:email => "newemail@example.com" }
|
20
|
+
|
21
|
+
assert_not_logged_in
|
22
|
+
assert_redirected_to_login
|
23
|
+
assert_equal 1, ActionMailer::Base.deliveries.size
|
24
|
+
|
25
|
+
mail = ActionMailer::Base.deliveries[0]
|
26
|
+
assert_equal "newemail@example.com", mail.to_addrs[0].to_s
|
27
|
+
assert_match /login:\s+\w+\n/, mail.encoded
|
28
|
+
assert_match /password:\s+\w+\n/, mail.encoded
|
29
|
+
mail.encoded =~ /<%= file_name %>\[id\]=(\d+)&key=(.*?)"/
|
30
|
+
id = $1
|
31
|
+
key = $2
|
32
|
+
|
33
|
+
Clock.advance_by_days 2 # now past verification deadline
|
34
|
+
|
35
|
+
get url_for( :controller => '<%= singular_name %>', :action => 'welcome'),
|
36
|
+
:<%= singular_name %>=> { :id => id }, :key => key
|
37
|
+
assert_redirected_to_login
|
38
|
+
<%= singular_name %> = <%= class_name %>.find_by_id id
|
39
|
+
assert !<%= singular_name %>.verified
|
40
|
+
assert_not_logged_in
|
41
|
+
|
42
|
+
Clock.time = Time.now # now before deadline
|
43
|
+
get url_for( :controller => '<%= singular_name %>', :action => 'welcome'),
|
44
|
+
:<%= singular_name %>=> { :id => "#{id}" }, :key => "boguskey"
|
45
|
+
assert_redirected_to_login
|
46
|
+
assert_not_logged_in
|
47
|
+
<%= singular_name %>.reload
|
48
|
+
assert !<%= singular_name %>.verified
|
49
|
+
|
50
|
+
get url_for( :controller => '<%= singular_name %>', :action => 'welcome'),
|
51
|
+
:<%= singular_name %>=> { :id => "#{<%= singular_name %>.id}" }, :key => "#{key}"
|
52
|
+
assert_response :success
|
53
|
+
<%= singular_name %>.reload
|
54
|
+
assert <%= singular_name %>.verified
|
55
|
+
assert_logged_in( <%= singular_name %> )
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_forgot_password__allows_change_password_after_mailing_key
|
59
|
+
<%= singular_name %> = <%= plural_name %>(:tesla)
|
60
|
+
post url_for( :controller => '<%= singular_name %>', :action => 'forgot_password'), :<%= singular_name %> => { :email => <%= singular_name %>.email }
|
61
|
+
assert_equal 1, ActionMailer::Base.deliveries.size
|
62
|
+
mail = ActionMailer::Base.deliveries[0]
|
63
|
+
assert_equal <%= plural_name %>(:tesla).email, mail.to_addrs[0].to_s
|
64
|
+
mail.encoded =~ /<%= file_name %>\[id\]=(.*?)&key=(.*?)"/
|
65
|
+
id = $1
|
66
|
+
key = $2
|
67
|
+
post url_for( :controller => '<%= singular_name %>', :action => 'change_password'),
|
68
|
+
:<%= singular_name %> => { :password => "newpassword",
|
69
|
+
:password_confirmation => "newpassword",
|
70
|
+
:id => id },
|
71
|
+
:key => key
|
72
|
+
<%= singular_name %>.reload
|
73
|
+
assert_logged_in <%= singular_name %>
|
74
|
+
assert_equal <%= singular_name %>, <%= class_name %>.authenticate(<%= singular_name %>.login, 'newpassword')
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
private
|
80
|
+
def assert_logged_in( <%= singular_name %> )
|
81
|
+
assert_equal <%= singular_name %>.id, request.session[:<%= singular_name %>_id]
|
82
|
+
assert_equal <%= singular_name %>, assigns(:current_<%= singular_name %>)
|
83
|
+
end
|
84
|
+
|
85
|
+
def assert_not_logged_in
|
86
|
+
assert_nil request.session[:<%= singular_name %>_id]
|
87
|
+
assert_nil assigns(:current_<%= singular_name %>)
|
88
|
+
end
|
89
|
+
|
90
|
+
def assert_redirected_to_login
|
91
|
+
assert_response :redirect
|
92
|
+
assert_equal controller.url_for(:action => "login"), response.redirect_url
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module <%= class_name %>System
|
2
|
+
CONFIG = {
|
3
|
+
# Source address for <%= singular_name %> emails
|
4
|
+
:email_from => 'foo@example.com',
|
5
|
+
|
6
|
+
# Destination email for system errors
|
7
|
+
:admin_email => 'foo@example.com',
|
8
|
+
|
9
|
+
# Sent in emails to <%= plural_name %>
|
10
|
+
:app_url => 'http://example.com/',
|
11
|
+
|
12
|
+
# Sent in emails to <%= plural_name %>
|
13
|
+
:app_name => 'Login Sugar',
|
14
|
+
|
15
|
+
# Email charset
|
16
|
+
:mail_charset => 'utf-8',
|
17
|
+
|
18
|
+
# Security token lifetime in hours
|
19
|
+
:security_token_life_hours => 24,
|
20
|
+
}
|
21
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module <%= class_name %>System
|
2
|
+
|
3
|
+
protected
|
4
|
+
|
5
|
+
# authenticate_<%= singular_name %> filter. add
|
6
|
+
#
|
7
|
+
# before_filter :authenticate_<%= singular_name %>
|
8
|
+
#
|
9
|
+
def authenticate_<%= singular_name %>
|
10
|
+
return true if authenticated_<%= singular_name %>?
|
11
|
+
session[:return_to] = request.request_uri
|
12
|
+
access_denied
|
13
|
+
return false
|
14
|
+
end
|
15
|
+
|
16
|
+
# overwrite if you want to have special behavior in case the <%= singular_name %> is not authorized
|
17
|
+
# to access the current operation.
|
18
|
+
# the default action is to redirect to the login screen
|
19
|
+
# example use :
|
20
|
+
# a popup window might just close itself for instance
|
21
|
+
def access_denied
|
22
|
+
redirect_to :controller => "/<%= file_name %>", :action => "login"
|
23
|
+
end
|
24
|
+
|
25
|
+
def redirect_back_or_default(default)
|
26
|
+
if session[:return_to].nil?
|
27
|
+
redirect_to default
|
28
|
+
else
|
29
|
+
redirect_to_url session[:return_to]
|
30
|
+
session[:return_to] = nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def authenticated_<%= singular_name %>?
|
35
|
+
if session[:<%= singular_name %>_id]
|
36
|
+
@current_<%= singular_name %> = <%= class_name %>.find_by_id(session[:<%= singular_name %>_id])
|
37
|
+
return false if @current_<%= singular_name %>.nil?
|
38
|
+
return true
|
39
|
+
end
|
40
|
+
|
41
|
+
# If not, is the <%= singular_name %> being authenticated by a token (created by signup/forgot password actions)?
|
42
|
+
return false if not params['<%= singular_name %>']
|
43
|
+
id = params['<%= singular_name %>']['id']
|
44
|
+
key = params['key']
|
45
|
+
if id and key
|
46
|
+
@current_<%= singular_name %> = <%= class_name %>.authenticate_by_token(id, key)
|
47
|
+
session[:<%= singular_name %>_id] = @current_<%= singular_name %> ? @current_<%= singular_name %>.id : nil
|
48
|
+
return true if not @current_<%= singular_name %>.nil?
|
49
|
+
end
|
50
|
+
|
51
|
+
# Everything failed
|
52
|
+
return false
|
53
|
+
end
|
54
|
+
end
|