demarches-normaliennes/app/controllers/api/v2/base_controller.rb

50 lines
1.3 KiB
Ruby
Raw Normal View History

2018-11-19 21:18:17 +01:00
class API::V2::BaseController < ApplicationController
# Disable forgery protection for API controllers when the request is authenticated
# with a bearer token. Otherwise the session will be nullified and we'll lose curent_user
protect_from_forgery with: :null_session, unless: :token?
skip_before_action :setup_tracking
prepend_before_action :authenticate_administrateur_from_token
2018-11-19 21:18:17 +01:00
private
def context
2022-11-30 10:14:23 +01:00
# new token
if api_token.present?
{ token: authorization_bearer_token, administrateur_id: api_token.administrateur.id }
# web interface (/graphql) give current_administrateur
elsif current_administrateur.present?
{ administrateur_id: current_administrateur.id }
# old token
else
2022-11-30 10:14:23 +01:00
{ token: authorization_bearer_token }
end
end
def token?
authorization_bearer_token.present?
2018-11-19 21:18:17 +01:00
end
2022-11-30 10:14:23 +01:00
def authenticate_administrateur_from_token
if api_token.present?
@current_user = api_token.administrateur.user
end
end
def api_token
if @api_token.nil?
@api_token = APIToken.find_and_verify(authorization_bearer_token) || false
end
@api_token
end
2018-11-19 21:18:17 +01:00
def authorization_bearer_token
@authorization_bearer_token ||= begin
received_token = nil
authenticate_with_http_token do |token, _options|
received_token = token
end
received_token
end
end
2018-11-19 21:18:17 +01:00
end