wedding-planner/app/controllers/application_controller.rb

71 lines
1.8 KiB
Ruby
Raw Permalink Normal View History

2025-01-13 20:38:47 +00:00
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
2024-10-27 21:42:45 +00:00
# frozen_string_literal: true
2024-07-11 18:42:31 +02:00
class ApplicationController < ActionController::Base
2024-12-02 09:04:48 +01:00
set_current_tenant_through_filter
before_action :set_tenant
2024-11-30 11:03:29 +01:00
before_action :authenticate_user!
after_action :set_csrf_cookie
skip_before_action :verify_authenticity_token, if: :development_swagger?
rescue_from ActiveRecord::RecordInvalid do |exception|
render json: {
message: 'Record invalid',
errors: exception.record.errors.full_messages
}, status: :unprocessable_entity
end
rescue_from ActionController::ParameterMissing do |exception|
render json: {
message: 'Parameter missing',
errors: [exception.message]
}, status: :bad_request
end
rescue_from ActiveRecord::RecordNotFound do |exception|
render json: {
message: 'Record not found',
errors: [exception.message]
}, status: :not_found
end
private
def validate_captcha!
Rails.logger.info("Captcha params: #{captcha_params}")
return if LibreCaptcha.new.valid?(id: captcha_params[:id], answer: captcha_params[:answer])
render json: { error: 'Incorrect CAPTCHA solution' }, status: :unprocessable_entity
end
def captcha_params
params.expect(captcha: %i[id answer])
end
def default_url_options(options = {})
options.merge(path_params: { slug: ActsAsTenant.current_tenant&.slug })
end
def set_tenant
2024-12-02 09:04:48 +01:00
set_current_tenant(Wedding.find_by!(slug: params[:slug]))
end
def development_swagger?
Rails.env.test? ||
(Rails.env.development? && request.headers['referer']&.include?('/api-docs/index.html'))
end
def set_csrf_cookie
cookies['csrf-token'] = {
value: form_authenticity_token,
2024-12-08 00:48:42 +01:00
secure: false,
same_site: :strict
}
end
2024-07-11 18:42:31 +02:00
end