Class: SSO::Server::Doorkeeper::AccessTokenMarker
- Inherits:
-
Object
- Object
- SSO::Server::Doorkeeper::AccessTokenMarker
show all
- Includes:
- Logging
- Defined in:
- lib/sso/server/doorkeeper/access_token_marker.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Logging
#debug, #error, #fatal, #info, #logger, #progname, #warn
Constructor Details
Returns a new instance of AccessTokenMarker.
10
11
12
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 10
def initialize(app)
@app = app
end
|
Instance Attribute Details
#request ⇒ Object
Returns the value of attribute request.
7
8
9
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 7
def request
@request
end
|
#response ⇒ Object
Returns the value of attribute response.
7
8
9
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 7
def response
@response
end
|
Instance Method Details
#applicable? ⇒ Boolean
32
33
34
35
36
37
38
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 32
def applicable?
request.method == 'POST' &&
(authorization_grant_flow? || password_flow?) &&
response_code == 200 &&
response_body &&
outgoing_access_token
end
|
#authorization_grant_flow? ⇒ Boolean
88
89
90
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 88
def authorization_grant_flow?
grant_token.present?
end
|
#call(env) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 14
def call(env)
@env = env
@request = ::ActionDispatch::Request.new @env
@response = @app.call @env
return response unless applicable?
if authorization_grant_flow?
handle_authorization_grant_flow
elsif password_flow?
handle_password_flow
else
fail NotImplementedError
end
response
end
|
#grant_token ⇒ Object
96
97
98
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 96
def grant_token
params['code']
end
|
#grant_type ⇒ Object
100
101
102
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 100
def grant_type
params['grant_type']
end
|
#handle_authorization_grant_flow ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 40
def handle_authorization_grant_flow
debug { %(Detected outgoing "Access Token" #{outgoing_access_token.inspect} of the "Authorization Code Grant" flow) }
debug { %(This Access Token belongs to "Authorization Grant Token" #{grant_token.inspect}. Augmenting related Passport with it...) }
registration = ::SSO::Server::Passports.register_access_token_from_grant grant_token: grant_token, access_token: outgoing_access_token
return if registration.success?
warn { 'The passport could not be augmented via the authorizaton grant. Destroying warden session.' }
warden.logout
end
|
#handle_password_flow ⇒ Object
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 52
def handle_password_flow
local_passport_id = session[:passport_id] debug { %(Detected outgoing "Access Token" #{outgoing_access_token.inspect} of the "Resource Owner Password Credentials Grant" flow.) }
debug { %(Augmenting local Passport #{local_passport_id.inspect} with this outgoing Access Token...) }
registration = ::SSO::Server::Passports.register_access_token_from_id passport_id: local_passport_id, access_token: outgoing_access_token
return if registration.success?
warn { 'The passport could not be augmented via the access token. Destroying warden session.' }
warden.logout
end
|
#outgoing_access_token ⇒ Object
79
80
81
82
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 79
def outgoing_access_token
return unless parsed_response_body
parsed_response_body['access_token']
end
|
#parsed_response_body ⇒ Object
71
72
73
74
75
76
77
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 71
def parsed_response_body
return unless response_body
::JSON.parse response_body
rescue JSON::ParserError => exception
Trouble.notify exception
nil
end
|
#password_flow? ⇒ Boolean
92
93
94
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 92
def password_flow?
grant_type == 'password'
end
|
#response_body ⇒ Object
63
64
65
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 63
def response_body
response.last.first.presence
end
|
#response_code ⇒ Object
67
68
69
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 67
def response_code
response.first
end
|
#session ⇒ Object
104
105
106
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 104
def session
@env['rack.session']
end
|
#warden ⇒ Object
84
85
86
|
# File 'lib/sso/server/doorkeeper/access_token_marker.rb', line 84
def warden
request.env['warden']
end
|