omniauth-kaeuferportal 1.1.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
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