omniauth-kaeuferportal 1.1.1 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5db06ba7281bc94590e5865d0d360555304e1183
4
- data.tar.gz: 69f29001008acde2bbb005d61d4057c1bac352ed
3
+ metadata.gz: 2eec2b5e9cebd38de5040785ba8abf6063063182
4
+ data.tar.gz: 37c165ae4d8cd0b61e62240f4f4660e445cd85be
5
5
  SHA512:
6
- metadata.gz: 4470abb47f4a36b36c3fb2f41a17bb826e2f5eaf3d53cb2c4d07829fcd8f0f7794b7d81a51ebfc743773152d34eacb947575672a3ceede90471ebac85cf3b2d4
7
- data.tar.gz: 8fee05d5e071b9430c1da83296c3051b4e974396c1db97225e4895452959d647e27e268b798a2c27d3aefcdc638696f90529ecbe0722c221085d95c3f33a4a6e
6
+ metadata.gz: b2355a12cbef27173fa138dd42976c86560df925872d98dc5248003f529fb5f78000350f68530b9bca16476f11229f2015d1bb709e11b937ed5211de4cd8cd72
7
+ data.tar.gz: b01330608621f32fb507102e0455a108d7ae15eb117c2d89fd8e68128f6d9b191746c0ac131547d8e2120a059fcaa1ca6a510904a48beb093fb5d970bbf69a38
data/README.md CHANGED
@@ -1 +1,4 @@
1
1
  # OmniAuth OAuth2 for Kaeuferportal
2
+
3
+ This strategy allows clients that have been registered with Käuferportal
4
+ to use https://auth.kaeuferportal.de as Authentication server.
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module Kaeuferportal
3
- VERSION = "1.1.1"
3
+ VERSION = '2.0.2'
4
4
  end
5
5
  end
@@ -1,169 +1,36 @@
1
- require 'cgi'
2
- require 'uri'
3
- require 'oauth2'
4
- require 'omniauth'
5
- require 'timeout'
6
- require 'securerandom'
7
-
8
- module OAuth2
9
- class Client
10
- def get_token(params, access_token_opts={})
11
- opts = {:raise_errors => true, :parse => params.delete(:parse)}
12
- if options[:token_method] == :post
13
- opts[:body] = params
14
- opts[:headers] = {
15
- 'Content-Type' => 'application/x-www-form-urlencoded',
16
- 'Accept-Encoding' => ''
17
- }
18
- else
19
- opts[:params] = params
20
- end
21
- response = request(options[:token_method], token_url, opts)
22
- raise Error.new(response) unless response.body['access_token']
23
- opts = {
24
- :access_token => response.body.split("=")[1],
25
- :param_name => 'token'
26
- }
27
- AccessToken.from_hash(self, opts.merge(access_token_opts))
28
- end
29
- end
30
- end
1
+ require 'omniauth/strategies/oauth2'
31
2
 
32
3
  module OmniAuth
33
4
  module Strategies
34
- # Authentication strategy for connecting with APIs constructed using
35
- # the [OAuth 2.0 Specification](http://tools.ietf.org/html/draft-ietf-oauth-v2-10).
36
- # You must generally register your application with the provider and
37
- # utilize an application id and secret in order to authenticate using
38
- # OAuth 2.0.
39
- class Kaeuferportal
40
- include OmniAuth::Strategy
41
-
42
- args [:client_id, :client_secret]
43
-
5
+ class Kaeuferportal < OmniAuth::Strategies::OAuth2
44
6
  option :name, "kaeuferportal"
45
- option :client_id, nil
46
- option :client_secret, nil
47
- option :authorize_params, {}
48
- option :authorize_options, [:scope]
49
- option :token_params, {}
50
- option :token_options, []
51
7
  option :client_options, {
52
- :site => 'https://www.kaeuferportal.de',
53
- :authorize_url => '/oauth/authorize',
54
- :token_url => '/oauth/access_token'
8
+ site: 'https://auth.kaeuferportal.de',
9
+ authorize_url: '/oauth/authorize',
10
+ token_url: '/oauth/token'
55
11
  }
56
12
 
