omniauth_crowd 2.1.1 → 2.1.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/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
- .rvmrc
1
+ .ruby-version
2
+ .ruby-gemset
2
3
  # rcov generated
3
4
  coverage
4
5
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- omniauth_crowd (2.1.1)
4
+ omniauth_crowd (2.1.2)
5
5
  nokogiri (>= 1.4.4)
6
6
  omniauth (~> 1.0)
7
7
 
@@ -13,7 +13,7 @@ GEM
13
13
  diff-lcs (1.1.3)
14
14
  hashie (1.2.0)
15
15
  nokogiri (1.5.2)
16
- omniauth (1.0.3)
16
+ omniauth (1.1.1)
17
17
  hashie (~> 1.2)
18
18
  rack
19
19
  rack (1.4.1)
@@ -32,7 +32,7 @@ module OmniAuth
32
32
 
33
33
  def callback_phase
34
34
  creds = session.delete 'omniauth.crowd'
35
- return fail!(:no_credentials, 'No Credentials') unless creds
35
+ return fail!(:no_credentials) unless creds
36
36
  validator = CrowdValidator.new(@configuration, creds['username'], creds['password'])
37
37
  @user_info = validator.user_info
38
38
 
@@ -4,12 +4,14 @@ module OmniAuth
4
4
  module Strategies
5
5
  class Crowd
6
6
  class Configuration
7
+ DEFAULT_SESSION_URL = "%s/rest/usermanagement/latest/session"
7
8
  DEFAULT_AUTHENTICATION_URL = "%s/rest/usermanagement/latest/authentication"
8
9
  DEFAULT_USER_GROUP_URL = "%s/rest/usermanagement/latest/user/group/direct"
9
- attr_reader :crowd_application_name, :crowd_password, :disable_ssl_verification, :include_users_groups
10
+ attr_reader :crowd_application_name, :crowd_password, :disable_ssl_verification, :include_users_groups, :use_sessions, :session_url
10
11
 
11
12
  alias :"disable_ssl_verification?" :disable_ssl_verification
12
13
  alias :"include_users_groups?" :include_users_groups
14
+ alias :"use_sessions?" :use_sessions
13
15
 
14
16
  # @param [Hash] params configuration options
15
17
  # @option params [String, nil] :crowd_server_url the Crowd server root URL; probably something like
@@ -50,10 +52,16 @@ module OmniAuth
50
52
  end
51
53
  @crowd_application_name = options[:application_name]
52
54
  @crowd_password = options[:application_password]
55
+ @use_sessions = options[:use_sessions]
53
56
 
54
57
  unless options.include?(:crowd_server_url) || options.include?(:crowd_authentication_url)
55
58
  raise ArgumentError.new("Either :crowd_server_url or :crowd_authentication_url MUST be provided")
56
59
  end
60
+
61
+ if @use_sessions
62
+ @session_url = options[:crowd_session_url] || DEFAULT_SESSION_URL % options[:crowd_server_url]
63
+ validate_is_url 'session URL', @session_url
64
+ end
57
65
  @authentication_url = options[:crowd_authentication_url] || DEFAULT_AUTHENTICATION_URL % options[:crowd_server_url]
58
66
  validate_is_url 'authentication URL', @authentication_url
59
67
  @disable_ssl_verification = options[:disable_ssl_verification]
@@ -1,15 +1,21 @@
1
1
  require 'nokogiri'
2
2
  require 'net/http'
3
3
  require 'net/https'
4
+ require 'rexml/text'
4
5
 
5
6
  module OmniAuth
6
7
  module Strategies
7
8
  class Crowd
8
9
  class CrowdValidator
10
+ SESSION_REQUEST_BODY = "<authentication-context>
11
+ <username>%s</username>
12
+ <password>%s</password>
13
+ </authentication-context>"
9
14
  AUTHENTICATION_REQUEST_BODY = "<password><value>%s</value></password>"
10
15
  def initialize(configuration, username, password)
11
16
  @configuration, @username, @password = configuration, username, password
12
17
  @authentiction_uri = URI.parse(@configuration.authentication_url(@username))
