module DoorkeeperHub module Helpers extend ActiveSupport::Concern included do before_action :authenticate_doorkeeper!, unless: -> { DoorkeeperHub.client_mode? } end def authenticate_doorkeeper! if signed_in?(DoorkeeperHub.devise_scope) return if DoorkeeperHub.client_mode? redirect_to root_path_with_token if params[DoorkeeperHub.token_param].nil? else redirect_to omniauth_authorize_path( DoorkeeperHub.devise_scope, :saml, origin: request.fullpath ) end end def default_url_options(options = {}) return options if DoorkeeperHub.client_mode? options[DoorkeeperHub.token_param] = params[DoorkeeperHub.token_param] options end def after_sign_in_path_for(_) request.env['omniauth.origin'] || (DoorkeeperHub.client_mode? ? root_path : root_path_with_token) end def root_path_with_token root_path DoorkeeperHub.token_param => params_or_default_token end def params_or_default_token params[DoorkeeperHub.token_param] || current_user.companies.first.send(DoorkeeperHub.config.doorkeeper_token_name) end def company @company ||= current_user.companies.active.find_by(DoorkeeperHub.config.doorkeeper_token_name => params[DoorkeeperHub.token_param]) || raise(ActionController::RoutingError.new('Not Found')) end end end