grape_oauth2 0.1.1 → 0.2.0
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 +4 -4
- data/.gitignore +11 -11
- data/Gemfile +23 -23
- data/Rakefile +11 -11
- data/grape_oauth2.gemspec +26 -27
- data/lib/grape_oauth2.rb +129 -129
- data/lib/grape_oauth2/configuration.rb +143 -143
- data/lib/grape_oauth2/configuration/class_accessors.rb +36 -36
- data/lib/grape_oauth2/configuration/validation.rb +71 -71
- data/lib/grape_oauth2/endpoints/authorize.rb +34 -34
- data/lib/grape_oauth2/endpoints/token.rb +72 -72
- data/lib/grape_oauth2/gem_version.rb +24 -24
- data/lib/grape_oauth2/generators/authorization.rb +44 -44
- data/lib/grape_oauth2/generators/base.rb +26 -26
- data/lib/grape_oauth2/generators/token.rb +62 -62
- data/lib/grape_oauth2/helpers/access_token_helpers.rb +52 -54
- data/lib/grape_oauth2/helpers/oauth_params.rb +41 -41
- data/lib/grape_oauth2/mixins/active_record/access_grant.rb +47 -47
- data/lib/grape_oauth2/mixins/active_record/access_token.rb +75 -75
- data/lib/grape_oauth2/mixins/active_record/client.rb +36 -35
- data/lib/grape_oauth2/mixins/mongoid/access_grant.rb +58 -58
- data/lib/grape_oauth2/mixins/mongoid/access_token.rb +88 -88
- data/lib/grape_oauth2/mixins/mongoid/client.rb +44 -41
- data/lib/grape_oauth2/mixins/sequel/access_grant.rb +68 -68
- data/lib/grape_oauth2/mixins/sequel/access_token.rb +86 -86
- data/lib/grape_oauth2/mixins/sequel/client.rb +54 -46
- data/lib/grape_oauth2/responses/authorization.rb +11 -10
- data/lib/grape_oauth2/responses/base.rb +56 -56
- data/lib/grape_oauth2/responses/token.rb +10 -10
- data/lib/grape_oauth2/scopes.rb +74 -74
- data/lib/grape_oauth2/strategies/authorization_code.rb +38 -38
- data/lib/grape_oauth2/strategies/base.rb +47 -47
- data/lib/grape_oauth2/strategies/client_credentials.rb +20 -20
- data/lib/grape_oauth2/strategies/password.rb +22 -22
- data/lib/grape_oauth2/strategies/refresh_token.rb +47 -47
- data/lib/grape_oauth2/unique_token.rb +20 -20
- data/lib/grape_oauth2/version.rb +14 -14
- data/spec/configuration/config_spec.rb +231 -231
- data/spec/configuration/version_spec.rb +12 -12
- data/spec/dummy/endpoints/custom_authorization.rb +25 -25
- data/spec/dummy/endpoints/custom_token.rb +35 -35
- data/spec/dummy/endpoints/status.rb +25 -25
- data/spec/dummy/grape_oauth2_config.rb +11 -11
- data/spec/dummy/orm/active_record/app/config/db.rb +7 -7
- data/spec/dummy/orm/active_record/app/models/access_code.rb +3 -3
- data/spec/dummy/orm/active_record/app/models/access_token.rb +3 -3
- data/spec/dummy/orm/active_record/app/models/application.rb +3 -3
- data/spec/dummy/orm/active_record/app/models/application_record.rb +3 -3
- data/spec/dummy/orm/active_record/app/models/user.rb +10 -10
- data/spec/dummy/orm/active_record/app/twitter.rb +36 -36
- data/spec/dummy/orm/active_record/config.ru +7 -7
- data/spec/dummy/orm/active_record/db/schema.rb +53 -53
- data/spec/dummy/orm/mongoid/app/config/db.rb +6 -6
- data/spec/dummy/orm/mongoid/app/config/mongoid.yml +21 -21
- data/spec/dummy/orm/mongoid/app/models/access_code.rb +3 -3
- data/spec/dummy/orm/mongoid/app/models/access_token.rb +3 -3
- data/spec/dummy/orm/mongoid/app/models/application.rb +3 -3
- data/spec/dummy/orm/mongoid/app/models/user.rb +11 -11
- data/spec/dummy/orm/mongoid/app/twitter.rb +34 -34
- data/spec/dummy/orm/mongoid/config.ru +5 -5
- data/spec/dummy/orm/sequel/app/config/db.rb +1 -1
- data/spec/dummy/orm/sequel/app/models/access_code.rb +4 -4
- data/spec/dummy/orm/sequel/app/models/access_token.rb +4 -4
- data/spec/dummy/orm/sequel/app/models/application.rb +4 -4
- data/spec/dummy/orm/sequel/app/models/application_record.rb +2 -2
- data/spec/dummy/orm/sequel/app/models/user.rb +11 -11
- data/spec/dummy/orm/sequel/app/twitter.rb +47 -47
- data/spec/dummy/orm/sequel/config.ru +5 -5
- data/spec/dummy/orm/sequel/db/schema.rb +50 -50
- data/spec/lib/scopes_spec.rb +50 -50
- data/spec/mixins/active_record/access_token_spec.rb +185 -185
- data/spec/mixins/active_record/client_spec.rb +104 -95
- data/spec/mixins/mongoid/access_token_spec.rb +185 -185
- data/spec/mixins/mongoid/client_spec.rb +104 -95
- data/spec/mixins/sequel/access_token_spec.rb +185 -185
- data/spec/mixins/sequel/client_spec.rb +105 -96
- data/spec/requests/flows/authorization_code_spec.rb +67 -67
- data/spec/requests/flows/client_credentials_spec.rb +101 -101
- data/spec/requests/flows/password_spec.rb +210 -210
- data/spec/requests/flows/refresh_token_spec.rb +222 -222
- data/spec/requests/flows/revoke_token_spec.rb +103 -103
- data/spec/requests/protected_resources_spec.rb +64 -64
- data/spec/spec_helper.rb +60 -60
- data/spec/support/api_helper.rb +11 -11
- metadata +50 -52
- data/.rspec +0 -2
- data/.rubocop.yml +0 -18
- data/.travis.yml +0 -42
- data/README.md +0 -820
- data/gemfiles/active_record.rb +0 -25
- data/gemfiles/mongoid.rb +0 -14
- data/gemfiles/sequel.rb +0 -24
- data/grape_oauth2.png +0 -0
@@ -1,44 +1,44 @@
|
|
1
|
-
module Grape
|
2
|
-
module OAuth2
|
3
|
-
module Generators
|
4
|
-
# OAuth2 Authorization generator class.
|
5
|
-
# Processes the request and builds the response.
|
6
|
-
class Authorization < Base
|
7
|
-
class << self
|
8
|
-
# Generates Authorization Response based on the request.
|
9
|
-
#
|
10
|
-
# @return [Grape::OAuth2::Responses::Authorization] response
|
11
|
-
#
|
12
|
-
def generate_for(env, &_block)
|
13
|
-
authorization = Rack::OAuth2::Server::Authorize.new do |request, response|
|
14
|
-
if block_given?
|
15
|
-
yield request, response
|
16
|
-
else
|
17
|
-
execute_default(request, response)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
Grape::OAuth2::Responses::Authorization.new(authorization.call(env))
|
22
|
-
rescue Rack::OAuth2::Server::Authorize::BadRequest => error
|
23
|
-
error_response(error)
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def error_response(error)
|
29
|
-
response = Rack::Response.new
|
30
|
-
response.status = error.status
|
31
|
-
response.header['Content-Type'] = 'application/json'
|
32
|
-
response.write(JSON.dump(Rack::OAuth2::Util.compact_hash(error.protocol_params)))
|
33
|
-
|
34
|
-
Grape::OAuth2::Responses::Authorization.new(response.finish)
|
35
|
-
end
|
36
|
-
|
37
|
-
def execute_default(request, response)
|
38
|
-
Grape::OAuth2::Strategies::AuthorizationCode.process(request, response)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
1
|
+
module Grape
|
2
|
+
module OAuth2
|
3
|
+
module Generators
|
4
|
+
# OAuth2 Authorization generator class.
|
5
|
+
# Processes the request and builds the response.
|
6
|
+
class Authorization < Base
|
7
|
+
class << self
|
8
|
+
# Generates Authorization Response based on the request.
|
9
|
+
#
|
10
|
+
# @return [Grape::OAuth2::Responses::Authorization] response
|
11
|
+
#
|
12
|
+
def generate_for(env, &_block)
|
13
|
+
authorization = Rack::OAuth2::Server::Authorize.new do |request, response|
|
14
|
+
if block_given?
|
15
|
+
yield request, response
|
16
|
+
else
|
17
|
+
execute_default(request, response)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Grape::OAuth2::Responses::Authorization.new(authorization.call(env))
|
22
|
+
rescue Rack::OAuth2::Server::Authorize::BadRequest => error
|
23
|
+
error_response(error)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def error_response(error)
|
29
|
+
response = Rack::Response.new
|
30
|
+
response.status = error.status
|
31
|
+
response.header['Content-Type'] = 'application/json'
|
32
|
+
response.write(JSON.dump(Rack::OAuth2::Util.compact_hash(error.protocol_params)))
|
33
|
+
|
34
|
+
Grape::OAuth2::Responses::Authorization.new(response.finish)
|
35
|
+
end
|
36
|
+
|
37
|
+
def execute_default(request, response)
|
38
|
+
Grape::OAuth2::Strategies::AuthorizationCode.process(request, response)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
module Grape
|
2
|
-
module OAuth2
|
3
|
-
module Generators
|
4
|
-
# Base class for Grape::OAuth2 generators.
|
5
|
-
# Grape::OAuth2 generators processes the requests and
|
6
|
-
# generates responses with Access Token or Authorization Code.
|
7
|
-
class Base
|
8
|
-
class << self
|
9
|
-
# Allowed grant types from the Grape::OAuth2 configuration.
|
10
|
-
#
|
11
|
-
# @return [Array]
|
12
|
-
# allowed grant types
|
13
|
-
#
|
14
|
-
def allowed_grants
|
15
|
-
config.allowed_grant_types
|
16
|
-
end
|
17
|
-
|
18
|
-
# Short getter for Grape::OAuth2 configuration.
|
19
|
-
def config
|
20
|
-
Grape::OAuth2.config
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
1
|
+
module Grape
|
2
|
+
module OAuth2
|
3
|
+
module Generators
|
4
|
+
# Base class for Grape::OAuth2 generators.
|
5
|
+
# Grape::OAuth2 generators processes the requests and
|
6
|
+
# generates responses with Access Token or Authorization Code.
|
7
|
+
class Base
|
8
|
+
class << self
|
9
|
+
# Allowed grant types from the Grape::OAuth2 configuration.
|
10
|
+
#
|
11
|
+
# @return [Array]
|
12
|
+
# allowed grant types
|
13
|
+
#
|
14
|
+
def allowed_grants
|
15
|
+
config.allowed_grant_types
|
16
|
+
end
|
17
|
+
|
18
|
+
# Short getter for Grape::OAuth2 configuration.
|
19
|
+
def config
|
20
|
+
Grape::OAuth2.config
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,62 +1,62 @@
|
|
1
|
-
module Grape
|
2
|
-
module OAuth2
|
3
|
-
module Generators
|
4
|
-
# OAuth2 Token generator class.
|
5
|
-
# Processes the request by required Grant Type and builds the response.
|
6
|
-
class Token < Base
|
7
|
-
# Grant type => OAuth2 strategy class
|
8
|
-
STRATEGY_CLASSES = {
|
9
|
-
password: Grape::OAuth2::Strategies::Password,
|
10
|
-
client_credentials: Grape::OAuth2::Strategies::ClientCredentials,
|
11
|
-
refresh_token: Grape::OAuth2::Strategies::RefreshToken
|
12
|
-
}.freeze
|
13
|
-
|
14
|
-
class << self
|
15
|
-
# Generates Token Response based on the request.
|
16
|
-
#
|
17
|
-
# @return [Grape::OAuth2::Responses::Token] response
|
18
|
-
#
|
19
|
-
def generate_for(env, &_block)
|
20
|
-
token = Rack::OAuth2::Server::Token.new do |request, response|
|
21
|
-
request.unsupported_grant_type! unless allowed_grants.include?(request.grant_type.to_s)
|
22
|
-
|
23
|
-
if block_given?
|
24
|
-
yield request, response
|
25
|
-
else
|
26
|
-
execute_default(request, response)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
Grape::OAuth2::Responses::Token.new(token.call(env))
|
31
|
-
end
|
32
|
-
|
33
|
-
protected
|
34
|
-
|
35
|
-
# Runs default Grape::OAuth2 functionality for Token endpoint.
|
36
|
-
# In common it authenticates client (or/and any other objects) and
|
37
|
-
# grants the Access Token or Auth Code.
|
38
|
-
#
|
39
|
-
# @param request [Rack::Request] request object
|
40
|
-
# @param response [Rack::Response] response object
|
41
|
-
#
|
42
|
-
def execute_default(request, response)
|
43
|
-
strategy = find_strategy(request.grant_type) || request.invalid_grant!
|
44
|
-
response.access_token = strategy.process(request)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Returns Grape::OAuth2 strategy class by Grant Type.
|
48
|
-
#
|
49
|
-
# @param grant_type [Symbol]
|
50
|
-
# grant type value
|
51
|
-
#
|
52
|
-
# @return [Password, ClientCredentials, RefreshToken]
|
53
|
-
# strategy class
|
54
|
-
#
|
55
|
-
def find_strategy(grant_type)
|
56
|
-
STRATEGY_CLASSES[grant_type]
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
1
|
+
module Grape
|
2
|
+
module OAuth2
|
3
|
+
module Generators
|
4
|
+
# OAuth2 Token generator class.
|
5
|
+
# Processes the request by required Grant Type and builds the response.
|
6
|
+
class Token < Base
|
7
|
+
# Grant type => OAuth2 strategy class
|
8
|
+
STRATEGY_CLASSES = {
|
9
|
+
password: Grape::OAuth2::Strategies::Password,
|
10
|
+
client_credentials: Grape::OAuth2::Strategies::ClientCredentials,
|
11
|
+
refresh_token: Grape::OAuth2::Strategies::RefreshToken
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
class << self
|
15
|
+
# Generates Token Response based on the request.
|
16
|
+
#
|
17
|
+
# @return [Grape::OAuth2::Responses::Token] response
|
18
|
+
#
|
19
|
+
def generate_for(env, &_block)
|
20
|
+
token = Rack::OAuth2::Server::Token.new do |request, response|
|
21
|
+
request.unsupported_grant_type! unless allowed_grants.include?(request.grant_type.to_s)
|
22
|
+
|
23
|
+
if block_given?
|
24
|
+
yield request, response
|
25
|
+
else
|
26
|
+
execute_default(request, response)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Grape::OAuth2::Responses::Token.new(token.call(env))
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
34
|
+
|
35
|
+
# Runs default Grape::OAuth2 functionality for Token endpoint.
|
36
|
+
# In common it authenticates client (or/and any other objects) and
|
37
|
+
# grants the Access Token or Auth Code.
|
38
|
+
#
|
39
|
+
# @param request [Rack::Request] request object
|
40
|
+
# @param response [Rack::Response] response object
|
41
|
+
#
|
42
|
+
def execute_default(request, response)
|
43
|
+
strategy = find_strategy(request.grant_type) || request.invalid_grant!
|
44
|
+
response.access_token = strategy.process(request)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns Grape::OAuth2 strategy class by Grant Type.
|
48
|
+
#
|
49
|
+
# @param grant_type [Symbol]
|
50
|
+
# grant type value
|
51
|
+
#
|
52
|
+
# @return [Password, ClientCredentials, RefreshToken]
|
53
|
+
# strategy class
|
54
|
+
#
|
55
|
+
def find_strategy(grant_type)
|
56
|
+
STRATEGY_CLASSES[grant_type]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -1,54 +1,52 @@
|
|
1
|
-
module Grape
|
2
|
-
module OAuth2
|
3
|
-
module Helpers
|
4
|
-
# Set of Grape OAuth2 helpers.
|
5
|
-
module AccessTokenHelpers
|
6
|
-
extend ::Grape::API::Helpers
|
7
|
-
|
8
|
-
# Adds OAuth2 Access Token protection for Grape routes.
|
9
|
-
#
|
10
|
-
# @param scopes [Array]
|
11
|
-
# set of scopes required to access the endpoint
|
12
|
-
#
|
13
|
-
# @raise [Rack::OAuth2::Server::Resource::Bearer::Unauthorized]
|
14
|
-
# invalid Access Token value
|
15
|
-
# @raise [Rack::OAuth2::Server::Resource::Bearer::Forbidden]
|
16
|
-
# Access Token expired, revoked or does't have required scopes
|
17
|
-
#
|
18
|
-
def access_token_required!(*scopes)
|
19
|
-
endpoint_scopes = env['api.endpoint'].options[:route_options][:scopes]
|
20
|
-
required_scopes = endpoint_scopes.presence || scopes
|
21
|
-
|
22
|
-
raise Rack::OAuth2::Server::Resource::Bearer::Unauthorized if current_access_token.nil?
|
23
|
-
raise Rack::OAuth2::Server::Resource::Bearer::Forbidden unless valid_access_token?(required_scopes)
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns Resource Owner from the Access Token
|
27
|
-
# found by access_token value passed with the request.
|
28
|
-
def current_resource_owner
|
29
|
-
@_current_resource_owner ||= current_access_token.resource_owner
|
30
|
-
end
|
31
|
-
|
32
|
-
# Returns Access Token instance found by
|
33
|
-
# access_token value passed with the request.
|
34
|
-
def current_access_token
|
35
|
-
@_current_access_token ||= request.env[Rack::OAuth2::Server::Resource::ACCESS_TOKEN]
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
1
|
+
module Grape
|
2
|
+
module OAuth2
|
3
|
+
module Helpers
|
4
|
+
# Set of Grape OAuth2 helpers.
|
5
|
+
module AccessTokenHelpers
|
6
|
+
extend ::Grape::API::Helpers
|
7
|
+
|
8
|
+
# Adds OAuth2 Access Token protection for Grape routes.
|
9
|
+
#
|
10
|
+
# @param scopes [Array]
|
11
|
+
# set of scopes required to access the endpoint
|
12
|
+
#
|
13
|
+
# @raise [Rack::OAuth2::Server::Resource::Bearer::Unauthorized]
|
14
|
+
# invalid Access Token value
|
15
|
+
# @raise [Rack::OAuth2::Server::Resource::Bearer::Forbidden]
|
16
|
+
# Access Token expired, revoked or does't have required scopes
|
17
|
+
#
|
18
|
+
def access_token_required!(*scopes)
|
19
|
+
endpoint_scopes = env['api.endpoint'].options[:route_options][:scopes]
|
20
|
+
required_scopes = endpoint_scopes.presence || scopes
|
21
|
+
|
22
|
+
raise Rack::OAuth2::Server::Resource::Bearer::Unauthorized if current_access_token.nil?
|
23
|
+
raise Rack::OAuth2::Server::Resource::Bearer::Forbidden unless valid_access_token?(required_scopes)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns Resource Owner from the Access Token
|
27
|
+
# found by access_token value passed with the request.
|
28
|
+
def current_resource_owner
|
29
|
+
@_current_resource_owner ||= current_access_token.resource_owner
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns Access Token instance found by
|
33
|
+
# access_token value passed with the request.
|
34
|
+
def current_access_token
|
35
|
+
@_current_access_token ||= request.env[Rack::OAuth2::Server::Resource::ACCESS_TOKEN]
|
36
|
+
end
|
37
|
+
|
38
|
+
# Validate current access token not to be expired or revoked
|
39
|
+
# and has all the requested scopes.
|
40
|
+
#
|
41
|
+
# @return [Boolean]
|
42
|
+
# true if current Access Token not expired, not revoked and scopes match
|
43
|
+
# false in other cases.
|
44
|
+
#
|
45
|
+
def valid_access_token?(scopes)
|
46
|
+
!current_access_token.revoked? && !current_access_token.expired? &&
|
47
|
+
Grape::OAuth2.config.scopes_validator.new(scopes).valid_for?(current_access_token)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
module Grape
|
2
|
-
module OAuth2
|
3
|
-
module Helpers
|
4
|
-
# Grape Helper object for OAuth2 requests params.
|
5
|
-
# Used fin default Grape::OAuth2 gem endpoints and can be used
|
6
|
-
# for custom one.
|
7
|
-
module OAuthParams
|
8
|
-
extend ::Grape::API::Helpers
|
9
|
-
|
10
|
-
# Params are optional in order to process them correctly in accordance
|
11
|
-
# with the RFC 6749 (invalid_client, unsupported_grant_type, etc.)
|
12
|
-
params :oauth_token_params do
|
13
|
-
optional :grant_type, type: String, desc: 'Grant type'
|
14
|
-
optional :client_id, type: String, desc: 'Client ID'
|
15
|
-
optional :client_secret, type: String, desc: 'Client secret'
|
16
|
-
optional :refresh_token, type: String, desc: 'Refresh Token'
|
17
|
-
end
|
18
|
-
|
19
|
-
# Params for authorization request.
|
20
|
-
# @see https://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-4.1.1 Authorization Request
|
21
|
-
params :oauth_authorization_params do
|
22
|
-
optional :response_type, type: String, desc: 'Response type'
|
23
|
-
optional :client_id, type: String, desc: 'Client ID'
|
24
|
-
optional :redirect_uri, type: String, desc: 'Redirect URI'
|
25
|
-
optional :scope, type: String, desc: 'Authorization scopes'
|
26
|
-
optional :state, type: String, desc: 'State'
|
27
|
-
end
|
28
|
-
|
29
|
-
# Params for token revocation.
|
30
|
-
# @see https://tools.ietf.org/html/rfc7009#section-2.1 OAuth 2.0 Token Revocation
|
31
|
-
params :oauth_token_revocation_params do
|
32
|
-
requires :token, type: String, desc: 'The token that the client wants to get revoked'
|
33
|
-
optional :token_type_hint, type: String,
|
34
|
-
values: %w
|
35
|
-
default: 'access_token',
|
36
|
-
desc: 'A hint about the type of the token submitted for revocation'
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
1
|
+
module Grape
|
2
|
+
module OAuth2
|
3
|
+
module Helpers
|
4
|
+
# Grape Helper object for OAuth2 requests params.
|
5
|
+
# Used fin default Grape::OAuth2 gem endpoints and can be used
|
6
|
+
# for custom one.
|
7
|
+
module OAuthParams
|
8
|
+
extend ::Grape::API::Helpers
|
9
|
+
|
10
|
+
# Params are optional in order to process them correctly in accordance
|
11
|
+
# with the RFC 6749 (invalid_client, unsupported_grant_type, etc.)
|
12
|
+
params :oauth_token_params do
|
13
|
+
optional :grant_type, type: String, desc: 'Grant type'
|
14
|
+
optional :client_id, type: String, desc: 'Client ID'
|
15
|
+
optional :client_secret, type: String, desc: 'Client secret'
|
16
|
+
optional :refresh_token, type: String, desc: 'Refresh Token'
|
17
|
+
end
|
18
|
+
|
19
|
+
# Params for authorization request.
|
20
|
+
# @see https://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-4.1.1 Authorization Request
|
21
|
+
params :oauth_authorization_params do
|
22
|
+
optional :response_type, type: String, desc: 'Response type'
|
23
|
+
optional :client_id, type: String, desc: 'Client ID'
|
24
|
+
optional :redirect_uri, type: String, desc: 'Redirect URI'
|
25
|
+
optional :scope, type: String, desc: 'Authorization scopes'
|
26
|
+
optional :state, type: String, desc: 'State'
|
27
|
+
end
|
28
|
+
|
29
|
+
# Params for token revocation.
|
30
|
+
# @see https://tools.ietf.org/html/rfc7009#section-2.1 OAuth 2.0 Token Revocation
|
31
|
+
params :oauth_token_revocation_params do
|
32
|
+
requires :token, type: String, desc: 'The token that the client wants to get revoked'
|
33
|
+
optional :token_type_hint, type: String,
|
34
|
+
values: %w[access_token refresh_token],
|
35
|
+
default: 'access_token',
|
36
|
+
desc: 'A hint about the type of the token submitted for revocation'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|