omniauth-ldap 1.0.2 → 1.0.3

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- omniauth-ldap (1.0.1)
4
+ omniauth-ldap (1.0.2)
5
5
  net-ldap (~> 0.2.2)
6
6
  omniauth (~> 1.0)
7
7
  pyu-ruby-sasl (~> 0.0.3.1)
@@ -29,7 +29,7 @@ GEM
29
29
  ruby_core_source (>= 0.1.4)
30
30
  multi_json (1.0.3)
31
31
  net-ldap (0.2.2)
32
- omniauth (1.0.0)
32
+ omniauth (1.0.1)
33
33
  hashie (~> 1.2)
34
34
  rack
35
35
  pyu-ruby-sasl (0.0.3.3)
@@ -26,18 +26,20 @@ module OmniAuth
26
26
 
27
27
  attr_accessor :bind_dn, :password
28
28
  attr_reader :connection, :uid, :base, :auth
29
-
30
- def initialize(configuration={})
31
- @configuration = configuration.dup
32
- @configuration[:allow_anonymous] ||= false
33
- @logger = @configuration.delete(:logger)
29
+ def self.validate(configuration={})
34
30
  message = []
35
31
  MUST_HAVE_KEYS.each do |name|
36
- message << name if configuration[name].nil?
32
+ message << name if configuration[name].nil?
37
33
  end
38
34
  raise ArgumentError.new(message.join(",") +" MUST be provided") unless message.empty?
35
+ end
36
+ def initialize(configuration={})
37
+ Adaptor.validate(configuration)
38
+ @configuration = configuration.dup
39
+ @configuration[:allow_anonymous] ||= false
40
+ @logger = @configuration.delete(:logger)
39
41
  VALID_ADAPTER_CONFIGURATION_KEYS.each do |name|
40
- instance_variable_set("@#{name}", configuration[name])
42
+ instance_variable_set("@#{name}", @configuration[name])
41
43
  end
42
44
  method = ensure_method(@method)