57
-
58
- attr_accessor :access_token
59
-
60
- def client
61
- ::OAuth2::Client.new(options.client_id, options.client_secret, deep_symbolize(options.client_options))
62
- end
63
-
64
- def callback_url
65
- full_host + script_name + callback_path
66
- end
67
-
68
- credentials do
69
- hash = {'token' => access_token.token}
70
- hash.merge!('refresh_token' => access_token.refresh_token) if access_token.expires? && access_token.refresh_token
71
- hash.merge!('expires_at' => access_token.expires_at) if access_token.expires?
72
- hash.merge!('expires' => access_token.expires?)
73
- hash
74
- end
75
-
76
- def request_phase
77
- redirect client.auth_code.authorize_url({:redirect_url => callback_url}.merge(authorize_params))
78
- end
79
-
80
- def authorize_params
81
- if options.authorize_params[:state].to_s.empty?
82
- options.authorize_params[:state] = SecureRandom.hex(24)
83
- end
84
- params = options.authorize_params.merge(options.authorize_options.inject({}){|h,k| h[k.to_sym] = options[k] if options[k]; h})
85
- if OmniAuth.config.test_mode
86
- @env ||= {}
87
- @env['rack.session'] ||= {}
88
- end
89
- session['omniauth.state'] = params[:state]
90
- params
91
- end
92
-
93
- def token_params
94
- options.token_params.merge(options.token_options.inject({}){|h,k| h[k.to_sym] = options[k] if options[k]; h})
95
- end
96
-
97
- def callback_phase
98
- if request.params['error'] || request.params['error_reason']
99
- raise CallbackError.new(request.params['error'], request.params['error_description'] || request.params['error_reason'], request.params['error_uri'])
100
- end
101
- if request.params['state'].to_s.empty? || request.params['state'] != session.delete('omniauth.state')
102
- raise CallbackError.new(nil, :csrf_detected)
103
- end
104
-
105
- self.access_token = build_access_token
106
- self.access_token = access_token.refresh! if access_token.expired?
107
-
108
- super
109
- rescue ::OAuth2::Error, CallbackError => e
110
- fail!(:invalid_credentials, e)
111
- rescue ::MultiJson::DecodeError => e
112
- fail!(:invalid_response, e)
113
- rescue ::Timeout::Error, ::Errno::ETIMEDOUT => e
114
- fail!(:timeout, e)
115
- rescue ::SocketError => e
116
- fail!(:failed_to_connect, e)
117
- end
118
-
119
- # These are called after authentication has succeeded. If
120
- # possible, you should try to set the UID without making
121
- # additional calls (if the user id is returned with the token
122
- # or as a URI parameter). This may not be possible with all
123
- # providers.
124
- uid { raw_info['uuid'] }
13
+ uid { user_info['sub'] }
125
14
 
126
15
  info do
127
16
  {
128
- :name => @raw_info['email'].split("@")[0],
129
- :email => @raw_info['email']
17
+ name: user_info['name'],
18
+ email: user_info['email']
130
19
  }
131
20
  end
132
21
 
133
- def raw_info
134
- access_token.options[:mode] = :query
135
- access_token.options[:param_name] = 'oauth_token'
136
- access_token.client.connection.headers['Accept-Encoding'] = ''
137
- @raw_info ||= access_token.get('/oauth/user').parsed
22
+ def user_info
23
+ @user_info ||= access_token.get('/api/users/current').parsed
138
24
  end
139
25
 
140
- protected
141
-
142
- def deep_symbolize(hash)
143
- hash.inject({}) do |h, (k,v)|
144
- h[k.to_sym] = v.is_a?(Hash) ? deep_symbolize(v) : v
145
- h
146
- end
147
- end
148
-
149
- def build_access_token
150
- verifier = request.params['code']
151
- client.auth_code.get_token(verifier, {:redirect_url => callback_url}.merge(token_params.to_hash(:symbolize_keys => true)))
152
- end
153
-
154
- # An error that is indicated in the OAuth 2.0 callback.
155
- # This could be a `redirect_uri_mismatch` or other
156
- class CallbackError < StandardError
157
- attr_accessor :error, :error_reason, :error_uri
158
-
159
- def initialize(error, error_reason=nil, error_uri=nil)
160
- self.error = error
161
- self.error_reason = error_reason
162
- self.error_uri = error_uri
163
- end
26
+ # This method override was once part of omniauth-oauth2, but was removed
27
+ # in https://github.com/intridea/omniauth-oauth2/pull/70
28
+ # However, this causes Doorkeeper to reject the redirect_uri, as I explain
29
+ # here: https://github.com/intridea/omniauth-oauth2/issues/28#issuecomment-199382532
30
+ def callback_url
31
+ full_host + script_name + callback_path
164
32
  end
165
33
  end
166
34
  end
167
35
  end
168
36
  OmniAuth.config.add_camelization 'kaeuferportal', 'Kaeuferportal'
