casino-activerecord_authenticator 3.0.0 → 4.0.0.pre.1
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.md
CHANGED
|
@@ -24,6 +24,8 @@ To use the ActiveRecord authenticator, configure it in your cas.yml:
|
|
|
24
24
|
email: "email_database_column"
|
|
25
25
|
fullname: "displayname_database_column"
|
|
26
26
|
|
|
27
|
+
Configuration examples for the `connection` part for other databases can be found [here](https://gist.github.com/erichurst/961978).
|
|
28
|
+
|
|
27
29
|
## Contributing to casino-activerecord_authenticator
|
|
28
30
|
|
|
29
31
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
|
@@ -26,6 +26,6 @@ Gem::Specification.new do |s|
|
|
|
26
26
|
s.add_runtime_dependency 'activerecord', '~> 4.1.0'
|
|
27
27
|
s.add_runtime_dependency 'unix-crypt', '~> 1.1'
|
|
28
28
|
s.add_runtime_dependency 'bcrypt', '~> 3.0'
|
|
29
|
-
s.add_runtime_dependency 'casino', '
|
|
29
|
+
s.add_runtime_dependency 'casino', '>= 3.0.0', '< 5.0.0'
|
|
30
30
|
s.add_runtime_dependency 'phpass-ruby', '~> 0.1'
|
|
31
31
|
end
|
|
@@ -16,13 +16,24 @@ class CASino::ActiveRecordAuthenticator
|
|
|
16
16
|
end
|
|
17
17
|
@options = options.deep_symbolize_keys
|
|
18
18
|
raise ArgumentError, "Table name is missing" unless @options[:table]
|
|
19
|
+
if @options[:model_name]
|
|
20
|
+
model_name = @options[:model_name]
|
|
21
|
+
else
|
|
22
|
+
model_name = @options[:table]
|
|
23
|
+
if @options[:connection][:database]
|
|
24
|
+
model_name = "#{@options[:connection][:database].gsub(/[^a-zA-Z]+/, '')}_#{model_name}"
|
|
25
|
+
end
|
|
26
|
+
model_name = model_name.classify
|
|
27
|
+
end
|
|
28
|
+
model_class_name = "#{self.class.to_s}::#{model_name}"
|
|
19
29
|
eval <<-END
|
|
20
|
-
class #{
|
|
30
|
+
class #{model_class_name} < AuthDatabase
|
|
21
31
|
self.table_name = "#{@options[:table]}"
|
|
32
|
+
self.inheritance_column = :_type_disabled
|
|
22
33
|
end
|
|
23
34
|
END
|
|
24
35
|
|
|
25
|
-
@model =
|
|
36
|
+
@model = model_class_name.constantize
|
|
26
37
|
@model.establish_connection @options[:connection]
|
|
27
38
|
end
|
|
28
39
|
|
|
@@ -31,7 +42,7 @@ class CASino::ActiveRecordAuthenticator
|
|
|
31
42
|
password_from_database = user.send(@options[:password_column])
|
|
32
43
|
|
|
33
44
|
if valid_password?(password, password_from_database)
|
|
34
|
-
|
|
45
|
+
user_data(user)
|
|
35
46
|
else
|
|
36
47
|
false
|
|
37
48
|
end
|
|
@@ -40,7 +51,18 @@ class CASino::ActiveRecordAuthenticator
|
|
|
40
51
|
false
|
|
41
52
|
end
|
|
42
53
|
|
|
54
|
+
def load_user_data(username)
|
|
55
|
+
user = @model.send("find_by_#{@options[:username_column]}!", username)
|
|
56
|
+
user_data(user)
|
|
57
|
+
rescue ActiveRecord::RecordNotFound
|
|
58
|
+
nil
|
|
59
|
+
end
|
|
60
|
+
|
|
43
61
|
private
|
|
62
|
+
def user_data(user)
|
|
63
|
+
{ username: user.send(@options[:username_column]), extra_attributes: extra_attributes(user) }
|
|
64
|
+
end
|
|
65
|
+
|
|
44
66
|
def valid_password?(password, password_from_database)
|
|
45
67
|
return false if password_from_database.blank?
|
|
46
68
|
magic = password_from_database.split('$')[1]
|
|
@@ -19,6 +19,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
19
19
|
}
|
|
20
20
|
end
|
|
21
21
|
let(:faulty_options){ options.merge(table: nil) }
|
|
22
|
+
let(:user_class) { described_class::TmpcasinotestauthsqliteUser }
|
|
22
23
|
|
|
23
24
|
subject { described_class.new(options) }
|
|
24
25
|
|
|
@@ -37,7 +38,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
37
38
|
end
|
|
38
39
|
end
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
user_class.create!(
|
|
41
42
|
username: 'test',
|
|
42
43
|
password: '$5$cegeasjoos$vPX5AwDqOTGocGjehr7k1IYp6Kt.U4FmMUa.1l6NrzD', # password: testpassword
|
|
43
44
|
mail_address: 'mail@example.org')
|
|
@@ -51,6 +52,18 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
51
52
|
end
|
|
52
53
|
end
|
|
53
54
|
|
|
55
|
+
describe 'custom model name' do
|
|
56
|
+
let(:model_name) { 'DongerRaiser' }
|
|
57
|
+
before do
|
|
58
|
+
options[:model_name] = model_name
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'should create the model with the name specified' do
|
|
62
|
+
described_class.new(options)
|
|
63
|
+
expect(described_class.const_get(model_name)).to be_a Class
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
54
67
|
describe 'invalid yaml input' do
|
|
55
68
|
context 'no hash input' do
|
|
56
69
|
it 'throws an argument error if the supplied input was not hash' do
|
|
@@ -66,6 +79,25 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
66
79
|
end
|
|
67
80
|
end
|
|
68
81
|
end
|
|
82
|
+
|
|
83
|
+
describe '#load_user_data' do
|
|
84
|
+
context 'valid username' do
|
|
85
|
+
it 'returns the username' do
|
|
86
|
+
subject.validate('test', 'testpassword')[:username].should eq('test')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'returns the extra attributes' do
|
|
90
|
+
subject.load_user_data('test')[:extra_attributes][:email].should eq('mail@example.org')
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context 'invalid username' do
|
|
95
|
+
it 'returns nil' do
|
|
96
|
+
subject.load_user_data('does-not-exist').should eq(nil)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
69
101
|
describe '#validate' do
|
|
70
102
|
|
|
71
103
|
context 'valid username' do
|
|
@@ -95,7 +127,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
95
127
|
|
|
96
128
|
context 'NULL password field' do
|
|
97
129
|
it 'returns false' do
|
|
98
|
-
user =
|
|
130
|
+
user = user_class.first
|
|
99
131
|
user.password = nil
|
|
100
132
|
user.save!
|
|
101
133
|
|
|
@@ -105,7 +137,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
105
137
|
|
|
106
138
|
context 'empty password field' do
|
|
107
139
|
it 'returns false' do
|
|
108
|
-
user =
|
|
140
|
+
user = user_class.first
|
|
109
141
|
user.password = ''
|
|
110
142
|
user.save!
|
|
111
143
|
|
|
@@ -122,7 +154,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
122
154
|
|
|
123
155
|
context 'support for bcrypt' do
|
|
124
156
|
before do
|
|
125
|
-
|
|
157
|
+
user_class.create!(
|
|
126
158
|
username: 'test2',
|
|
127
159
|
password: '$2a$10$dRFLSkYedQ05sqMs3b265e0nnJSoa9RhbpKXU79FDPVeuS1qBG7Jq', # password: testpassword2
|
|
128
160
|
mail_address: 'mail@example.org')
|
|
@@ -137,7 +169,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
137
169
|
let(:pepper) { 'abcdefg' }
|
|
138
170
|
|
|
139
171
|
before do
|
|
140
|
-
|
|
172
|
+
user_class.create!(
|
|
141
173
|
username: 'test3',
|
|
142
174
|
password: '$2a$10$ndCGPWg5JFMQH/Kl6xKe.OGNaiG7CFIAVsgAOJU75Q6g5/FpY5eX6', # password: testpassword3, pepper: abcdefg
|
|
143
175
|
mail_address: 'mail@example.org')
|
|
@@ -150,7 +182,7 @@ describe CASino::ActiveRecordAuthenticator do
|
|
|
150
182
|
|
|
151
183
|
context 'support for phpass' do
|
|
152
184
|
before do
|
|
153
|
-
|
|
185
|
+
user_class.create!(
|
|
154
186
|
username: 'test4',
|
|
155
187
|
password: '$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0', # password: test12345
|
|
156
188
|
mail_address: 'mail@example.org')
|
metadata
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: casino-activerecord_authenticator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 4.0.0.pre.1
|
|
5
|
+
prerelease: 6
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Nils Caspar
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2014-
|
|
13
|
+
date: 2014-11-19 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rake
|
|
@@ -145,17 +145,23 @@ dependencies:
|
|
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
|
146
146
|
none: false
|
|
147
147
|
requirements:
|
|
148
|
-
- -
|
|
148
|
+
- - ! '>='
|
|
149
149
|
- !ruby/object:Gem::Version
|
|
150
150
|
version: 3.0.0
|
|
151
|
+
- - <
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: 5.0.0
|
|
151
154
|
type: :runtime
|
|
152
155
|
prerelease: false
|
|
153
156
|
version_requirements: !ruby/object:Gem::Requirement
|
|
154
157
|
none: false
|
|
155
158
|
requirements:
|
|
156
|
-
- -
|
|
159
|
+
- - ! '>='
|
|
157
160
|
- !ruby/object:Gem::Version
|
|
158
161
|
version: 3.0.0
|
|
162
|
+
- - <
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: 5.0.0
|
|
159
165
|
- !ruby/object:Gem::Dependency
|
|
160
166
|
name: phpass-ruby
|
|
161
167
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -213,9 +219,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
213
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
220
|
none: false
|
|
215
221
|
requirements:
|
|
216
|
-
- - ! '
|
|
222
|
+
- - ! '>'
|
|
217
223
|
- !ruby/object:Gem::Version
|
|
218
|
-
version:
|
|
224
|
+
version: 1.3.1
|
|
219
225
|
requirements: []
|
|
220
226
|
rubyforge_project:
|
|
221
227
|
rubygems_version: 1.8.23
|