43
45
  config = {
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module LDAP
3
- VERSION = "1.0.2"
3
+ VERSION = "1.0.3"
4
4
  end
5
5
  end
@@ -3,7 +3,6 @@ require 'omniauth'
3
3
  module OmniAuth
4
4
  module Strategies
5
5
  class LDAP
6
- class MissingCredentialsError < StandardError; end
7
6
  include OmniAuth::Strategy
8
7
  @@config = {
9
8
  'name' => 'cn',
@@ -25,11 +24,9 @@ module OmniAuth
25
24
  option :method, :plain
26
25
  option :uid, 'sAMAccountName'
27
26
  option :name_proc, lambda {|n| n}
28
- def initialize(app, *args, &block)
29
- super
30
- @adaptor = OmniAuth::LDAP::Adaptor.new @options
31
- end
27
+
32
28
  def request_phase
29
+ OmniAuth::LDAP::Adaptor.validate @options
33
30
  f = OmniAuth::Form.new(:title => (options[:title] || "LDAP Authentication"), :url => callback_path)
34
31
  f.text_field 'Login', 'username'
35
32
  f.password_field 'Password', 'password'
@@ -38,13 +35,15 @@ module OmniAuth
38
35
  end
39
36
 
40
37
  def callback_phase
41
- raise MissingCredentialsError.new("Missing login credentials") if request['username'].nil? || request['password'].nil?
38
+ @adaptor = OmniAuth::LDAP::Adaptor.new @options
39
+
40
+ return fail!(:missing_credentials) if missing_credentials?
42
41
  begin
43
- @ldap_user_info = @adaptor.bind_as(:filter => Net::LDAP::Filter.eq(@adaptor.uid, @options[:name_proc].call(request['username'])),:size => 1, :password => request['password'])
44
- return fail!(:invalid_credentials) if !@ldap_user_info
42
+ @ldap_user_info = @adaptor.bind_as(:filter => Net::LDAP::Filter.eq(@adaptor.uid, @options[:name_proc].call(request['username'])),:size => 1, :password => request['password'])
43
+ return fail!(:invalid_credentials) if !@ldap_user_info
45
44
 
46
- @user_info = self.class.map_user(@@config, @ldap_user_info)
47
- super
45
+ @user_info = self.class.map_user(@@config, @ldap_user_info)
46
+ super
48
47
  rescue Exception => e
49
48
  return fail!(:ldap_error, e)
50
49
  end
@@ -64,23 +63,29 @@ module OmniAuth
64
63
  user = {}
65
64
  mapper.each do |key, value|
66
65
  case value
67
- when String
68
- user[key] = object[value.downcase.to_sym].first if object[value.downcase.to_sym]
69
- when Array
70
- value.each {|v| (user[key] = object[v.downcase.to_sym].first; break;) if object[v.downcase.to_sym]}
71
- when Hash
72
- value.map do |key1, value1|
73
- pattern = key1.dup
74
- value1.each_with_index do |v,i|
75
- part = ''; v.collect(&:downcase).collect(&:to_sym).each {|v1| (part = object[v1].first; break;) if object[v1]}
76
- pattern.gsub!("%#{i}",part||'')
77
- end
78
- user[key] = pattern
66
+ when String
67
+ user[key] = object[value.downcase.to_sym].first if object[value.downcase.to_sym]
68
+ when Array
69
+ value.each {|v| (user[key] = object[v.downcase.to_sym].first; break;) if object[v.downcase.to_sym]}
70
+ when Hash
71
+ value.map do |key1, value1|
72
+ pattern = key1.dup
73
+ value1.each_with_index do |v,i|
74
+ part = ''; v.collect(&:downcase).collect(&:to_sym).each {|v1| (part = object[v1].first; break;) if object[v1]}
75
+ pattern.gsub!("%#{i}",part||'')
79
76
  end
77
+ user[key] = pattern
80
78
  end
79
+ end
81
80
  end
82
81
  user
83
82
  end
83
+
84
+ protected
85
+
86
+ def missing_credentials?
87
+ request['username'].nil? or request['username'].empty? or request['password'].nil? or request['password'].empty?
88
+ end # missing_credentials?
84
89
  end
85
90
  end
86
91
  end
@@ -2,13 +2,13 @@ require 'spec_helper'
2
2
  describe "OmniAuth::LDAP::Adaptor" do
3
3
 
4
4
  describe 'initialize' do
5
-
6
5
  it 'should throw exception when must have field is not set' do
7
6
  #[:host, :port, :method, :bind_dn]
8
- lambda { OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain'})}.should raise_error(ArgumentError)
7
+ lambda { OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'plain'})}.should raise_error(ArgumentError)
9
8
  end
9
+
10
10
  it 'should throw exception when method is not supported' do
11
- lambda { OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'myplain', uid: 'uid', port: 389, base: 'dc=com'})}.should raise_error(OmniAuth::LDAP::Adaptor::ConfigurationError)
11
+ lambda { OmniAuth::LDAP::Adaptor.new({host: "192.168.1.145", method: 'myplain', uid: 'uid', port: 389, base: 'dc=com'})}.should raise_error(OmniAuth::LDAP::Adaptor::ConfigurationError)
12
12
  end
13
13
 
14
14
  it 'should setup ldap connection with anonymous' do
@@ -17,54 +17,59 @@ describe "OmniAuth::LDAP::Adaptor" do
17
17
  adaptor.connection.host.should == '192.168.1.145'
18
18
  adaptor.connection.port.should == 389
19
19
  adaptor.connection.base.should == 'dc=intridea, dc=com'
20
- adaptor.connection.instance_variable_get('@auth').should == {:method => :anonymous, :username => nil, :password => nil}
20
+ adaptor.connection.instance_variable_get('@auth').should == {:method => :anonymous, :username => nil, :password => nil}
21
21
  end
22
+
22
23
  it 'should setup ldap connection with simple' do
23
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'})
24
25
  adaptor.connection.should_not == nil
25
26
  adaptor.connection.host.should == '192.168.1.145'
26
27
  adaptor.connection.port.should == 389
27
28
  adaptor.connection.base.should == 'dc=intridea, dc=com'
28
- adaptor.connection.instance_variable_get('@auth').should == {:method => :simple, :username => 'bind_dn', :password => 'password'}
29
- end
29
+ adaptor.connection.instance_variable_get('@auth').should == {:method => :simple, :username => 'bind_dn', :password => 'password'}
30
+ end
31
+
30
32
  it 'should setup ldap connection with sasl-md5' do
31
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'})
32
34
  adaptor.connection.should_not == nil
33
35
  adaptor.connection.host.should == '192.168.1.145'