18
+ @session_uri = URI.parse(@configuration.session_url) if @configuration.use_sessions
13
19
  @user_group_uri = @configuration.include_users_groups? ? URI.parse(@configuration.user_group_url(@username)) : nil
14
20
  end
15
21
 
@@ -20,10 +26,27 @@ module OmniAuth
20
26
  else
21
27
  user_info_hash
22
28
  end
29
+
30
+ if user_info_hash && @configuration.use_sessions?
31
+ user_info_hash = add_session!(user_info_hash)
32
+ end
33
+
23
34
  user_info_hash
24
35
  end
25
36
 
26
37
  private
38
+ def add_session!(user_info_hash)
39
+ response = make_session_request
40
+ if response.kind_of?(Net::HTTPSuccess) && response.body
41
+ doc = Nokogiri::XML(response.body)
42
+ user_info_hash["sso_token"] = doc.xpath('//token/text()').to_s
43
+ else
44
+ OmniAuth.logger.send(:warn, "(crowd) [add_session!] response code: #{response.code.to_s}")
45
+ OmniAuth.logger.send(:warn, "(crowd) [add_session!] response body: #{response.body}")
46
+ end
47
+ user_info_hash
48
+ end
49
+
27
50
  def add_user_groups!(user_info_hash)
28
51
  response = make_user_group_request
29
52
  unless response.code.to_i != 200 || response.body.nil? || response.body == ''
@@ -45,32 +68,51 @@ module OmniAuth
45
68
  "email" => doc.xpath("//user/email/text()").to_s
46
69
  }
47
70
  else
71
+ OmniAuth.logger.send(:warn, "(crowd) [retrieve_user_info!] response code: #{response.code.to_s}")
72
+ OmniAuth.logger.send(:warn, "(crowd) [retrieve_user_info!] response body: #{response.body}")
48
73
  nil
49
74
  end
50
75
  end
51
-
52
- def make_user_group_request
53
- http = Net::HTTP.new(@user_group_uri.host, @user_group_uri.port)
54
- http.use_ssl = @user_group_uri.port == 443 || @user_group_uri.instance_of?(URI::HTTPS)
76
+
77
+ def make_request(uri, body=nil)
78
+ http_method = body.nil? ? Net::HTTP::Get : Net::HTTP::Post
79
+ http = Net::HTTP.new(uri.host, uri.port)
80
+ http.use_ssl = uri.port == 443 || uri.instance_of?(URI::HTTPS)
55
81
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? && @configuration.disable_ssl_verification?
56
82
  http.start do |c|
57
- req = Net::HTTP::Get.new("#{@user_group_uri.path}?#{@user_group_uri.query}")
83
+ req = http_method.new(uri.query.nil? ? uri.path : "#{uri.path}?#{uri.query}")
84
+ req.body = body if body
58
85
  req.basic_auth @configuration.crowd_application_name, @configuration.crowd_password
86
+ req.add_field 'Content-Type', 'text/xml'
59
87
  http.request(req)
60
88
  end
61
89
  end
62
90
 
91
+ def make_user_group_request
92
+ make_request(@user_group_uri)
93
+ end
94
+
63
95
  def make_authorization_request
64
- http = Net::HTTP.new(@authentiction_uri.host, @authentiction_uri.port)
65
- http.use_ssl = @authentiction_uri.port == 443 || @authentiction_uri.instance_of?(URI::HTTPS)
66
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? && @configuration.disable_ssl_verification?
67
- http.start do |c|
68
- req = Net::HTTP::Post.new("#{@authentiction_uri.path}?#{@authentiction_uri.query}")
69
- req.body = AUTHENTICATION_REQUEST_BODY % @password
70
- req.basic_auth @configuration.crowd_application_name, @configuration.crowd_password
71
- req.add_field 'Content-Type', 'text/xml'
72
- http.request(req)
73
- end
96
+ make_request(@authentiction_uri, make_authentication_request_body(@password))
97
+ end
98
+
99
+ def make_session_request
100
+ make_request(@session_uri, make_session_request_body(@username, @password))
101
+ end
102
+
103
+ # create the body using Nokogiri so proper encoding of passwords can be ensured
104
+ def make_authentication_request_body(password)
105
+ request_body = Nokogiri::XML(AUTHENTICATION_REQUEST_BODY)
106
+ password_value = request_body.at_css "value"
107
+ password_value.content = REXML::Text.normalize(password)
108
+ return request_body.root.to_s # return the body without the xml header
109
+ end
110
+
111
+ def make_session_request_body(username,password)
112
+ request_body = Nokogiri::XML(SESSION_REQUEST_BODY)
113
+ request_body.at_css("username").content = REXML::Text.normalize(username)
114
+ request_body.at_css("password").content = REXML::Text.normalize(password)
115
+ return request_body.root.to_s
74
116
  end