169
-
@@ -2,10 +2,10 @@
2
2
  require File.expand_path('../lib/omniauth-kaeuferportal/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.add_dependency 'omniauth', '~> 1.0'
6
- gem.add_dependency 'oauth2', '=0.7.1'
5
+ gem.add_dependency 'omniauth', '~> 1.3'
6
+ gem.add_dependency 'omniauth-oauth2', '~> 1.4'
7
7
 
8
- gem.add_development_dependency 'rspec', '~> 2.7'
8
+ gem.add_development_dependency 'rspec', '~> 3.0'
9
9
  gem.add_development_dependency 'rack-test'
10
10
  gem.add_development_dependency 'webmock'
11
11
  gem.add_development_dependency 'simplecov'
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
14
14
  gem.email = ["christoph.rahles@kaeuferportal.de"]
15
15
  gem.description = %q{Kaeuferportal-OAuth2 strategy for OmniAuth.}
16
16
  gem.summary = %q{Kaeuferportal-OAuth2 strategy for OmniAuth.}
17
- gem.homepage = "https://github.com/Beko-Kaeuferportal/omniauth-kaeuferportal"
17
+ gem.homepage = "https://github.com/kaeuferportal/omniauth-kaeuferportal"
18
18
 
19
19
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  gem.files = `git ls-files`.split("\n")
@@ -1,7 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe OmniAuth::Strategies::Kaeuferportal do
4
- def app; lambda{|env| [200, {}, ["Hello."]]} end
4
+ def app
5
+ lambda { |env| [200, {}, ["Hello."]] }
6
+ end
7
+
5
8
  let(:fresh_strategy){ Class.new(OmniAuth::Strategies::Kaeuferportal) }
6
9
 
7
10
  before do
@@ -12,52 +15,17 @@ describe OmniAuth::Strategies::Kaeuferportal do
12
15
  OmniAuth.config.test_mode = false
13
16
  end
14
17
 
15
- describe '#client' do
18
+ describe '#client_options' do
16
19
  subject{ fresh_strategy }
17
20
 
18
21
  it 'should be initialized with symbolized client_options' do
19
- instance = subject.new(app, :client_options => {'authorize_url' => 'https://example.com'})
20
- instance.client.options[:authorize_url].should == 'https://example.com'
22
+ instance = subject.new(app, client_options: { 'authorize_url' => 'https://example.com' })
23
+ expect(instance.client.options[:authorize_url]).to eql 'https://example.com'
21
24
  end
22
25
 
23
26
  it 'should set ssl options as connection options' do
24
- instance = subject.new(app, :client_options => {'ssl' => {'ca_path' => 'foo'}})
25
- instance.client.options[:connection_opts][:ssl] =~ {:ca_path => 'foo'}
26
- end
27
- end
28
-
29
- describe '#authorize_params' do
30
- subject { fresh_strategy }
31
-
32
- it 'should include any authorize params passed in the :authorize_params option' do
33
- instance = subject.new('abc', 'def', :authorize_params => {:foo => 'bar', :baz => 'zip', :state => '123'})
34
- instance.authorize_params.should == {'foo' => 'bar', 'baz' => 'zip', 'state' => '123'}
35
- end
36
-
37
- it 'should include top-level options that are marked as :authorize_options' do
38
- instance = subject.new('abc', 'def', :authorize_options => [:scope, :foo], :scope => 'bar', :foo => 'baz', :authorize_params => {:state => '123'})
39
- instance.authorize_params.should == {'scope' => 'bar', 'foo' => 'baz', 'state' => '123'}
40
- end
41
-
42
- it 'should include random state in the authorize params' do
43
- instance = subject.new('abc', 'def')
44
- instance.authorize_params.keys.should == ['state']
45
- instance.session['omniauth.state'].should_not be_empty
46
- instance.session['omniauth.state'].should == instance.authorize_params['state']
47
- end
48
- end
49
-
50
- describe '#token_params' do
51
- subject { fresh_strategy }
52
-
53
- it 'should include any authorize params passed in the :authorize_params option' do
54
- instance = subject.new('abc', 'def', :token_params => {:foo => 'bar', :baz => 'zip'})
55
- instance.token_params.should == {'foo' => 'bar', 'baz' => 'zip'}
56
- end
57
-
58
- it 'should include top-level options that are marked as :authorize_options' do
59
- instance = subject.new('abc', 'def', :token_options => [:scope, :foo], :scope => 'bar', :foo => 'baz')
60
- instance.token_params.should == {'scope' => 'bar', 'foo' => 'baz'}
27
+ instance = subject.new(app, client_options: { 'ssl' => { 'ca_path' => 'foo' } })
28
+ instance.client.options[:connection_opts][:ssl] =~ { ca_path: 'foo' }
61
29
  end
62
30
  end
63
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-kaeuferportal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Rahles
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-21 00:00:00.000000000 Z
11
+ date: 2016-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '1.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: oauth2
28
+ name: omniauth-oauth2
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.7.1
33
+ version: '1.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.7.1
40
+ version: '1.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.7'
47
+ version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.7'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack-test
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -113,7 +113,7 @@ files:
113
113
  - omniauth-kaeuferportal.gemspec
114
114
  - spec/omniauth/strategies/kaeuferportal_spec.rb
115
115
  - spec/spec_helper.rb
116
- homepage: https://github.com/Beko-Kaeuferportal/omniauth-kaeuferportal
116
+ homepage: https://github.com/kaeuferportal/omniauth-kaeuferportal
117
117
  licenses: []
118
118
  metadata: {}
119
119
  post_install_message:
@@ -132,8 +132,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  version: '0'
133
133
  requirements: []
134
134
  rubyforge_project:
135
- rubygems_version: 2.6.13
135
+ rubygems_version: 2.4.8
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Kaeuferportal-OAuth2 strategy for OmniAuth.
139
- test_files: []
139
+ test_files:
140
+ - spec/omniauth/strategies/kaeuferportal_spec.rb
141
+ - spec/spec_helper.rb