34
36
  adaptor.connection.port.should == 389
35
37
  adaptor.connection.base.should == 'dc=intridea, dc=com'
36
- adaptor.connection.instance_variable_get('@auth')[:method].should == :sasl
37
- adaptor.connection.instance_variable_get('@auth')[:mechanism].should == 'DIGEST-MD5'
38
- adaptor.connection.instance_variable_get('@auth')[:initial_credential].should == ''
39
- adaptor.connection.instance_variable_get('@auth')[:challenge_response].should_not be_nil
38
+ adaptor.connection.instance_variable_get('@auth')[:method].should == :sasl
39
+ adaptor.connection.instance_variable_get('@auth')[:mechanism].should == 'DIGEST-MD5'
40
+ adaptor.connection.instance_variable_get('@auth')[:initial_credential].should == ''
41
+ adaptor.connection.instance_variable_get('@auth')[:challenge_response].should_not be_nil
40
42
  end
43
+
41
44
  it 'should setup ldap connection with sasl-gss' do
42
45
  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'})
43
46
  adaptor.connection.should_not == nil
44
47
  adaptor.connection.host.should == '192.168.1.145'
45
48
  adaptor.connection.port.should == 389
46
49
  adaptor.connection.base.should == 'dc=intridea, dc=com'
47
- adaptor.connection.instance_variable_get('@auth')[:method].should == :sasl
48
- adaptor.connection.instance_variable_get('@auth')[:mechanism].should == 'GSS-SPNEGO'
49
- adaptor.connection.instance_variable_get('@auth')[:initial_credential].should =~ /^NTLMSSP/
50
- adaptor.connection.instance_variable_get('@auth')[:challenge_response].should_not be_nil
50
+ adaptor.connection.instance_variable_get('@auth')[:method].should == :sasl
51
+ adaptor.connection.instance_variable_get('@auth')[:mechanism].should == 'GSS-SPNEGO'
52
+ adaptor.connection.instance_variable_get('@auth')[:initial_credential].should =~ /^NTLMSSP/
53
+ adaptor.connection.instance_variable_get('@auth')[:challenge_response].should_not be_nil
51
54
  end
52
55
  end
53
-
56
+
54
57
  describe 'bind_as' do
55
58
  let(:args) { {:filter => Net::LDAP::Filter.eq('sAMAccountName', 'username'), :password => 'password', :size => 1} }
56
59
  let(:rs) { Struct.new(:dn).new('new dn') }
60
+
57
61
  it 'should bind simple' do
58
62
  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'})
59
63
  adaptor.connection.should_receive(:open).and_yield(adaptor.connection)
60
- adaptor.connection.should_receive(:search).with(args).and_return([rs])
64
+ adaptor.connection.should_receive(:search).with(args).and_return([rs])
61
65
  adaptor.connection.should_receive(:bind).with({:username => 'new dn', :password => args[:password], :method => :simple}).and_return(true)
62
66
  adaptor.bind_as(args).should == rs
63
67
  end
68
+
64
69
  it 'should bind sasl' do
65
70
  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'})
66
71
  adaptor.connection.should_receive(:open).and_yield(adaptor.connection)
67
- adaptor.connection.should_receive(:search).with(args).and_return([rs])
72
+ adaptor.connection.should_receive(:search).with(args).and_return([rs])
68
73
  adaptor.connection.should_receive(:bind).and_return(true)
69
74
  adaptor.bind_as(args).should == rs
70
75
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
  describe "OmniAuth::Strategies::LDAP" do
3
- # :title => "My LDAP",
3
+ # :title => "My LDAP",
4
4
  # :host => '10.101.10.1',
5
5
  # :port => 389,
6
6
  # :method => :plain,
@@ -8,17 +8,18 @@ describe "OmniAuth::Strategies::LDAP" do
8
8
  # :uid => 'sAMAccountName',
9
9
  # :name_proc => Proc.new {|name| name.gsub(/@.*$/,'')}
10
10
  # :bind_dn => 'default_bind_dn'
