Files
docuseal/app/controllers/api/api_base_controller.rb
T

82 lines
2.3 KiB
Ruby
Raw Normal View History

2023-05-21 17:59:36 +03:00
# frozen_string_literal: true
module Api
class ApiBaseController < ActionController::API
include ActiveStorage::SetCurrent
2023-10-01 01:57:47 +03:00
include Pagy::Backend
DEFAULT_LIMIT = 10
MAX_LIMIT = 100
2024-01-20 23:53:14 +02:00
impersonates :user, with: ->(uuid) { User.find_by(uuid:) }
2023-10-01 01:57:47 +03:00
wrap_parameters false
2023-05-21 17:59:36 +03:00
before_action :authenticate_user!
2023-09-17 00:45:57 +03:00
check_authorization
2024-01-19 03:03:45 +02:00
rescue_from Params::BaseValidator::InvalidParameterError do |e|
render json: { error: e.message }, status: :unprocessable_entity
end
2024-03-16 23:19:47 +02:00
rescue_from RateLimit::LimitApproached do |e|
Rollbar.error(e) if defined?(Rollbar)
render json: { error: 'Too many requests' }, status: :too_many_requests
end
2023-09-17 00:45:57 +03:00
if Rails.env.production?
rescue_from CanCan::AccessDenied do |e|
render json: { error: e.message }, status: :forbidden
end
2023-12-27 11:28:41 +02:00
rescue_from JSON::ParserError do |e|
2024-02-16 19:44:59 +02:00
Rollbar.warning(e) if defined?(Rollbar)
2023-12-27 11:28:41 +02:00
render json: { error: "JSON parse error: #{e.message}" }, status: :unprocessable_entity
end
2023-09-17 00:45:57 +03:00
end
2023-05-21 17:59:36 +03:00
private
2023-10-01 01:57:47 +03:00
def paginate(relation)
result = relation.order(id: :desc)
2023-11-06 13:18:03 +02:00
.limit([params.fetch(:limit, DEFAULT_LIMIT).to_i, MAX_LIMIT].min)
2023-10-01 01:57:47 +03:00
2024-03-06 18:56:57 +02:00
result = result.where(id: ...params[:after].to_i) if params[:after].present?
result = result.where(id: (params[:before].to_i + 1)...) if params[:before].present?
2023-10-01 01:57:47 +03:00
result
end
2023-12-26 01:19:28 +02:00
def authenticate_user!
2024-04-15 19:58:24 +03:00
render json: { error: 'Not authenticated' }, status: :unauthorized unless current_user
end
2023-12-26 01:19:28 +02:00
2024-04-15 19:58:24 +03:00
def current_user
super || @current_user ||=
if request.headers['X-Auth-Token'].present?
sha256 = Digest::SHA256.hexdigest(request.headers['X-Auth-Token'])
2023-12-26 01:19:28 +02:00
2024-04-15 19:58:24 +03:00
User.joins(:access_token).active.find_by(access_token: { sha256: })
end
2023-12-26 01:19:28 +02:00
end
2023-05-21 17:59:36 +03:00
def current_account
current_user&.account
end
2024-02-20 18:24:57 +02:00
2024-04-20 15:47:48 +03:00
def set_noindex_headers
headers['X-Robots-Tag'] = 'noindex'
end
2024-02-20 18:24:57 +02:00
def set_cors_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
headers['Access-Control-Allow-Headers'] = '*'
headers['Access-Control-Max-Age'] = '1728000'
headers['Access-Control-Allow-Credentials'] = true
end
2023-05-21 17:59:36 +03:00
end
end