omniauth-ldap 1.0.5 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/omniauth-ldap/version.rb +1 -1
- data/omniauth-ldap.gemspec +7 -9
- data/spec/omniauth-ldap/adaptor_spec.rb +48 -44
- data/spec/omniauth/strategies/ldap_spec.rb +59 -53
- metadata +35 -81
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4a580a1583118feff557707be44e27399e53b1b4
|
4
|
+
data.tar.gz: 2b1e9f565c330b999f2724f0ea192ab86c47ca33
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 790f8a998f080ccd92746f748fb4d0066a4e2e87d62cd9f0434dc639fc829e7711a52ab640c97541eb8346528c6e4556bd25c6cfc86a69f09639bfbb8ce14d2c
|
7
|
+
data.tar.gz: 5722ea2a9335f2171b70aafdf461790eb22ebbbb7e48fc56a646b776ec96d9915fdcfc4e581c7afe8b53cc5ead645eedfbf89e9aaa4e7e7ed2ea6acbb1584a6c
|
data/omniauth-ldap.gemspec
CHANGED
@@ -2,22 +2,20 @@
|
|
2
2
|
require File.expand_path('../lib/omniauth-ldap/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["Ping Yu"]
|
6
|
-
gem.email = ["ping@intridea.com"]
|
5
|
+
gem.authors = ["Ping Yu", "Tom Milewski"]
|
6
|
+
gem.email = ["ping@intridea.com", "tmilewski@gmail.com"]
|
7
7
|
gem.description = %q{A LDAP strategy for OmniAuth.}
|
8
8
|
gem.summary = %q{A LDAP strategy for OmniAuth.}
|
9
9
|
gem.homepage = "https://github.com/intridea/omniauth-ldap"
|
10
10
|
gem.license = "MIT"
|
11
11
|
|
12
|
-
gem.add_runtime_dependency 'omniauth', '~> 1.
|
13
|
-
gem.add_runtime_dependency 'net-ldap', '~> 0.
|
14
|
-
gem.add_runtime_dependency 'pyu-ruby-sasl', '~> 0.0.3.
|
15
|
-
gem.add_runtime_dependency 'rubyntlm', '~> 0.
|
16
|
-
gem.add_development_dependency 'rspec', '~>
|
12
|
+
gem.add_runtime_dependency 'omniauth', '~> 1.8.1'
|
13
|
+
gem.add_runtime_dependency 'net-ldap', '~> 0.16'
|
14
|
+
gem.add_runtime_dependency 'pyu-ruby-sasl', '~> 0.0.3.3'
|
15
|
+
gem.add_runtime_dependency 'rubyntlm', '~> 0.6.2'
|
16
|
+
gem.add_development_dependency 'rspec', '~> 3.0'
|
17
17
|
gem.add_development_dependency 'simplecov'
|
18
18
|
gem.add_development_dependency 'rack-test'
|
19
|
-
gem.add_development_dependency 'libnotify'
|
20
|
-
gem.add_development_dependency 'ruby-debug19'
|
21
19
|
|
22
20
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
21
|
gem.files = `git ls-files`.split("\n")
|
@@ -4,79 +4,83 @@ describe "OmniAuth::LDAP::Adaptor" do
|
|
4
4
|
describe 'initialize' do
|
5
5
|
it 'should throw exception when must have field is not set' do
|
6
6
|
#[:host, :port, :method, :bind_dn]
|
7
|
-
|
7
|
+
expect {
|
8
|
+
OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'plain' })
|
9
|
+
}.to raise_error(ArgumentError)
|
8
10
|
end
|
9
11
|
|
10
12
|
it 'should throw exception when method is not supported' do
|
11
|
-
|
13
|
+
expect {
|
14
|
+
OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'myplain', uid: 'uid', port: 389, base: 'dc=com' })
|
15
|
+
}.to raise_error(OmniAuth::LDAP::Adaptor::ConfigurationError)
|
12
16
|
end
|
13
17
|
|
14
18
|
it 'should setup ldap connection with anonymous' do
|
15
|
-
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName'})
|
16
|
-
adaptor.connection.
|
17
|
-
adaptor.connection.host.
|
18
|
-
adaptor.connection.port.
|
19
|
-
adaptor.connection.base.
|
20
|
-
adaptor.connection.instance_variable_get('@auth').
|
19
|
+
adaptor = OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName' })
|
20
|
+
expect(adaptor.connection).to_not be_nil
|
21
|
+
expect(adaptor.connection.host).to eq '192.168.1.145'
|
22
|
+
expect(adaptor.connection.port).to eq 389
|
23
|
+
expect(adaptor.connection.base).to eq 'dc=intridea, dc=com'
|
24
|
+
expect(adaptor.connection.instance_variable_get('@auth')).to eq({ method: :anonymous, username: nil, password: nil })
|
21
25
|
end
|
22
26
|
|
23
27
|
it 'should setup ldap connection with simple' do
|
24
|
-
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', bind_dn: 'bind_dn', password: 'password'})
|
25
|
-
adaptor.connection.
|
26
|
-
adaptor.connection.host.
|
27
|
-
adaptor.connection.port.
|
28
|
-
adaptor.connection.base.
|
29
|
-
adaptor.connection.instance_variable_get('@auth').
|
28
|
+
adaptor = OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', bind_dn: 'bind_dn', password: 'password' })
|
29
|
+
expect(adaptor.connection).to_not be_nil
|
30
|
+
expect(adaptor.connection.host).to eq '192.168.1.145'
|
31
|
+
expect(adaptor.connection.port).to eq 389
|
32
|
+
expect(adaptor.connection.base).to eq 'dc=intridea, dc=com'
|
33
|
+
expect(adaptor.connection.instance_variable_get('@auth')).to eq({ method: :simple, username: 'bind_dn', password: 'password' })
|
30
34
|
end
|
31
35
|
|
32
36
|
it 'should setup ldap connection with sasl-md5' do
|
33
|
-
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', try_sasl: true, sasl_mechanisms: ["DIGEST-MD5"], bind_dn: 'bind_dn', password: 'password'})
|
34
|
-
adaptor.connection.
|
35
|
-
adaptor.connection.host.
|
36
|
-
adaptor.connection.port.
|
37
|
-
adaptor.connection.base.
|
38
|
-
adaptor.connection.instance_variable_get('@auth')[:method].
|
39
|
-
adaptor.connection.instance_variable_get('@auth')[:mechanism].
|
40
|
-
adaptor.connection.instance_variable_get('@auth')[:initial_credential].
|
41
|
-
adaptor.connection.instance_variable_get('@auth')[:challenge_response].
|
37
|
+
adaptor = OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', try_sasl: true, sasl_mechanisms: ["DIGEST-MD5"], bind_dn: 'bind_dn', password: 'password' })
|
38
|
+
expect(adaptor.connection).to_not be_nil
|
39
|
+
expect(adaptor.connection.host).to eq '192.168.1.145'
|
40
|
+
expect(adaptor.connection.port).to eq 389
|
41
|
+
expect(adaptor.connection.base).to eq 'dc=intridea, dc=com'
|
42
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:method]).to eq :sasl
|
43
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:mechanism]).to eq 'DIGEST-MD5'
|
44
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:initial_credential]).to eq ''
|
45
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:challenge_response]).to_not be_nil
|
42
46
|
end
|
43
47
|
|
44
48
|
it 'should setup ldap connection with sasl-gss' do
|
45
49
|
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', try_sasl: true, sasl_mechanisms: ["GSS-SPNEGO"], bind_dn: 'bind_dn', password: 'password'})
|
46
|
-
adaptor.connection.
|
47
|
-
adaptor.connection.host.
|
48
|
-
adaptor.connection.port.
|
49
|
-
adaptor.connection.base.
|
50
|
-
adaptor.connection.instance_variable_get('@auth')[:method].
|
51
|
-
adaptor.connection.instance_variable_get('@auth')[:mechanism].
|
52
|
-
adaptor.connection.instance_variable_get('@auth')[:initial_credential].
|
53
|
-
adaptor.connection.instance_variable_get('@auth')[:challenge_response].
|
50
|
+
expect(adaptor.connection).to_not be_nil
|
51
|
+
expect(adaptor.connection.host).to eq '192.168.1.145'
|
52
|
+
expect(adaptor.connection.port).to eq 389
|
53
|
+
expect(adaptor.connection.base).to eq 'dc=intridea, dc=com'
|
54
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:method]).to eq :sasl
|
55
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:mechanism]).to eq 'GSS-SPNEGO'
|
56
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:initial_credential]).to match /^NTLMSSP/
|
57
|
+
expect(adaptor.connection.instance_variable_get('@auth')[:challenge_response]).to_not be_nil
|
54
58
|
end
|
55
59
|
|
56
60
|
it 'should set the encryption method correctly' do
|
57
|
-
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'tls', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName'})
|
58
|
-
adaptor.connection.instance_variable_get('@encryption').
|
61
|
+
adaptor = OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'tls', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName' })
|
62
|
+
expect(adaptor.connection.instance_variable_get('@encryption')).to include method: :start_tls
|
59
63
|
end
|
60
64
|
end
|
61
65
|
|
62
66
|
describe 'bind_as' do
|
63
|
-
let(:args) { {:filter => Net::LDAP::Filter.eq('sAMAccountName', 'username'), :password => 'password', :size => 1} }
|
67
|
+
let(:args) { { :filter => Net::LDAP::Filter.eq('sAMAccountName', 'username'), :password => 'password', :size => 1 } }
|
64
68
|
let(:rs) { Struct.new(:dn).new('new dn') }
|
65
69
|
|
66
70
|
it 'should bind simple' do
|
67
|
-
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.126", method: 'plain', base: 'dc=score, dc=local', port: 389, uid: 'sAMAccountName', bind_dn: 'bind_dn', password: 'password'})
|
68
|
-
adaptor.connection.
|
69
|
-
adaptor.connection.
|
70
|
-
adaptor.connection.
|
71
|
-
adaptor.bind_as(args).
|
71
|
+
adaptor = OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.126", method: 'plain', base: 'dc=score, dc=local', port: 389, uid: 'sAMAccountName', bind_dn: 'bind_dn', password: 'password' })
|
72
|
+
expect(adaptor.connection).to receive(:open).and_yield(adaptor.connection)
|
73
|
+
expect(adaptor.connection).to receive(:search).with(args).and_return([rs])
|
74
|
+
expect(adaptor.connection).to receive(:bind).with({ :username => 'new dn', :password => args[:password], :method => :simple }).and_return(true)
|
75
|
+
expect(adaptor.bind_as(args)).to eq rs
|
72
76
|
end
|
73
77
|
|
74
78
|
it 'should bind sasl' do
|
75
|
-
adaptor = OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', try_sasl: true, sasl_mechanisms: ["GSS-SPNEGO"], bind_dn: 'bind_dn', password: 'password'})
|
76
|
-
adaptor.connection.
|
77
|
-
adaptor.connection.
|
78
|
-
adaptor.connection.
|
79
|
-
adaptor.bind_as(args).
|
79
|
+
adaptor = OmniAuth::LDAP::Adaptor.new({ host: "192.168.1.145", method: 'plain', base: 'dc=intridea, dc=com', port: 389, uid: 'sAMAccountName', try_sasl: true, sasl_mechanisms: ["GSS-SPNEGO"], bind_dn: 'bind_dn', password: 'password' })
|
80
|
+
expect(adaptor.connection).to receive(:open).and_yield(adaptor.connection)
|
81
|
+
expect(adaptor.connection).to receive(:search).with(args).and_return([rs])
|
82
|
+
expect(adaptor.connection).to receive(:bind).and_return(true)
|
83
|
+
expect(adaptor.bind_as(args)).to eq rs
|
80
84
|
end
|
81
85
|
end
|
82
86
|
end
|
@@ -24,75 +24,77 @@ describe "OmniAuth::Strategies::LDAP" do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should add a camelization for itself' do
|
27
|
-
OmniAuth::Utils.camelize('ldap').
|
27
|
+
expect(OmniAuth::Utils.camelize('ldap')).to eq 'LDAP'
|
28
28
|
end
|
29
29
|
|
30
30
|
describe '/auth/ldap' do
|
31
31
|
before(:each){ get '/auth/ldap' }
|
32
32
|
|
33
33
|
it 'should display a form' do
|
34
|
-
last_response.status.
|
35
|
-
last_response.body.
|
34
|
+
expect(last_response.status).to eq 200
|
35
|
+
expect(last_response.body).to include("<form")
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should have the callback as the action for the form' do
|
39
|
-
last_response.body.
|
39
|
+
expect(last_response.body).to include("action='/auth/ldap/callback'")
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'should have a text field for each of the fields' do
|
43
|
-
last_response.body.scan('<input').size.
|
43
|
+
expect(last_response.body.scan('<input').size).to eq 2
|
44
44
|
end
|
45
45
|
it 'should have a label of the form title' do
|
46
|
-
last_response.body.scan('MyLdap Form').size.
|
46
|
+
expect(last_response.body.scan('MyLdap Form').size).to be > 1
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
describe 'post /auth/ldap/callback' do
|
51
51
|
before(:each) do
|
52
52
|
@adaptor = double(OmniAuth::LDAP::Adaptor, {:uid => 'ping'})
|
53
|
-
|
54
|
-
|
53
|
+
|
54
|
+
allow(@adaptor).to receive(:filter)
|
55
|
+
allow(OmniAuth::LDAP::Adaptor).to receive(:new) { @adaptor }
|
55
56
|
end
|
56
57
|
|
57
58
|
context 'failure' do
|
58
59
|
before(:each) do
|
59
|
-
@adaptor.
|
60
|
+
allow(@adaptor).to receive(:bind_as) { false }
|
60
61
|
end
|
61
62
|
|
62
63
|
context "when username is not preset" do
|
63
64
|
it 'should redirect to error page' do
|
64
65
|
post('/auth/ldap/callback', {})
|
65
66
|
|
66
|
-
last_response.
|
67
|
-
last_response.
|
67
|
+
# expect(last_response).to be redirect
|
68
|
+
expect(last_response).to be_redirect
|
69
|
+
expect(last_response.headers['Location']).to match %r{missing_credentials}
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
73
|
context "when username is empty" do
|
72
74
|
it 'should redirect to error page' do
|
73
|
-
post('/auth/ldap/callback', {:
|
75
|
+
post('/auth/ldap/callback', { username: "" })
|
74
76
|
|
75
|
-
last_response.
|
76
|
-
last_response.headers['Location'].
|
77
|
+
expect(last_response).to be_redirect
|
78
|
+
expect(last_response.headers['Location']).to match %r{missing_credentials}
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
80
82
|
context "when username is present" do
|
81
83
|
context "and password is not preset" do
|
82
84
|
it 'should redirect to error page' do
|
83
|
-
post('/auth/ldap/callback', {:
|
85
|
+
post('/auth/ldap/callback', { username: "ping" })
|
84
86
|
|
85
|
-
last_response.
|
86
|
-
last_response.headers['Location'].
|
87
|
+
expect(last_response).to be_redirect
|
88
|
+
expect(last_response.headers['Location']).to match %r{missing_credentials}
|
87
89
|
end
|
88
90
|
end
|
89
91
|
|
90
92
|
context "and password is empty" do
|
91
93
|
it 'should redirect to error page' do
|
92
|
-
post('/auth/ldap/callback', {:
|
94
|
+
post('/auth/ldap/callback', { username: "ping", password: "" })
|
93
95
|
|
94
|
-
last_response.
|
95
|
-
last_response.headers['Location'].
|
96
|
+
expect(last_response).to be_redirect
|
97
|
+
expect(last_response.headers['Location']).to match %r{missing_credentials}
|
96
98
|
end
|
97
99
|
end
|
98
100
|
end
|
@@ -100,19 +102,19 @@ describe "OmniAuth::Strategies::LDAP" do
|
|
100
102
|
context "when username and password are present" do
|
101
103
|
context "and bind on LDAP server failed" do
|
102
104
|
it 'should redirect to error page' do
|
103
|
-
post('/auth/ldap/callback', {:
|
105
|
+
post('/auth/ldap/callback', { username: 'ping', password: 'password' })
|
104
106
|
|
105
|
-
last_response.
|
106
|
-
last_response.headers['Location'].
|
107
|
+
expect(last_response).to be_redirect
|
108
|
+
expect(last_response.headers['Location']).to match %r{invalid_credentials}
|
107
109
|
end
|
108
110
|
context 'and filter is set' do
|
109
111
|
it 'should bind with filter' do
|
110
|
-
@adaptor.
|
111
|
-
Net::LDAP::Filter.
|
112
|
-
post('/auth/ldap/callback', {:
|
112
|
+
allow(@adaptor).to receive(:filter) { 'uid=%{username}' }
|
113
|
+
expect(Net::LDAP::Filter).to receive(:construct).with('uid=ping')
|
114
|
+
post('/auth/ldap/callback', { username: 'ping', password: 'password' })
|
113
115
|
|
114
|
-
last_response.
|
115
|
-
last_response.headers['Location'].
|
116
|
+
expect(last_response).to be_redirect
|
117
|
+
expect(last_response.headers['Location']).to match %r{invalid_credentials}
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
@@ -120,14 +122,14 @@ describe "OmniAuth::Strategies::LDAP" do
|
|
120
122
|
|
121
123
|
context "and communication with LDAP server caused an exception" do
|
122
124
|
before :each do
|
123
|
-
@adaptor.
|
125
|
+
allow(@adaptor).to receive(:bind_as).and_throw(Exception.new('connection_error'))
|
124
126
|
end
|
125
127
|
|
126
128
|
it 'should redirect to error page' do
|
127
|
-
post('/auth/ldap/callback', {:
|
129
|
+
post('/auth/ldap/callback', { username: "ping", password: "password" })
|
128
130
|
|
129
|
-
last_response.
|
130
|
-
last_response.headers['Location'].
|
131
|
+
expect(last_response).to be_redirect
|
132
|
+
expect(last_response.headers['Location']).to match %r{ldap_error}
|
131
133
|
end
|
132
134
|
end
|
133
135
|
end
|
@@ -137,8 +139,8 @@ describe "OmniAuth::Strategies::LDAP" do
|
|
137
139
|
let(:auth_hash){ last_request.env['omniauth.auth'] }
|
138
140
|
|
139
141
|
before(:each) do
|
140
|
-
@adaptor.
|
141
|
-
@adaptor.
|
142
|
+
allow(@adaptor).to receive(:filter)
|
143
|
+
allow(@adaptor).to receive(:bind_as) { Net::LDAP::Entry.from_single_ldif_string(
|
142
144
|
%Q{dn: cn=ping, dc=intridea, dc=com
|
143
145
|
mail: ping@intridea.com
|
144
146
|
givenname: Ping
|
@@ -156,38 +158,42 @@ wwwhomepage: www.intridea.com
|
|
156
158
|
jpegphoto: http://www.intridea.com/ping.jpg
|
157
159
|
description: omniauth-ldap
|
158
160
|
}
|
159
|
-
)
|
161
|
+
)}
|
160
162
|
end
|
161
163
|
|
162
164
|
it 'should not redirect to error page' do
|
163
165
|
post('/auth/ldap/callback', {:username => 'ping', :password => 'password'})
|
164
|
-
last_response.
|
166
|
+
expect(last_response).to_not be_redirect
|
165
167
|
end
|
166
168
|
|
167
169
|
context 'and filter is set' do
|
168
170
|
it 'should bind with filter' do
|
169
|
-
@adaptor.
|
170
|
-
Net::LDAP::Filter.
|
171
|
-
post('/auth/ldap/callback', {:
|
171
|
+
allow(@adaptor).to receive(:filter) { 'uid=%{username}' }
|
172
|
+
expect(Net::LDAP::Filter).to receive(:construct).with('uid=ping')
|
173
|
+
post('/auth/ldap/callback', { username: 'ping', password: 'password' })
|
172
174
|
|
173
|
-
last_response.
|
175
|
+
expect(last_response).to_not be_redirect
|
174
176
|
end
|
175
177
|
end
|
176
178
|
|
177
179
|
it 'should map user info to Auth Hash' do
|
178
|
-
post('/auth/ldap/callback', {:
|
179
|
-
|
180
|
-
auth_hash.
|
181
|
-
|
182
|
-
auth_hash.info
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
180
|
+
post('/auth/ldap/callback', { username: 'ping', password: 'password' })
|
181
|
+
|
182
|
+
expect(auth_hash.uid).to eq 'cn=ping, dc=intridea, dc=com'
|
183
|
+
|
184
|
+
info = auth_hash.info
|
185
|
+
|
186
|
+
expect(info.email).to eq 'ping@intridea.com'
|
187
|
+
expect(info.first_name).to eq 'Ping'
|
188
|
+
expect(info.last_name).to eq 'Yu'
|
189
|
+
expect(info.phone).to eq '555-555-5555'
|
190
|
+
expect(info.mobile).to eq '444-444-4444'
|
191
|
+
expect(info.nickname).to eq 'ping'
|
192
|
+
expect(info.title).to eq 'dev'
|
193
|
+
expect(info.location).to eq 'k street, Washington, DC, U.S.A 20001'
|
194
|
+
expect(info.url).to eq 'www.intridea.com'
|
195
|
+
expect(info.image).to eq 'http://www.intridea.com/ping.jpg'
|
196
|
+
expect(info.description).to eq 'omniauth-ldap'
|
191
197
|
end
|
192
198
|
end
|
193
199
|
end
|
metadata
CHANGED
@@ -1,169 +1,124 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-ldap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ping Yu
|
8
|
+
- Tom Milewski
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-01-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: omniauth
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
17
|
requirements:
|
19
|
-
- - ~>
|
18
|
+
- - "~>"
|
20
19
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
20
|
+
version: 1.8.1
|
22
21
|
type: :runtime
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
|
-
- - ~>
|
25
|
+
- - "~>"
|
28
26
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
27
|
+
version: 1.8.1
|
30
28
|
- !ruby/object:Gem::Dependency
|
31
29
|
name: net-ldap
|
32
30
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
31
|
requirements:
|
35
|
-
- - ~>
|
32
|
+
- - "~>"
|
36
33
|
- !ruby/object:Gem::Version
|
37
|
-
version: '0.
|
34
|
+
version: '0.16'
|
38
35
|
type: :runtime
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
|
-
- - ~>
|
39
|
+
- - "~>"
|
44
40
|
- !ruby/object:Gem::Version
|
45
|
-
version: '0.
|
41
|
+
version: '0.16'
|
46
42
|
- !ruby/object:Gem::Dependency
|
47
43
|
name: pyu-ruby-sasl
|
48
44
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
45
|
requirements:
|
51
|
-
- - ~>
|
46
|
+
- - "~>"
|
52
47
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.0.3.
|
48
|
+
version: 0.0.3.3
|
54
49
|
type: :runtime
|
55
50
|
prerelease: false
|
56
51
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
52
|
requirements:
|
59
|
-
- - ~>
|
53
|
+
- - "~>"
|
60
54
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.0.3.
|
55
|
+
version: 0.0.3.3
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
57
|
name: rubyntlm
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
59
|
requirements:
|
67
|
-
- - ~>
|
60
|
+
- - "~>"
|
68
61
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
62
|
+
version: 0.6.2
|
70
63
|
type: :runtime
|
71
64
|
prerelease: false
|
72
65
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
66
|
requirements:
|
75
|
-
- - ~>
|
67
|
+
- - "~>"
|
76
68
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
69
|
+
version: 0.6.2
|
78
70
|
- !ruby/object:Gem::Dependency
|
79
71
|
name: rspec
|
80
72
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
73
|
requirements:
|
83
|
-
- - ~>
|
74
|
+
- - "~>"
|
84
75
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
76
|
+
version: '3.0'
|
86
77
|
type: :development
|
87
78
|
prerelease: false
|
88
79
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
80
|
requirements:
|
91
|
-
- - ~>
|
81
|
+
- - "~>"
|
92
82
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
83
|
+
version: '3.0'
|
94
84
|
- !ruby/object:Gem::Dependency
|
95
85
|
name: simplecov
|
96
86
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
87
|
requirements:
|
99
|
-
- -
|
88
|
+
- - ">="
|
100
89
|
- !ruby/object:Gem::Version
|
101
90
|
version: '0'
|
102
91
|
type: :development
|
103
92
|
prerelease: false
|
104
93
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
94
|
requirements:
|
107
|
-
- -
|
95
|
+
- - ">="
|
108
96
|
- !ruby/object:Gem::Version
|
109
97
|
version: '0'
|
110
98
|
- !ruby/object:Gem::Dependency
|
111
99
|
name: rack-test
|
112
100
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
101
|
requirements:
|
115
|
-
- -
|
102
|
+
- - ">="
|
116
103
|
- !ruby/object:Gem::Version
|
117
104
|
version: '0'
|
118
105
|
type: :development
|
119
106
|
prerelease: false
|
120
107
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
108
|
requirements:
|
123
|
-
- -
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: libnotify
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ! '>='
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: ruby-debug19
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ! '>='
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: '0'
|
150
|
-
type: :development
|
151
|
-
prerelease: false
|
152
|
-
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ! '>='
|
109
|
+
- - ">="
|
156
110
|
- !ruby/object:Gem::Version
|
157
111
|
version: '0'
|
158
112
|
description: A LDAP strategy for OmniAuth.
|
159
113
|
email:
|
160
114
|
- ping@intridea.com
|
115
|
+
- tmilewski@gmail.com
|
161
116
|
executables: []
|
162
117
|
extensions: []
|
163
118
|
extra_rdoc_files: []
|
164
119
|
files:
|
165
|
-
- .gitignore
|
166
|
-
- .rspec
|
120
|
+
- ".gitignore"
|
121
|
+
- ".rspec"
|
167
122
|
- Gemfile
|
168
123
|
- Guardfile
|
169
124
|
- README.md
|
@@ -179,27 +134,26 @@ files:
|
|
179
134
|
homepage: https://github.com/intridea/omniauth-ldap
|
180
135
|
licenses:
|
181
136
|
- MIT
|
137
|
+
metadata: {}
|
182
138
|
post_install_message:
|
183
139
|
rdoc_options: []
|
184
140
|
require_paths:
|
185
141
|
- lib
|
186
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
187
|
-
none: false
|
188
143
|
requirements:
|
189
|
-
- -
|
144
|
+
- - ">="
|
190
145
|
- !ruby/object:Gem::Version
|
191
146
|
version: '0'
|
192
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
148
|
requirements:
|
195
|
-
- -
|
149
|
+
- - ">="
|
196
150
|
- !ruby/object:Gem::Version
|
197
151
|
version: '0'
|
198
152
|
requirements: []
|
199
153
|
rubyforge_project:
|
200
|
-
rubygems_version:
|
154
|
+
rubygems_version: 2.6.11
|
201
155
|
signing_key:
|
202
|
-
specification_version:
|
156
|
+
specification_version: 4
|
203
157
|
summary: A LDAP strategy for OmniAuth.
|
204
158
|
test_files:
|
205
159
|
- spec/omniauth-ldap/adaptor_spec.rb
|