75
117
  end
76
118
  end
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module Crowd
3
- VERSION = "2.1.1"
3
+ VERSION = "2.1.2"
4
4
  end
5
5
  end
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <session expand="user">
3
+ <token>rtk8eMvqq00EiGn5iJCMZQ00</token>
4
+ <user name="foo">
5
+ <link rel="self" href="http://crowd.example.org/crowd/rest/usermanagement/latest/user?username=foo"/>
6
+ </user>
7
+ <link rel="self" href="http://crowd.example.org/crowd/rest/usermanagement/latest/session/rtk8eMvqq00EiGn5iJCMZQ00"/>
8
+ </session>
@@ -1,77 +1,147 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require 'nokogiri'
2
3
 
3
4
  describe OmniAuth::Strategies::Crowd, :type=>:strategy do
4
5
  include OmniAuth::Test::StrategyTestCase
6
+ @use_sessions = false
5
7
  def strategy
6
8
  @crowd_server_url ||= 'https://crowd.example.org'
7
9
  @application_name ||= 'bogus_app'
8
10
  @application_password ||= 'bogus_app_password'
9
- [OmniAuth::Strategies::Crowd, {:crowd_server_url => @crowd_server_url, :application_name=>@application_name, :application_password=>@application_password}]
11
+ [OmniAuth::Strategies::Crowd, {:crowd_server_url => @crowd_server_url,
12
+ :application_name => @application_name,
13
+ :application_password => @application_password,
14
+ :use_sessions => @use_sessions}]
10
15
  end
11
16
 
12
- describe 'GET /auth/crowd' do
17
+ describe 'GET /auth/crowd' do
18
+ before do
19
+ get '/auth/crowd'
20
+ end
21
+
22
+ it 'should show the login form' do
23
+ last_response.should be_ok
24
+ end
25
+ end
26
+
27
+ describe 'POST /auth/crowd' do
28
+ before do
29
+ post '/auth/crowd', :username=>'foo', :password=>'bar'
30
+ end
31
+
32
+ it 'should redirect to callback' do
33
+ last_response.should be_redirect
34
+ last_response.headers['Location'].should == 'http://example.org/auth/crowd/callback'
35
+ end
36
+ end
37
+
38
+ describe 'GET /auth/crowd/callback without any credentials' do
39
+ before do
40
+ get '/auth/crowd/callback'
41
+ end
42
+ it 'should fail' do
43
+ last_response.should be_redirect
44
+ last_response.headers['Location'].should =~ /no_credentials/
45
+ end
46
+ end
47
+
48
+ describe 'GET /auth/crowd/callback with credentials can be successful' do
49
+ context "when using authentication endpoint" do
13
50
  before do
14
- get '/auth/crowd'
51
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo").
52
+ to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'success.xml')))
53
+ stub_request(:get, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/user/group/direct?username=foo").
54
+ to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'groups.xml')))
55
+ get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo", "password"=>"ba"}}
15
56
  end
16
-
17
- it 'should show the login form' do
18
- last_response.should be_ok
57
+ it 'should call through to the master app' do
58
+ last_response.body.should == 'true'
59
+ end
60
+ it 'should have an auth hash' do
61
+ auth = last_request.env['omniauth.auth']
62
+ auth.should be_kind_of(Hash)
63
+ end
64
+ it 'should have good data' do
65
+ auth = last_request.env['omniauth.auth']['provider'].should == :crowd
66
+ auth = last_request.env['omniauth.auth']['uid'].should == 'foo'
67
+ auth = last_request.env['omniauth.auth']['user_info'].should be_kind_of(Hash)
68
+ auth = last_request.env['omniauth.auth']['user_info']['groups'].sort.should == ["Developers", "jira-users"].sort
19
69
  end
