lib/rodauth/features/oauth_implicit_grant.rb in rodauth-oauth-0.10.4 vs lib/rodauth/features/oauth_implicit_grant.rb in rodauth-oauth-1.0.0.pre.beta1
- old
+ new
@@ -1,41 +1,52 @@
# frozen_string_literal: true
+require "rodauth/oauth"
+
module Rodauth
Feature.define(:oauth_implicit_grant, :OauthImplicitGrant) do
depends :oauth_authorize_base
- auth_value_method :use_oauth_implicit_grant_type?, false
+ def oauth_grant_types_supported
+ super | %w[implicit]
+ end
- private
+ def oauth_response_types_supported
+ super | %w[token]
+ end
- def check_valid_response_type?
- response_type = param_or_nil("response_type")
-
- response_type.nil? || response_type == "token" || super
+ def oauth_response_modes_supported
+ super | %w[fragment]
end
+ private
+
def do_authorize(response_params = {}, response_mode = param_or_nil("response_mode"))
- return super unless param("response_type") == "token" && use_oauth_implicit_grant_type?
+ response_type = param("response_type")
+ return super unless response_type == "token" && supported_response_type?(response_type)
response_mode ||= "fragment"
+
+ redirect_response_error("invalid_request") unless supported_response_mode?(response_mode)
+
response_params.replace(_do_authorize_token)
response_params["state"] = param("state") if param_or_nil("state")
[response_params, response_mode]
end
def _do_authorize_token
- create_params = {
- oauth_tokens_account_id_column => account_id,
- oauth_tokens_oauth_application_id_column => oauth_application[oauth_applications_id_column],
- oauth_tokens_scopes_column => scopes
+ grant_params = {
+ oauth_grants_type_column => "implicit",
+ oauth_grants_oauth_application_id_column => oauth_application[oauth_applications_id_column],
+ oauth_grants_scopes_column => scopes,
+ oauth_grants_account_id_column => account_id
}
- oauth_token = generate_oauth_token(create_params, false)
+ oauth_grant = generate_token(grant_params, false)
- json_access_token_payload(oauth_token)
+ json_access_token_payload(oauth_grant)
end
def authorize_response(params, mode)
return super unless mode == "fragment"
@@ -44,21 +55,11 @@
params << redirect_url.query if redirect_url.query
redirect_url.fragment = params.join("&")
redirect(redirect_url.to_s)
end
- def oauth_server_metadata_body(*)
- super.tap do |data|
- if use_oauth_implicit_grant_type?
- data[:response_types_supported] << "token"
- data[:response_modes_supported] << "fragment"
- data[:grant_types_supported] << "implicit"
- end
- end
- end
-
def check_valid_response_type?
- return true if use_oauth_implicit_grant_type? && param_or_nil("response_type") == "token"
+ return true if param_or_nil("response_type") == "token"
super
end
end
end