lib/doorkeeper/request.rb
# frozen_string_literal: true module Doorkeeper module Request class << self def authorization_strategy(response_type) grant_flow = authorization_flows.detect do |flow| flow.matches_response_type?(response_type) end if grant_flow grant_flow.response_type_strategy else # [NOTE]: this will be removed in a newer versions of Doorkeeper. # For retro-compatibility only build_fallback_strategy_class(response_type) end end def token_strategy(grant_type) raise Errors::MissingRequiredParameter, :grant_type if grant_type.blank? grant_flow = token_flows.detect do |flow| flow.matches_grant_type?(grant_type) end if grant_flow grant_flow.grant_type_strategy else # [NOTE]: this will be removed in a newer versions of Doorkeeper. # For retro-compatibility only raise Errors::InvalidTokenStrategy unless available.include?(grant_type.to_s) strategy_class = build_fallback_strategy_class(grant_type) raise Errors::InvalidTokenStrategy unless strategy_class strategy_class end end private def authorization_flows Doorkeeper.configuration.authorization_response_flows end def token_flows Doorkeeper.configuration.token_grant_flows end # [NOTE]: this will be removed in a newer versions of Doorkeeper. # For retro-compatibility only def available Doorkeeper.config.deprecated_token_grant_types_resolver end def build_fallback_strategy_class(grant_or_request_type) strategy_class_name = grant_or_request_type.to_s.tr(" ", "_").camelize fallback_strategy = "Doorkeeper::Request::#{strategy_class_name}".constantize ::Kernel.warn <<~WARNING [DOORKEEPER] #{fallback_strategy} found using fallback, it must be registered using `Doorkeeper::GrantFlow.register(grant_flow_name, **options)`. This functionality will be removed in a newer versions of Doorkeeper. WARNING fallback_strategy rescue NameError raise Errors::InvalidTokenStrategy end end end end