20
70
  end
21
71
 
22
- describe 'POST /auth/crowd' do
72
+ context "when using authentication endpoint with special characters" do
23
73
  before do
24
- post '/auth/crowd', :username=>'foo', :password=>'bar'
74
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo")
75
+ get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo", "password"=>"bar&<xml>"}}
25
76
  end
26
77
 
27
- it 'should redirect to callback' do
28
- last_response.should be_redirect
29
- last_response.headers['Location'].should == 'http://example.org/auth/crowd/callback'
78
+ it 'should escape special characters' do
79
+ WebMock.should have_requested(:post, 'https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo').
80
+ with { |req| Nokogiri::XML(req.body).at_css("value").content == 'bar&amp;&lt;xml&gt;' }
30
81
  end
31
82
  end
32
83
 
33
- describe 'GET /auth/crowd/callback without any credentials' do
84
+ context "when using session endpoint" do
34
85
  before do
35
- get '/auth/crowd/callback'
36
- end
37
- it 'should fail' do
38
- last_response.should be_redirect
39
- last_response.headers['Location'].should =~ /no_credentials/
86
+ @use_sessions = true
87
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo").
88
+ to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'success.xml')))
89
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/session").
90
+ to_return(:status => 201, :body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'session.xml')))
91
+ stub_request(:get, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/user/group/direct?username=foo").
92
+ to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'groups.xml')))
93
+ get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo", "password"=>"ba"}}
40
94
  end
41
- end
42
95
 
43
- describe 'GET /auth/crowd/callback with credentials can be successful' do
44
- before do
45
- stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo").
46
- to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'success.xml')))
47
- stub_request(:get, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/user/group/direct?username=foo").
48
- to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'groups.xml')))
49
- get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo", "password"=>"ba"}}
50
- end
51
- it 'should call through to the master app' do
52
- last_response.body.should == 'true'
53
- end
54
- it 'should have an auth hash' do
55
- auth = last_request.env['omniauth.auth']
56
- auth.should be_kind_of(Hash)
57
- end
58
- it 'should have good data' do
59
- auth = last_request.env['omniauth.auth']['provider'].should == :crowd
60
- auth = last_request.env['omniauth.auth']['uid'].should == 'foo'
61
- auth = last_request.env['omniauth.auth']['user_info'].should be_kind_of(Hash)
62
- auth = last_request.env['omniauth.auth']['user_info']['groups'].sort.should == ["Developers", "jira-users"].sort
63
- end
96
+ after do
97
+ @use_sessions = false
64
98
  end
65
99
 
66
- describe 'GET /auth/crowd/callback with credentials will fail' do
67
- before do
68
- stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo").
69
- to_return(:code=>400)
70
- get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo", "password"=>"ba"}}
71
- end
72
- it 'should fail' do
73
- last_response.should be_redirect
74
- last_response.headers['Location'].should =~ /invalid_credentials/
75
- end
100
+ it 'should call through to the master app' do
101
+ last_response.body.should == 'true'
102
+ end
103
+
104
+ it 'should have an auth hash' do
105
+ auth = last_request.env['omniauth.auth']
106
+ auth.should be_kind_of(Hash)
76
107
  end
