access_token_agent 3.1.1 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/CHANGELOG.md +15 -0
- data/README.md +6 -3
- data/access_token_agent.gemspec +5 -1
- data/bin/console +11 -0
- data/lib/access_token_agent.rb +1 -0
- data/lib/access_token_agent/connector.rb +25 -9
- data/lib/access_token_agent/error.rb +3 -1
- data/lib/access_token_agent/missing_access_token.rb +7 -0
- data/lib/access_token_agent/token.rb +15 -4
- data/lib/access_token_agent/unsupported_token_type_error.rb +7 -0
- data/lib/access_token_agent/version.rb +3 -0
- metadata +6 -2
- data/lib/access_token_agent/invalid_token_type_error.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b05e9bb8df48a419db6aa15bf18bca718638a4e8
|
4
|
+
data.tar.gz: 405ed7dfca477e3763e8acd6fc12b394813e0ffb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19b6c44ddedcfdd3a7dc8a7c67dc0ab73d81c7cf11129c6bb2ccc2bf897d0cd15dee6400bf82fae597cbb49cb6b602a39ed5f56064a929ff1970e253231f7fcf
|
7
|
+
data.tar.gz: 90dab0e2595761e707ca502ec1b0b3489cbf8e7d96fdf21a6ca8952715856db351acfd29235b281567aa298d786eefc105fe751555042d77990bca76f5e3899b
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## master
|
2
|
+
|
3
|
+
*no unreleased changes*
|
4
|
+
|
5
|
+
## 3.2.0
|
6
|
+
|
7
|
+
- Add `http_auth_header` method to the connector, since this is the most
|
8
|
+
common use case
|
9
|
+
- Deprecate the `authenticate` method in favor of the new `token` method
|
10
|
+
- Allow to configure from which path to get the access token
|
11
|
+
- Put all errors into the AccessTokenAgent namespace
|
12
|
+
- Actually return a token when faking auth
|
13
|
+
- Rename error raised for unsupported token types
|
14
|
+
- Ensure that access token response carries an access token
|
15
|
+
|
1
16
|
## 3.1.1
|
2
17
|
|
3
18
|
- Fix broken gem release (missing files)
|
data/README.md
CHANGED
@@ -19,21 +19,24 @@ And then execute:
|
|
19
19
|
|
20
20
|
$ bundle
|
21
21
|
|
22
|
-
## Configuration
|
22
|
+
## Basic Configuration
|
23
23
|
|
24
24
|
Create an instance of AccessTokenAgent::Connector with the desired
|
25
25
|
configuration and use that instance to authenticate.
|
26
26
|
|
27
|
-
Needs the following parameters:
|
27
|
+
Needs the following parameters to instantiate:
|
28
28
|
|
29
29
|
* `host` - the server address where the auth provider is running.
|
30
30
|
* `client_id` - the client_id of the application using this gem.
|
31
31
|
* `client_secret` - the client_secret of the application using this gem.
|
32
|
+
* `access_token_path` - Allows to customize the HTTP path where the
|
33
|
+
access token needs to be requested.
|
34
|
+
**Default:** `/oauth/token`
|
32
35
|
|
33
36
|
Optional parameters:
|
34
37
|
|
35
38
|
* `fake_auth` - if true, do not connect to the auth service and return
|
36
|
-
|
39
|
+
a faked access token.
|
37
40
|
|
38
41
|
### Example
|
39
42
|
|
data/access_token_agent.gemspec
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'access_token_agent/version'
|
6
|
+
|
3
7
|
Gem::Specification.new do |s|
|
4
8
|
s.name = 'access_token_agent'
|
5
|
-
s.version =
|
9
|
+
s.version = AccessTokenAgent::VERSION
|
6
10
|
s.date = '2016-04-08'
|
7
11
|
s.summary = 'Handles authentication against an OAuth2 provider'
|
8
12
|
s.homepage = 'https://github.com/kaeuferportal/access_token_agent'
|
data/bin/console
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'access_token_agent'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
require 'pry'
|
11
|
+
Pry.start
|
data/lib/access_token_agent.rb
CHANGED
@@ -2,28 +2,44 @@ require 'net/http'
|
|
2
2
|
|
3
3
|
module AccessTokenAgent
|
4
4
|
class Connector
|
5
|
+
FAKE_TOKEN = 'FakeAuthToken'.freeze
|
6
|
+
|
5
7
|
def initialize(host:,
|
6
8
|
client_id:,
|
7
9
|
client_secret:,
|
8
|
-
fake_auth: false
|
10
|
+
fake_auth: false,
|
11
|
+
access_token_path: '/oauth/token')
|
9
12
|
@host = host
|
10
13
|
@client_id = client_id
|
11
14
|
@client_secret = client_secret
|
12
15
|
@fake_auth = fake_auth
|
16
|
+
@access_token_path = access_token_path
|
13
17
|
end
|
14
18
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
19
|
+
def http_auth_header
|
20
|
+
{ Authorization: "Bearer #{token}" }
|
21
|
+
end
|
22
|
+
|
23
|
+
def token
|
24
|
+
return FAKE_TOKEN if @fake_auth
|
25
|
+
@known_token = fetch_token unless @known_token && @known_token.valid?
|
26
|
+
|
18
27
|
@known_token.value
|
19
28
|
end
|
20
29
|
|
30
|
+
def authenticate
|
31
|
+
warn '[DEPRECATION] `authenticate` is deprecated. Use `token` instead.'
|
32
|
+
token
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
21
37
|
def fetch_token
|
22
|
-
|
38
|
+
Token.new(fetch_token_hash)
|
23
39
|
end
|
24
40
|
|
25
|
-
def
|
26
|
-
response =
|
41
|
+
def fetch_token_hash
|
42
|
+
response = perform_request
|
27
43
|
case response.code
|
28
44
|
when '200' then JSON.parse(response.body)
|
29
45
|
when '401' then raise UnauthorizedError
|
@@ -34,7 +50,7 @@ module AccessTokenAgent
|
|
34
50
|
raise ConnectionError
|
35
51
|
end
|
36
52
|
|
37
|
-
def
|
53
|
+
def perform_request
|
38
54
|
request = Net::HTTP::Post.new(auth_uri)
|
39
55
|
request.basic_auth @client_id, @client_secret
|
40
56
|
request.form_data = { 'grant_type' => 'client_credentials' }
|
@@ -47,7 +63,7 @@ module AccessTokenAgent
|
|
47
63
|
end
|
48
64
|
|
49
65
|
def auth_uri
|
50
|
-
@auth_uri ||= URI("#{@host}
|
66
|
+
@auth_uri ||= URI("#{@host}#{@access_token_path}")
|
51
67
|
end
|
52
68
|
end
|
53
69
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'access_token_agent/
|
1
|
+
require 'access_token_agent/missing_access_token'
|
2
|
+
require 'access_token_agent/unsupported_token_type_error'
|
2
3
|
|
3
4
|
module AccessTokenAgent
|
4
5
|
class Token
|
@@ -7,9 +8,8 @@ module AccessTokenAgent
|
|
7
8
|
EXPIRY_MARGIN = 60 # seconds
|
8
9
|
|
9
10
|
def initialize(auth_response)
|
10
|
-
|
11
|
-
|
12
|
-
end
|
11
|
+
validate_response(auth_response)
|
12
|
+
|
13
13
|
@value = auth_response['access_token']
|
14
14
|
@expires_at = Time.now + auth_response['expires_in']
|
15
15
|
end
|
@@ -17,5 +17,16 @@ module AccessTokenAgent
|
|
17
17
|
def valid?
|
18
18
|
@expires_at - EXPIRY_MARGIN > Time.now
|
19
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def validate_response(auth_response)
|
24
|
+
unless auth_response['token_type'] == 'bearer'
|
25
|
+
raise UnsupportedTokenTypeError, auth_response['token_type']
|
26
|
+
end
|
27
|
+
|
28
|
+
token = auth_response['access_token']
|
29
|
+
raise MissingAccessToken if token.nil? || token.empty?
|
30
|
+
end
|
20
31
|
end
|
21
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: access_token_agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beko Käuferportal GmbH
|
@@ -115,6 +115,7 @@ extensions: []
|
|
115
115
|
extra_rdoc_files: []
|
116
116
|
files:
|
117
117
|
- ".gitignore"
|
118
|
+
- ".rspec"
|
118
119
|
- ".rubocop.yml"
|
119
120
|
- ".ruby-version"
|
120
121
|
- ".travis.yml"
|
@@ -123,13 +124,16 @@ files:
|
|
123
124
|
- LICENSE.md
|
124
125
|
- README.md
|
125
126
|
- access_token_agent.gemspec
|
127
|
+
- bin/console
|
126
128
|
- lib/access_token_agent.rb
|
127
129
|
- lib/access_token_agent/connection_error.rb
|
128
130
|
- lib/access_token_agent/connector.rb
|
129
131
|
- lib/access_token_agent/error.rb
|
130
|
-
- lib/access_token_agent/
|
132
|
+
- lib/access_token_agent/missing_access_token.rb
|
131
133
|
- lib/access_token_agent/token.rb
|
132
134
|
- lib/access_token_agent/unauthorized_error.rb
|
135
|
+
- lib/access_token_agent/unsupported_token_type_error.rb
|
136
|
+
- lib/access_token_agent/version.rb
|
133
137
|
homepage: https://github.com/kaeuferportal/access_token_agent
|
134
138
|
licenses:
|
135
139
|
- MIT
|