11
- # :password => 'password'
12
- class MyLdapProvider < OmniAuth::Strategies::LDAP; end
13
- def app
11
+ # :password => 'password'
12
+ class MyLdapProvider < OmniAuth::Strategies::LDAP; end
13
+
14
+ let(:app) do
14
15
  Rack::Builder.new {
15
16
  use OmniAuth::Test::PhonySession
16
- use MyLdapProvider, :name => 'ldap', :title => 'MyLdap Form', :host => '192.168.1.145', :base => 'dc=score, dc=local', :name_proc => Proc.new {|name| name.gsub(/@.*$/,'')}
17
+ use MyLdapProvider, :name => 'ldap', :title => 'MyLdap Form', :host => '192.168.1.145', :base => 'dc=score, dc=local', :name_proc => Proc.new {|name| name.gsub(/@.*$/,'')}
17
18
  run lambda { |env| [404, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] }
18
19
  }.to_app
19
20
  end
20
21
 
21
- def session
22
+ let(:session) do
22
23
  last_request.env['rack.session']
23
24
  end
24
25
 
@@ -44,7 +45,6 @@ describe "OmniAuth::Strategies::LDAP" do
44
45
  it 'should have a label of the form title' do
45
46
  last_response.body.scan('MyLdap Form').size.should > 1
46
47
  end
47
-
48
48
  end
49
49
 
50
50
  describe 'post /auth/ldap/callback' do
@@ -52,40 +52,101 @@ describe "OmniAuth::Strategies::LDAP" do
52
52
  @adaptor = mock(OmniAuth::LDAP::Adaptor, {:uid => 'ping'})
53
53
  OmniAuth::LDAP::Adaptor.stub(:new).and_return(@adaptor)
54
54
  end
55
+
55
56
  context 'failure' do
56
- before(:each) do
57
- @adaptor.stub(:bind_as).and_return(false)
58
- end
59
- it 'should raise MissingCredentialsError' do
60
- lambda{post('/auth/ldap/callback', {})}.should raise_error OmniAuth::Strategies::LDAP::MissingCredentialsError
57
+ before(:each) do
58
+ @adaptor.stub(:bind_as).and_return(false)
61
59
  end
62
- it 'should redirect to error page' do
63
- post('/auth/ldap/callback', {:username => 'ping', :password => 'password'})
64
- last_response.should be_redirect
65
- last_response.headers['Location'].should =~ %r{invalid_credentials}
60
+
61
+ context "when username is not preset" do
62
+ it 'should redirect to error page' do
63
+ post('/auth/ldap/callback', {})
64
+
65
+ last_response.should be_redirect
66
+ last_response.headers['Location'].should =~ %r{missing_credentials}
67
+ end
66
68
  end
67
- it 'should redirect to error page when there is exception' do
68
- @adaptor.stub(:bind_as).and_throw(Exception.new('connection_error'))
69
- post('/auth/ldap/callback', {:username => 'ping', :password => 'password'})
70
- last_response.should be_redirect
71
- last_response.headers['Location'].should =~ %r{ldap_error}
69
+
70
+ context "when username is empty" do
71
+ it 'should redirect to error page' do
72
+ post('/auth/ldap/callback', {:username => ""})
73
+
74
+ last_response.should be_redirect
75
+ last_response.headers['Location'].should =~ %r{missing_credentials}
76
+ end
77
+ end
78
+
79
+ context "when username is present" do
80
+ context "and password is not preset" do
81
+ it 'should redirect to error page' do
82
+ post('/auth/ldap/callback', {:username => "ping"})
83
+
84
+ last_response.should be_redirect
85
+ last_response.headers['Location'].should =~ %r{missing_credentials}
86
+ end
87
+ end
88
+
89
+ context "and password is empty" do
90
+ it 'should redirect to error page' do
91
+ post('/auth/ldap/callback', {:username => "ping", :password => ""})
92
+
93
+ last_response.should be_redirect
94
+ last_response.headers['Location'].should =~ %r{missing_credentials}
95
+ end
96
+ end
97
+ end
98
+
99
+ context "when username and password are present" do
100
+ context "and bind on LDAP server failed" do
101
+ it 'should redirect to error page' do
102
+ post('/auth/ldap/callback', {:username => 'ping', :password => 'password'})
103
+
104
+ last_response.should be_redirect
105
+ last_response.headers['Location'].should =~ %r{invalid_credentials}
106
+ end
107
+ end
108
+
109
+ context "and communication with LDAP server caused an exception" do
110
+ before :each do
111
+ @adaptor.stub(:bind_as).and_throw(Exception.new('connection_error'))
112
+ end
113
+
114
+ it 'should redirect to error page' do
115
+ post('/auth/ldap/callback', {:username => "ping", :password => "password"})
116
+
117
+ last_response.should be_redirect
118
+ last_response.headers['Location'].should =~ %r{ldap_error}
119
+ end
120
+ end
72
121
  end
