okkez-multi_auth 0.0.1 → 0.0.2
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/README +22 -3
- data/app/controllers/signup/email_controller.rb +1 -1
- data/app/controllers/signup/open_id_controller.rb +1 -1
- data/app/models/{user.rb → dummy_user.rb} +4 -3
- data/app/models/email_credential.rb +1 -1
- data/app/models/open_id_credential.rb +1 -1
- data/generators/multi_auth_migration/USAGE +5 -0
- data/generators/multi_auth_migration/multi_auth_migration_generator.rb +12 -0
- data/generators/multi_auth_migration/templates/migration.rb +35 -0
- data/generators/multi_auth_style_sheet/multi_auth_style_sheet_generator.rb +13 -0
- data/generators/multi_auth_style_sheet/templates/style.css +502 -0
- data/lib/multi_auth/action_controller.rb +50 -0
- data/lib/multi_auth/active_record.rb +16 -0
- data/lib/multi_auth.rb +6 -49
- data/test/functional/signup/email_controller_test.rb +1 -1
- data/test/test_helper.rb +2 -0
- data/test/unit/{user_test.rb → dummy_user_test.rb} +2 -2
- data/test/unit/notice_formatter_test.rb +5 -5
- data/test/unit/token_util_test.rb +6 -6
- metadata +11 -4
data/README
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
MultiAuth
|
2
2
|
=========
|
3
3
|
|
4
|
-
This engine provides basic login functionality for your Rails applications.
|
4
|
+
This engine provides basic signup/login functionality for your Rails applications.
|
5
5
|
|
6
6
|
Install
|
7
7
|
=======
|
8
8
|
|
9
9
|
$ sudo gem install okkez-multi_auth
|
10
10
|
|
11
|
+
or
|
12
|
+
|
13
|
+
$ sudo gem install multi_auth
|
14
|
+
|
11
15
|
Setup
|
12
16
|
=====
|
13
17
|
|
@@ -15,14 +19,29 @@ Setup
|
|
15
19
|
|
16
20
|
Create migrations for open_id_authentication.
|
17
21
|
|
18
|
-
$
|
22
|
+
$ ruby script/generate multi_auth_migration create_multi_auth_tables
|
19
23
|
|
20
|
-
|
24
|
+
Create migrations for multi_auth.
|
21
25
|
|
22
26
|
$ rake db:migrate
|
23
27
|
|
24
28
|
You must have a model 'User'. User model has any columns which you want to add.
|
25
29
|
|
30
|
+
Ex.
|
31
|
+
|
32
|
+
class User < ActiveRecord::Base
|
33
|
+
multi_auth
|
34
|
+
end
|
35
|
+
|
36
|
+
You can use MultiAuthHelper, see below.
|
37
|
+
|
38
|
+
Ex.
|
39
|
+
|
40
|
+
module ApplicationHelper
|
41
|
+
include MultiAuthHelper
|
42
|
+
end
|
43
|
+
|
44
|
+
|
26
45
|
Customize
|
27
46
|
=========
|
28
47
|
|
@@ -45,7 +45,7 @@ class Signup::EmailController < ApplicationController
|
|
45
45
|
def create
|
46
46
|
@signup_form = EditFormClass.new(session[:signup_form])
|
47
47
|
|
48
|
-
@user =
|
48
|
+
@user = MultiAuth.user_model_class.new
|
49
49
|
@credential = @user.email_credentials.build
|
50
50
|
@credential.attributes = @signup_form.to_email_credential_hash
|
51
51
|
|
@@ -42,7 +42,7 @@ class Signup::OpenIdController < ApplicationController
|
|
42
42
|
def create
|
43
43
|
@identity_url = session[:identity_url]
|
44
44
|
|
45
|
-
@user =
|
45
|
+
@user = MultiAuth.user_model_class.new
|
46
46
|
@credential = @user.open_id_credentials.build
|
47
47
|
@credential.identity_url = @identity_url
|
48
48
|
|
@@ -12,13 +12,14 @@
|
|
12
12
|
#
|
13
13
|
|
14
14
|
# ユーザ
|
15
|
-
class
|
15
|
+
class DummyUser < ActiveRecord::Base
|
16
|
+
untranslate_all
|
17
|
+
set_table_name 'users'
|
16
18
|
NicknameMaximumLength = 40
|
17
19
|
TokenLength = 20
|
18
20
|
TokenPattern = TokenUtil.create_token_regexp(TokenLength)
|
19
21
|
|
20
|
-
|
21
|
-
has_many :email_credentials
|
22
|
+
multi_auth
|
22
23
|
|
23
24
|
validates_presence_of :user_token
|
24
25
|
validates_length_of :nickname, :maximum => NicknameMaximumLength, :allow_nil => true
|
@@ -22,7 +22,7 @@ class EmailCredential < ActiveRecord::Base
|
|
22
22
|
HashedPasswordPattern = /\A([0-9a-f]{8}):([0-9a-f]{64})\z/
|
23
23
|
MaximumRecordsPerUser = 10
|
24
24
|
|
25
|
-
belongs_to :user
|
25
|
+
belongs_to :user, :class_name => MultiAuth.user_model, :foreign_key => 'user_id'
|
26
26
|
|
27
27
|
validates_presence_of :email
|
28
28
|
validates_presence_of :activation_token
|
@@ -15,7 +15,7 @@
|
|
15
15
|
class OpenIdCredential < ActiveRecord::Base
|
16
16
|
MaximumRecordsPerUser = 10
|
17
17
|
|
18
|
-
belongs_to :user
|
18
|
+
belongs_to :user, :class_name => MultiAuth.user_model, :foreign_key => 'user_id'
|
19
19
|
|
20
20
|
validates_presence_of :identity_url
|
21
21
|
validates_length_of :identity_url, :maximum => 200, :allow_nil => true
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class <%= class_name %> < ActiveRecord::Migration
|
3
|
+
def self.up
|
4
|
+
create_table :open_id_credentials do |t|
|
5
|
+
t.datetime :created_at, :null => false
|
6
|
+
t.integer :user_id, :null => false
|
7
|
+
t.string :identity_url, :null => false, :limit => 200
|
8
|
+
t.datetime :loggedin_at, :null => true
|
9
|
+
end
|
10
|
+
|
11
|
+
add_index :open_id_credentials, :user_id
|
12
|
+
add_index :open_id_credentials, :identity_url, :unique => true
|
13
|
+
|
14
|
+
create_table :email_credentials do |t|
|
15
|
+
t.datetime :created_at, :null => false
|
16
|
+
t.string :activation_token, :null => false, :limit => 40
|
17
|
+
t.integer :user_id, :null => false
|
18
|
+
t.string :email, :null => false, :limit => 200
|
19
|
+
t.string :hashed_password, :null => false, :limit => 8 + 1 + 64
|
20
|
+
t.datetime :activated_at, :null => true
|
21
|
+
t.datetime :loggedin_at, :null => true
|
22
|
+
end
|
23
|
+
|
24
|
+
add_index :email_credentials, :created_at
|
25
|
+
add_index :email_credentials, :activation_token, :unique => true
|
26
|
+
add_index :email_credentials, :user_id
|
27
|
+
add_index :email_credentials, :email, :unique => true
|
28
|
+
add_index :email_credentials, :activated_at
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.down
|
32
|
+
drop_table :open_id_credentials
|
33
|
+
drop_table :email_credentials
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
class MultiAuthStyleSheetGenerator < Rails::Generator::Base
|
3
|
+
def initialize(runtime_args, runtime_options = { })
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def manifest
|
8
|
+
record do |m|
|
9
|
+
m.directory('public/stylesheets')
|
10
|
+
m.file('style.css', 'public/stylesheets/multi_auth.css')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,502 @@
|
|
1
|
+
|
2
|
+
/* generic */
|
3
|
+
|
4
|
+
*
|
5
|
+
{
|
6
|
+
margin: 0;
|
7
|
+
padding: 0;
|
8
|
+
}
|
9
|
+
|
10
|
+
body
|
11
|
+
{
|
12
|
+
width: 100%;
|
13
|
+
background-color: #F0F0F0;
|
14
|
+
}
|
15
|
+
|
16
|
+
a
|
17
|
+
{
|
18
|
+
color: #0066CC;
|
19
|
+
text-decoration: none;
|
20
|
+
}
|
21
|
+
|
22
|
+
a:hover
|
23
|
+
{
|
24
|
+
text-decoration: underline;
|
25
|
+
}
|
26
|
+
|
27
|
+
a img
|
28
|
+
{
|
29
|
+
border-width: 0;
|
30
|
+
}
|
31
|
+
|
32
|
+
/* head */
|
33
|
+
|
34
|
+
#head-outer
|
35
|
+
{
|
36
|
+
position: relative;
|
37
|
+
width: 100%;
|
38
|
+
min-width: 700px;
|
39
|
+
height: 120px;
|
40
|
+
background-color: #000000;
|
41
|
+
background-image: url(/images/logo-back.png);
|
42
|
+
background-repeat: repeat-x;
|
43
|
+
}
|
44
|
+
|
45
|
+
#head-inner
|
46
|
+
{
|
47
|
+
}
|
48
|
+
|
49
|
+
#head-logo
|
50
|
+
{
|
51
|
+
position: relative;
|
52
|
+
width: 350px;
|
53
|
+
}
|
54
|
+
#head-logo img
|
55
|
+
{
|
56
|
+
display: block;
|
57
|
+
}
|
58
|
+
|
59
|
+
#head-navi
|
60
|
+
{
|
61
|
+
position: absolute;
|
62
|
+
top: 95px;
|
63
|
+
right: 10px;
|
64
|
+
font-size: 13px;
|
65
|
+
line-height: 20px;
|
66
|
+
color: #CCCCCC;
|
67
|
+
}
|
68
|
+
#head-navi a
|
69
|
+
{
|
70
|
+
color: #99CCFF;
|
71
|
+
}
|
72
|
+
|
73
|
+
#head-ad
|
74
|
+
{
|
75
|
+
position: absolute;
|
76
|
+
width: 470px;
|
77
|
+
height: 62px;
|
78
|
+
top: 25px;
|
79
|
+
right: 20px;
|
80
|
+
}
|
81
|
+
|
82
|
+
/* body */
|
83
|
+
|
84
|
+
#body-outer-with-background,
|
85
|
+
#body-outer-without-background
|
86
|
+
{
|
87
|
+
position: relative;
|
88
|
+
width: 100%;
|
89
|
+
min-width: 700px;
|
90
|
+
}
|
91
|
+
|
92
|
+
#body-outer-with-background
|
93
|
+
{
|
94
|
+
background-image: url(../images/side-column-back.png);
|
95
|
+
background-repeat: repeat-y;
|
96
|
+
background-position: right;
|
97
|
+
}
|
98
|
+
|
99
|
+
#body-inner
|
100
|
+
{
|
101
|
+
}
|
102
|
+
|
103
|
+
#content-outer
|
104
|
+
{
|
105
|
+
}
|
106
|
+
|
107
|
+
#content-inner
|
108
|
+
{
|
109
|
+
padding: 10px;
|
110
|
+
}
|
111
|
+
|
112
|
+
#content-column-outer
|
113
|
+
{
|
114
|
+
margin: 0px 200px 0px 0px;
|
115
|
+
}
|
116
|
+
|
117
|
+
#content-column-inner
|
118
|
+
{
|
119
|
+
padding: 10px;
|
120
|
+
}
|
121
|
+
|
122
|
+
#side-column-outer
|
123
|
+
{
|
124
|
+
width: 200px;
|
125
|
+
min-height: 400px;
|
126
|
+
}
|
127
|
+
|
128
|
+
#side-column-inner
|
129
|
+
{
|
130
|
+
padding: 10px;
|
131
|
+
}
|
132
|
+
|
133
|
+
/* foot */
|
134
|
+
|
135
|
+
#foot-outer
|
136
|
+
{
|
137
|
+
width: 100%;
|
138
|
+
min-width: 700px;
|
139
|
+
border-width: 1px 0px 0px 0px;
|
140
|
+
border-style: solid;
|
141
|
+
border-color: #D0D0D0;
|
142
|
+
}
|
143
|
+
|
144
|
+
#foot-inner
|
145
|
+
{
|
146
|
+
padding: 20px;
|
147
|
+
}
|
148
|
+
|
149
|
+
#foot-powerd
|
150
|
+
{
|
151
|
+
float: right;
|
152
|
+
font-size: 90%;
|
153
|
+
font-weight: bold;
|
154
|
+
color: #999999;
|
155
|
+
}
|
156
|
+
#foot-powerd a
|
157
|
+
{
|
158
|
+
color: #333333;
|
159
|
+
}
|
160
|
+
|
161
|
+
#foot-github
|
162
|
+
{
|
163
|
+
font-size: 95%;
|
164
|
+
}
|
165
|
+
|
166
|
+
#foot-services
|
167
|
+
{
|
168
|
+
font-size: 90%;
|
169
|
+
color: #999999;
|
170
|
+
}
|
171
|
+
#foot-services a
|
172
|
+
{
|
173
|
+
color: #333333;
|
174
|
+
}
|
175
|
+
|
176
|
+
/* topic path */
|
177
|
+
|
178
|
+
#topic-path
|
179
|
+
{
|
180
|
+
padding: 0.1em 0.4em;
|
181
|
+
background-color: #E0E0E0;
|
182
|
+
color: #999999;
|
183
|
+
font-size: 90%;
|
184
|
+
}
|
185
|
+
|
186
|
+
#topic-path a
|
187
|
+
{
|
188
|
+
}
|
189
|
+
|
190
|
+
#topic-path em
|
191
|
+
{
|
192
|
+
color: #666666;
|
193
|
+
font-weight: bold;
|
194
|
+
font-style: normal;
|
195
|
+
}
|
196
|
+
|
197
|
+
/* for debug */
|
198
|
+
|
199
|
+
div.debug
|
200
|
+
{
|
201
|
+
margin-top: 1em;
|
202
|
+
background-color: #FFF0F0;
|
203
|
+
}
|
204
|
+
|
205
|
+
/* table.list */
|
206
|
+
|
207
|
+
table.list
|
208
|
+
{
|
209
|
+
border-collapse: collapse;
|
210
|
+
}
|
211
|
+
|
212
|
+
table.list thead tr th
|
213
|
+
{
|
214
|
+
padding: 0.4em;
|
215
|
+
border-width: 1px;
|
216
|
+
border-style: solid;
|
217
|
+
border-color: #F0F0F0;
|
218
|
+
color: #CCCCCC;
|
219
|
+
background-color: #333333;
|
220
|
+
}
|
221
|
+
|
222
|
+
table.list tbody tr
|
223
|
+
{
|
224
|
+
border-width: 1px;
|
225
|
+
border-style: solid;
|
226
|
+
border-color: #F0F0F0;
|
227
|
+
}
|
228
|
+
|
229
|
+
table.list tbody tr td
|
230
|
+
{
|
231
|
+
padding: 0.2em 0.4em;
|
232
|
+
border-width: 0;
|
233
|
+
}
|
234
|
+
|
235
|
+
table.list tbody tr.even td
|
236
|
+
{
|
237
|
+
background-color: #E0E0E0;
|
238
|
+
}
|
239
|
+
|
240
|
+
table.list tbody tr.odd td
|
241
|
+
{
|
242
|
+
background-color: #D0D0D0;
|
243
|
+
}
|
244
|
+
|
245
|
+
/* table.energies */
|
246
|
+
|
247
|
+
table.energies img
|
248
|
+
{
|
249
|
+
vertical-align: text-top;
|
250
|
+
}
|
251
|
+
|
252
|
+
table.energies thead tr th
|
253
|
+
{
|
254
|
+
font-size: 70%;
|
255
|
+
}
|
256
|
+
|
257
|
+
table.energies tbody tr td
|
258
|
+
{
|
259
|
+
font-size: 80%;
|
260
|
+
}
|
261
|
+
|
262
|
+
table.energies tfoot td
|
263
|
+
{
|
264
|
+
color: #999999;
|
265
|
+
text-align: right;
|
266
|
+
}
|
267
|
+
|
268
|
+
/* table.events */
|
269
|
+
|
270
|
+
table.events img
|
271
|
+
{
|
272
|
+
vertical-align: text-top;
|
273
|
+
}
|
274
|
+
|
275
|
+
table.events thead tr th
|
276
|
+
{
|
277
|
+
font-size: 70%;
|
278
|
+
}
|
279
|
+
|
280
|
+
table.events tbody tr td
|
281
|
+
{
|
282
|
+
font-size: 80%;
|
283
|
+
}
|
284
|
+
|
285
|
+
table.events tfoot td
|
286
|
+
{
|
287
|
+
color: #999999;
|
288
|
+
text-align: right;
|
289
|
+
}
|
290
|
+
|
291
|
+
/* battery */
|
292
|
+
|
293
|
+
div.battery-cell
|
294
|
+
{
|
295
|
+
margin: 0;
|
296
|
+
padding: 4px 7px 4px 5px;
|
297
|
+
width: 100px;
|
298
|
+
height: 13px;
|
299
|
+
background-image: url(/images/battery/cell.png);
|
300
|
+
background-repeat: no-repeat;
|
301
|
+
}
|
302
|
+
|
303
|
+
div.battery-level
|
304
|
+
{
|
305
|
+
margin: 0;
|
306
|
+
padding: 0;
|
307
|
+
width: 100px;
|
308
|
+
height: 13px;
|
309
|
+
}
|
310
|
+
|
311
|
+
div.battery-high,
|
312
|
+
div.battery-middle,
|
313
|
+
div.battery-low,
|
314
|
+
div.battery-empty
|
315
|
+
{
|
316
|
+
margin: 0;
|
317
|
+
padding: 0;
|
318
|
+
height: 13px;
|
319
|
+
background-repeat: repeat-x;
|
320
|
+
}
|
321
|
+
|
322
|
+
div.battery-high
|
323
|
+
{
|
324
|
+
background-image: url(/images/battery/level-green.png);
|
325
|
+
}
|
326
|
+
|
327
|
+
div.battery-middle
|
328
|
+
{
|
329
|
+
background-image: url(/images/battery/level-orange.png);
|
330
|
+
}
|
331
|
+
|
332
|
+
div.battery-low
|
333
|
+
{
|
334
|
+
background-image: url(/images/battery/level-yellow.png);
|
335
|
+
}
|
336
|
+
|
337
|
+
div.battery-empty
|
338
|
+
{
|
339
|
+
background-image: url(/images/battery/level-red.png);
|
340
|
+
}
|
341
|
+
|
342
|
+
/* signup-progress */
|
343
|
+
/* FIXME: 別ファイルに分離 */
|
344
|
+
|
345
|
+
ol#email-signup-progress
|
346
|
+
{
|
347
|
+
}
|
348
|
+
|
349
|
+
ol#email-signup-progress li
|
350
|
+
{
|
351
|
+
display: inline;
|
352
|
+
border-style: solid;
|
353
|
+
border-width: 1px;
|
354
|
+
border-color: black;
|
355
|
+
}
|
356
|
+
|
357
|
+
ol#email-signup-progress li.active
|
358
|
+
{
|
359
|
+
font-weight: bold;
|
360
|
+
}
|
361
|
+
|
362
|
+
ol#email-signup-progress li.inactive
|
363
|
+
{
|
364
|
+
font-weight: normal;
|
365
|
+
}
|
366
|
+
|
367
|
+
#dialog
|
368
|
+
{
|
369
|
+
margin: 100px auto;
|
370
|
+
padding: 15px;
|
371
|
+
width: 500px;
|
372
|
+
border-width: 1px;
|
373
|
+
border-style: solid;
|
374
|
+
border-color: #CCCCCC;
|
375
|
+
}
|
376
|
+
#dialog h1
|
377
|
+
{
|
378
|
+
margin: 0 0 0.4em 0;
|
379
|
+
color: #666666;
|
380
|
+
font-size: 130%;
|
381
|
+
font-weight: bold;
|
382
|
+
}
|
383
|
+
.message
|
384
|
+
{
|
385
|
+
color: #999999;
|
386
|
+
font-size: 90%;
|
387
|
+
}
|
388
|
+
|
389
|
+
h1
|
390
|
+
{
|
391
|
+
background-image: url(/images/h1-back.png);
|
392
|
+
background-repeat: repeat-x;
|
393
|
+
background-position: left center;
|
394
|
+
}
|
395
|
+
h1 span
|
396
|
+
{
|
397
|
+
padding-right: 0.2em;
|
398
|
+
background-color: #F0F0F0;
|
399
|
+
}
|
400
|
+
|
401
|
+
h2
|
402
|
+
{
|
403
|
+
background-image: url(/images/h1-back.png);
|
404
|
+
background-repeat: repeat-x;
|
405
|
+
background-position: left center;
|
406
|
+
}
|
407
|
+
h2 span
|
408
|
+
{
|
409
|
+
padding-right: 0.2em;
|
410
|
+
background-color: #F0F0F0;
|
411
|
+
}
|
412
|
+
|
413
|
+
/* side-column */
|
414
|
+
|
415
|
+
#side-column-inner h1
|
416
|
+
{
|
417
|
+
margin-bottom: 8px;
|
418
|
+
color: #666666;
|
419
|
+
font-size: 16px;
|
420
|
+
font-weight: bold;
|
421
|
+
}
|
422
|
+
|
423
|
+
#side-column-inner hr
|
424
|
+
{
|
425
|
+
height: 1px;
|
426
|
+
margin: 8px 0px;
|
427
|
+
border: none;
|
428
|
+
background-color: #CCCCCC;
|
429
|
+
}
|
430
|
+
|
431
|
+
#signup-link
|
432
|
+
{
|
433
|
+
font-size: 22px;
|
434
|
+
font-weight: bold;
|
435
|
+
text-align: center;
|
436
|
+
}
|
437
|
+
#signup-free
|
438
|
+
{
|
439
|
+
margin-bottom: 10px;
|
440
|
+
font-size: 12px;
|
441
|
+
text-align: center;
|
442
|
+
color: #990000;
|
443
|
+
}
|
444
|
+
|
445
|
+
#openid-sites
|
446
|
+
{
|
447
|
+
font-size: 12px;
|
448
|
+
line-height: 18px;
|
449
|
+
}
|
450
|
+
#openid-sites img
|
451
|
+
{
|
452
|
+
vertical-align: text-bottom;
|
453
|
+
}
|
454
|
+
|
455
|
+
#side-column-inner form input.openid,
|
456
|
+
#side-column-inner form input.openid-with-desc,
|
457
|
+
#side-column-inner form input.email,
|
458
|
+
#side-column-inner form input.email-with-desc,
|
459
|
+
#side-column-inner form input.password,
|
460
|
+
#side-column-inner form input.password-with-desc
|
461
|
+
{
|
462
|
+
width: 160px; /* width:200 - (padding:20 + padding:18 + border:2)*/
|
463
|
+
height: 20px;
|
464
|
+
margin-bottom: 4px;
|
465
|
+
padding-left: 18px;
|
466
|
+
border-width: 1px;
|
467
|
+
border-style: solid;
|
468
|
+
border-color: #666666;
|
469
|
+
background-repeat: no-repeat;
|
470
|
+
background-position: 1px;
|
471
|
+
}
|
472
|
+
|
473
|
+
#side-column-inner form input.openid
|
474
|
+
{
|
475
|
+
background-image: url(/images/icons/openid.png);
|
476
|
+
}
|
477
|
+
|
478
|
+
#side-column-inner form input.openid-with-desc
|
479
|
+
{
|
480
|
+
background-image: url(/images/icons/openid-with-desc.png);
|
481
|
+
}
|
482
|
+
|
483
|
+
#side-column-inner form input.email
|
484
|
+
{
|
485
|
+
background-image: url(/images/icons/fam/email.png);
|
486
|
+
}
|
487
|
+
|
488
|
+
#side-column-inner form input.email-with-desc
|
489
|
+
{
|
490
|
+
background-image: url(/images/icons/fam/email-with-desc.png);
|
491
|
+
}
|
492
|
+
|
493
|
+
#side-column-inner form input.password
|
494
|
+
{
|
495
|
+
background-image: url(/images/icons/fam/key.png);
|
496
|
+
}
|
497
|
+
|
498
|
+
#side-column-inner form input.password-with-desc
|
499
|
+
{
|
500
|
+
background-image: url(/images/icons/fam/key-with-desc.png);
|
501
|
+
}
|
502
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module MultiAuth
|
4
|
+
module ActionController
|
5
|
+
module ClassMethods
|
6
|
+
def verify_method_post(options = {})
|
7
|
+
verify({
|
8
|
+
:method => :post,
|
9
|
+
:render => {:text => "Method Not Allowed", :status => 405},
|
10
|
+
}.merge(options))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
module InstanceMethods
|
14
|
+
private
|
15
|
+
|
16
|
+
def authentication(user_id = session[:user_id])
|
17
|
+
@login_user = MultiAuth.user_model_class.find_by_id(user_id)
|
18
|
+
return true
|
19
|
+
end
|
20
|
+
|
21
|
+
def authentication_required
|
22
|
+
if @login_user
|
23
|
+
return true
|
24
|
+
else
|
25
|
+
set_error("ログインが必要です。")
|
26
|
+
redirect_to(root_path)
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_notice(message)
|
32
|
+
flash[:notice] = @flash_notice = message
|
33
|
+
flash[:error] = @flash_error = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_error(message)
|
37
|
+
flash[:notice] = @flash_notice = nil
|
38
|
+
flash[:error] = @flash_error = message
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_error_now(message)
|
42
|
+
flash.now[:notice] = @flash_notice = nil
|
43
|
+
flash.now[:error] = @flash_error = message
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
ActionController::Base.__send__(:extend, MultiAuth::ActionController::ClassMethods)
|
50
|
+
ActionController::Base.__send__(:include, MultiAuth::ActionController::InstanceMethods)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
module MultiAuth
|
3
|
+
module ActiveRecord
|
4
|
+
module ClassMethods
|
5
|
+
def multi_auth(options = { })
|
6
|
+
class_eval do
|
7
|
+
has_many :open_id_credentials, :foreign_key => 'user_id', :dependent => :destroy
|
8
|
+
has_many :email_credentials, :foreign_key => 'user_id', :dependent => :destroy
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
ActiveRecord::Base.__send__(:extend, MultiAuth::ActiveRecord::ClassMethods)
|
16
|
+
|
data/lib/multi_auth.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
|
3
|
+
module MultiAuth
|
4
4
|
|
5
5
|
class << self
|
6
6
|
attr_accessor_with_default :application_name, 'app'
|
@@ -9,56 +9,13 @@ class MultiAuth
|
|
9
9
|
def setup
|
10
10
|
yield self
|
11
11
|
end
|
12
|
-
|
13
|
-
def self.user_model_class
|
14
|
-
@user_model.constantize
|
15
|
-
end
|
16
12
|
end
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
verify({
|
21
|
-
:method => :post,
|
22
|
-
:render => {:text => "Method Not Allowed", :status => 405},
|
23
|
-
}.merge(options))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
module InstanceMethods
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def authentication(user_id = session[:user_id])
|
32
|
-
@login_user = User.find_by_id(user_id)
|
33
|
-
return true
|
34
|
-
end
|
35
|
-
|
36
|
-
def authentication_required
|
37
|
-
if @login_user
|
38
|
-
return true
|
39
|
-
else
|
40
|
-
set_error("ログインが必要です。")
|
41
|
-
redirect_to(root_path)
|
42
|
-
return false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def set_notice(message)
|
47
|
-
flash[:notice] = @flash_notice = message
|
48
|
-
flash[:error] = @flash_error = nil
|
49
|
-
end
|
50
|
-
|
51
|
-
def set_error(message)
|
52
|
-
flash[:notice] = @flash_notice = nil
|
53
|
-
flash[:error] = @flash_error = message
|
54
|
-
end
|
55
|
-
|
56
|
-
def set_error_now(message)
|
57
|
-
flash.now[:notice] = @flash_notice = nil
|
58
|
-
flash.now[:error] = @flash_error = message
|
59
|
-
end
|
14
|
+
def self.user_model_class
|
15
|
+
user_model.constantize
|
60
16
|
end
|
61
17
|
end
|
62
18
|
|
63
|
-
|
64
|
-
|
19
|
+
require 'multi_auth/action_controller'
|
20
|
+
require 'multi_auth/active_record'
|
21
|
+
|
@@ -153,7 +153,7 @@ class Signup::EmailControllerTest < ActionController::TestCase
|
|
153
153
|
@request.session[:signup_form] = @signup_form.attributes
|
154
154
|
|
155
155
|
assert_difference("EmailCredential.count", +1) {
|
156
|
-
assert_difference("
|
156
|
+
assert_difference("#{MultiAuth.user_model}.count", +1) {
|
157
157
|
post :create
|
158
158
|
}
|
159
159
|
}
|
data/test/test_helper.rb
CHANGED
@@ -41,6 +41,7 @@ class ActiveSupport::TestCase
|
|
41
41
|
#
|
42
42
|
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
43
43
|
# -- they do not yet inherit this setting
|
44
|
+
set_fixture_class({ :users => DummyUser })
|
44
45
|
fixtures :all
|
45
46
|
|
46
47
|
# Add more helper methods to be used by all tests here...
|
@@ -79,4 +80,5 @@ class ActiveSupport::TestCase
|
|
79
80
|
assert_nil(assigns(:flash_notice))
|
80
81
|
assert_not_nil(assigns(:flash_error))
|
81
82
|
end
|
83
|
+
|
82
84
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
|
-
class
|
5
|
+
class DummyUserTest < ActiveSupport::TestCase
|
6
6
|
def setup
|
7
|
-
@klass =
|
7
|
+
@klass = DummyUser
|
8
8
|
@basic = @klass.new(
|
9
9
|
:user_token => "0" * @klass::TokenLength,
|
10
10
|
:nickname => "nickname")
|
@@ -128,13 +128,13 @@ class NoticeFormatterTest < ActiveSupport::TestCase
|
|
128
128
|
|
129
129
|
test "format_part_of_user" do
|
130
130
|
expected = {
|
131
|
-
"user:token" => "0" *
|
132
|
-
"user:token:json" => '"' + "0" *
|
131
|
+
"user:token" => "0" * MultiAuth.user_model_class::TokenLength,
|
132
|
+
"user:token:json" => '"' + "0" * MultiAuth.user_model_class::TokenLength + '"',
|
133
133
|
"user:nickname" => "nickname",
|
134
134
|
"user:nickname:json" => '"nickname"',
|
135
135
|
}
|
136
|
-
user =
|
137
|
-
:user_token => "0" *
|
136
|
+
user = MultiAuth.user_model_class.new(
|
137
|
+
:user_token => "0" * MultiAuth.user_model_class::TokenLength,
|
138
138
|
:nickname => "nickname")
|
139
139
|
assert_equal(expected, @module.format_part_of_user(user))
|
140
140
|
end
|
@@ -146,7 +146,7 @@ class NoticeFormatterTest < ActiveSupport::TestCase
|
|
146
146
|
"user:nickname" => "-",
|
147
147
|
"user:nickname:json" => "null",
|
148
148
|
}
|
149
|
-
assert_equal(expected, @module.format_part_of_user(
|
149
|
+
assert_equal(expected, @module.format_part_of_user(MultiAuth.user_model_class.new))
|
150
150
|
assert_equal(expected, @module.format_part_of_user(nil))
|
151
151
|
end
|
152
152
|
|
@@ -19,19 +19,19 @@ class TokenUtilTest < ActiveSupport::TestCase
|
|
19
19
|
end
|
20
20
|
|
21
21
|
test "create_unique_token" do
|
22
|
-
assert_match(/\A[0-9a-f]{10}\z/, @mod.create_unique_token(
|
23
|
-
assert_match(/\A[0-9a-f]{20}\z/, @mod.create_unique_token(
|
24
|
-
assert_match(/\A[0-9a-f]{30}\z/, @mod.create_unique_token(
|
22
|
+
assert_match(/\A[0-9a-f]{10}\z/, @mod.create_unique_token(MultiAuth.user_model_class, :user_token, 10))
|
23
|
+
assert_match(/\A[0-9a-f]{20}\z/, @mod.create_unique_token(MultiAuth.user_model_class, :user_token, 20))
|
24
|
+
assert_match(/\A[0-9a-f]{30}\z/, @mod.create_unique_token(MultiAuth.user_model_class, :user_token, 30))
|
25
25
|
|
26
26
|
srand(0)
|
27
27
|
assert_not_equal(
|
28
|
-
@mod.create_unique_token(
|
29
|
-
@mod.create_unique_token(
|
28
|
+
@mod.create_unique_token(MultiAuth.user_model_class, :user_token, 20),
|
29
|
+
@mod.create_unique_token(MultiAuth.user_model_class, :user_token, 20))
|
30
30
|
end
|
31
31
|
|
32
32
|
test "create_unique_token, conflict" do
|
33
33
|
[
|
34
|
-
[
|
34
|
+
[MultiAuth.user_model_class, :user_token],
|
35
35
|
].each { |klass, column|
|
36
36
|
exist_token = klass.first[column]
|
37
37
|
unique_token = "0" * exist_token.size
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: okkez-multi_auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- okkez
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-11 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -52,9 +52,9 @@ files:
|
|
52
52
|
- app/controllers/credentials_controller.rb
|
53
53
|
- app/controllers/signup/email_controller.rb
|
54
54
|
- app/controllers/signup/open_id_controller.rb
|
55
|
+
- app/models/dummy_user.rb
|
55
56
|
- app/models/email_credential_edit_form.rb
|
56
57
|
- app/models/open_id_login_form.rb
|
57
|
-
- app/models/user.rb
|
58
58
|
- app/models/activation_mailer.rb
|
59
59
|
- app/models/email_credential.rb
|
60
60
|
- app/models/session.rb
|
@@ -105,6 +105,8 @@ files:
|
|
105
105
|
- lib/multi_auth_helper.rb
|
106
106
|
- lib/token_util.rb
|
107
107
|
- lib/open_id_authentication/result.rb
|
108
|
+
- lib/multi_auth/active_record.rb
|
109
|
+
- lib/multi_auth/action_controller.rb
|
108
110
|
- public/favicon.ico
|
109
111
|
- public/422.html
|
110
112
|
- public/503.html
|
@@ -153,6 +155,11 @@ files:
|
|
153
155
|
- public/images/h1-back.png
|
154
156
|
- public/robots.txt
|
155
157
|
- rails/init.rb
|
158
|
+
- generators/multi_auth_style_sheet/multi_auth_style_sheet_generator.rb
|
159
|
+
- generators/multi_auth_style_sheet/templates/style.css
|
160
|
+
- generators/multi_auth_migration/multi_auth_migration_generator.rb
|
161
|
+
- generators/multi_auth_migration/USAGE
|
162
|
+
- generators/multi_auth_migration/templates/migration.rb
|
156
163
|
- test/unit/token_util_test.rb
|
157
164
|
- test/unit/open_id_login_form_test.rb
|
158
165
|
- test/unit/notice_formatter_test.rb
|
@@ -170,7 +177,7 @@ files:
|
|
170
177
|
- test/unit/helpers/auth_helper_test.rb
|
171
178
|
- test/unit/action_mailer_util_test.rb
|
172
179
|
- test/unit/open_id_credential_test.rb
|
173
|
-
- test/unit/
|
180
|
+
- test/unit/dummy_user_test.rb
|
174
181
|
- test/unit/activation_mailer_test.rb
|
175
182
|
- test/unit/session_test.rb
|
176
183
|
- test/unit/email_credential_test.rb
|