Files
astuto/app/controllers/application_controller.rb

109 lines
3.1 KiB
Ruby
Raw Normal View History

2024-03-24 12:54:02 +01:00
require 'uri'
2019-08-18 14:51:37 +02:00
class ApplicationController < ActionController::Base
2024-03-24 12:54:02 +01:00
include ApplicationHelper
2022-06-10 12:03:33 +02:00
include Pundit::Authorization
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
2024-09-06 20:27:15 +02:00
before_action :configure_devise_permitted_parameters, if: :devise_controller?
before_action :check_tenant_is_private, if: :should_check_tenant_is_private?
2022-07-18 10:47:54 +02:00
prepend_before_action :load_tenant_data
2019-08-19 15:45:44 +02:00
# Override Devise after sign in path
def after_sign_in_path_for(resource)
if resource.admin? && resource.sign_in_count == 1
root_path(tour: true)
else
super
end
end
# Override Devise after sign out path
def after_sign_out_path_for(resource_or_scope)
if Current.tenant.tenant_setting.is_private
new_user_session_path
else
super
end
end
2019-08-19 15:45:44 +02:00
protected
2024-09-06 20:27:15 +02:00
def configure_devise_permitted_parameters
additional_permitted_parameters = [:full_name, :notifications_enabled, :invitation_token]
devise_parameter_sanitizer.permit(:sign_up, keys: additional_permitted_parameters)
devise_parameter_sanitizer.permit(:account_update, keys: additional_permitted_parameters)
2019-08-19 15:45:44 +02:00
end
2019-08-22 17:09:13 +02:00
2022-07-18 10:47:54 +02:00
def load_tenant_data
# Set default locale
I18n.locale = I18n.default_locale
2024-03-24 12:54:02 +01:00
current_tenant = get_tenant_from_request(request)
return unless current_tenant
2022-07-18 10:47:54 +02:00
2024-03-24 12:54:02 +01:00
if current_tenant.status == "pending" and controller_name != "confirmation" and action_name != "show"
redirect_to pending_tenant_path; return
end
2022-07-18 10:47:54 +02:00
2024-03-24 12:54:02 +01:00
if current_tenant.status == "blocked"
redirect_to blocked_tenant_path; return
2022-07-18 10:47:54 +02:00
end
Current.tenant = current_tenant
# Load tenant data
@tenant = Current.tenant_or_raise!
@tenant_setting = TenantSetting.first_or_create
2024-05-03 18:11:07 +02:00
@tenant_billing = TenantBilling.first_or_create
@boards = Board.select(:id, :name, :slug).order(order: :asc)
2022-07-18 10:47:54 +02:00
# Set tenant locale
2022-07-18 10:47:54 +02:00
I18n.locale = @tenant.locale
2019-08-22 17:09:13 +02:00
end
2022-06-10 12:03:33 +02:00
def load_oauths
2024-01-22 14:45:48 +01:00
@o_auths = OAuth
.include_defaults
.where(is_enabled: true)
.order(created_at: :asc)
end
2024-05-03 18:11:07 +02:00
def check_tenant_subscription
return if Current.tenant.tenant_billing.has_active_subscription?
render json: {
error: 'Your subscription has expired. Please renew it to continue using the service.'
}, status: :forbidden
end
def check_tenant_is_private
return unless Current.tenant.tenant_setting.is_private
return if user_signed_in?
flash[:alert] = t('errors.not_logged_in')
redirect_to new_user_session_path
end
2022-06-10 12:03:33 +02:00
private
def user_not_authorized
logger.error { "User not authorized: #{user_signed_in? ? current_user.inspect : 'unlogged user'}" }
2022-06-10 12:03:33 +02:00
render json: {
2022-07-23 13:32:40 +02:00
error: t('errors.unauthorized')
2022-06-10 12:03:33 +02:00
}, status: :unauthorized
end
def should_check_tenant_is_private?
controller_name == 'posts' ||
controller_name == 'boards' ||
controller_name == 'comments' ||
(controller_name == 'static_pages' && action_name == 'root') ||
(controller_name == 'static_pages' && action_name == 'roadmap')
end
2019-08-18 14:51:37 +02:00
end