73
122
  end
74
-
123
+
75
124
  context 'success' do
76
125
  let(:auth_hash){ last_request.env['omniauth.auth'] }
126
+
77
127
  before(:each) do
78
- @adaptor.stub(:bind_as).and_return({:dn => ['cn=ping, dc=intridea, dc=com'], :mail => ['ping@intridea.com'], :givenname => ['Ping'], :sn => ['Yu'],
79
- :telephonenumber => ['555-555-5555'], :mobile => ['444-444-4444'], :uid => ['ping'], :title => ['dev'], :address =>[ 'k street'],
80
- :l => ['Washington'], :st => ['DC'], :co => ["U.S.A"], :postofficebox => ['20001'], :wwwhomepage => ['www.intridea.com'],
81
- :jpegphoto => ['http://www.intridea.com/ping.jpg'], :description => ['omniauth-ldap']})
128
+ @adaptor.stub(:bind_as).and_return({
129
+ :dn => ['cn=ping, dc=intridea, dc=com'],
130
+ :mail => ['ping@intridea.com'],
131
+ :givenname => ['Ping'], :sn => ['Yu'],
132
+ :telephonenumber => ['555-555-5555'],
133
+ :mobile => ['444-444-4444'],
134
+ :uid => ['ping'],
135
+ :title => ['dev'],
136
+ :address =>[ 'k street'],
137
+ :l => ['Washington'], :st => ['DC'], :co => ["U.S.A"], :postofficebox => ['20001'],
138
+ :wwwhomepage => ['www.intridea.com'],
139
+ :jpegphoto => ['http://www.intridea.com/ping.jpg'],
140
+ :description => ['omniauth-ldap']})
141
+
82
142
  post('/auth/ldap/callback', {:username => 'ping', :password => 'password'})
83
143
  end
84
-
85
- it 'should raise MissingCredentialsError' do
86
- should_not raise_error OmniAuth::Strategies::LDAP::MissingCredentialsError
144
+
145
+ it 'should not redirect to error page' do
146
+ last_response.should_not be_redirect
87
147
  end
88
- it 'should map user info' do
148
+
149
+ it 'should map user info to Auth Hash' do
89
150
  auth_hash.uid.should == 'cn=ping, dc=intridea, dc=com'
90
151
  auth_hash.info.email.should == 'ping@intridea.com'
91
152
  auth_hash.info.first_name.should == 'Ping'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-ldap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-17 00:00:00.000000000Z
12
+ date: 2013-01-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: omniauth
16
- requirement: &70232010172840 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '1.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70232010172840
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: net-ldap
27
- requirement: &70232010172340 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 0.2.2
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70232010172340
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.2.2
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: pyu-ruby-sasl
38
- requirement: &70232010171880 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 0.0.3.1
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70232010171880
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.3.1
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rubyntlm
49
- requirement: &70232010171420 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: 0.1.1
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70232010171420
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.1.1
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: rspec
60
- requirement: &70232010170960 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '2.7'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70232010170960
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2.7'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: simplecov
71
- requirement: &70232010170580 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70232010170580
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rack-test
82
- requirement: &70232010170120 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70232010170120
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: libnotify
93
- requirement: &70232010169700 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ! '>='
@@ -98,10 +133,15 @@ dependencies:
98
133
  version: '0'
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *70232010169700
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: ruby-debug19
104
- requirement: &70232010169280 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
147
  - - ! '>='
@@ -109,7 +149,12 @@ dependencies:
109
149
  version: '0'
110
150
  type: :development
111
151
  prerelease: false
112
- version_requirements: *70232010169280
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
113
158
  description: A LDAP strategy for OmniAuth.
114
159
  email:
115
160
  - ping@intridea.com
@@ -152,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
197
  version: '0'
153
198
  requirements: []
154
199
  rubyforge_project:
155
- rubygems_version: 1.8.10
200
+ rubygems_version: 1.8.24
156
201
  signing_key:
157
202
  specification_version: 3
158
203
  summary: A LDAP strategy for OmniAuth.