108
+
109
+ it 'should have good data' do
110
+ auth = last_request.env['omniauth.auth']['provider'].should == :crowd
111
+ auth = last_request.env['omniauth.auth']['uid'].should == 'foo'
112
+ auth = last_request.env['omniauth.auth']['user_info'].should be_kind_of(Hash)
113
+ auth = last_request.env['omniauth.auth']['user_info']['sso_token'].should == 'rtk8eMvqq00EiGn5iJCMZQ00'
114
+ auth = last_request.env['omniauth.auth']['user_info']['groups'].sort.should == ["Developers", "jira-users"].sort
115
+ end
116
+ end
117
+ end
118
+
119
+ context "when using session endpoint with special characters" do
120
+ before do
121
+ @use_sessions = true
122
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo%26%3Cxml%3E").
123
+ to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'success.xml')))
124
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/session").
125
+ to_return(:status => 201, :body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'session.xml')))
126
+ stub_request(:get, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/user/group/direct?username=foo%26%3Cxml%3E").
127
+ to_return(:body => File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'groups.xml')))
128
+ get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo&<xml>", "password"=>"bar&<xml>"}}
129
+ end
130
+ it 'should escape special characters' do
131
+ WebMock.should have_requested(:post, 'https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/session').
132
+ with { |req| Nokogiri::XML(req.body).at_css("username").content == 'foo&amp;&lt;xml&gt;' and Nokogiri::XML(req.body).at_css("password").content == 'bar&amp;&lt;xml&gt;' }
133
+ end
134
+ end
135
+
136
+ describe 'GET /auth/crowd/callback with credentials will fail' do
137
+ before do
138
+ stub_request(:post, "https://bogus_app:bogus_app_password@crowd.example.org/rest/usermanagement/latest/authentication?username=foo").
139
+ to_return(:code=>400)
140
+ get '/auth/crowd/callback', nil, 'rack.session'=>{'omniauth.crowd'=> {"username"=>"foo", "password"=>"ba"}}
141
+ end
142
+ it 'should fail' do
143
+ last_response.should be_redirect
144
+ last_response.headers['Location'].should =~ /invalid_credentials/
145
+ end
146
+ end
77
147
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth_crowd
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
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: 2012-03-24 00:00:00.000000000 Z
12
+ date: 2013-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: omniauth
16
- requirement: &2185215420 !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: *2185215420
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: nokogiri
27
- requirement: &2185214920 !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: 1.4.4
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *2185214920
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.4.4
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rack
38
- requirement: &2185214440 !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'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *2185214440
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rake
49
- requirement: &2185213960 !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'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2185213960
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: rack-test
60
- requirement: &2185213480 !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: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *2185213480
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rspec
71
- requirement: &2185213000 !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: 2.5.0
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *2185213000
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 2.5.0
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: webmock
82
- requirement: &2185212520 !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: 1.3.4
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *2185212520
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 1.3.4
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: bundler
93
- requirement: &2185212040 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ! '>'
@@ -98,7 +133,12 @@ dependencies:
98
133
  version: 1.0.0
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *2185212040
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>'
140
+ - !ruby/object:Gem::Version
141
+ version: 1.0.0
102
142
  description: This is an OmniAuth provider for Atlassian Crowd's REST API. It allows
103
143
  you to easily integrate your Rack application in with Atlassian Crowd.
104
144
  email:
@@ -121,6 +161,7 @@ files:
121
161
  - lib/omniauth_crowd/version.rb
122
162
  - omniauth_crowd.gemspec
123
163
  - spec/fixtures/groups.xml
164
+ - spec/fixtures/session.xml
124
165
  - spec/fixtures/success.xml
125
166
  - spec/omniauth/strategies/crowd_spec.rb
126
167
  - spec/spec_helper.rb
@@ -138,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
179
  version: '0'
139
180
  segments:
140
181
  - 0
141
- hash: -4177829934733577967
182
+ hash: 4515462234693520699
142
183
  required_rubygems_version: !ruby/object:Gem::Requirement
143
184
  none: false
144
185
  requirements:
@@ -147,15 +188,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
188
  version: '0'
148
189
  segments:
149
190
  - 0
150
- hash: -4177829934733577967
191
+ hash: 4515462234693520699
151
192
  requirements: []
152
193
  rubyforge_project:
153
- rubygems_version: 1.8.10
194
+ rubygems_version: 1.8.25
154
195
  signing_key:
155
196
  specification_version: 3
156
197
  summary: An OmniAuth provider for Atlassian Crowd REST API
157
198
  test_files:
158
199
  - spec/fixtures/groups.xml
200
+ - spec/fixtures/session.xml
159
201
  - spec/fixtures/success.xml
160
202
  - spec/omniauth/strategies/crowd_spec.rb
161
203
  - spec/spec_helper.rb