2014-08-01 02:23:47 -07:00
|
|
|
class ApplicationController < ActionController::Base
|
2022-11-18 13:50:35 -08:00
|
|
|
include Pundit::Authorization
|
2014-08-01 02:23:47 -07:00
|
|
|
# Prevent CSRF attacks by raising an exception.
|
|
|
|
# For APIs, you may want to use :null_session instead.
|
|
|
|
protect_from_forgery with: :exception
|
2015-05-05 09:09:26 -07:00
|
|
|
|
2021-12-28 10:19:05 -08:00
|
|
|
before_action :sentry_user_context
|
2020-04-18 16:45:50 -07:00
|
|
|
before_action :configure_permitted_parameters, if: :devise_controller?
|
2023-01-05 06:20:24 -08:00
|
|
|
around_action :switch_locale
|
2020-04-18 16:45:50 -07:00
|
|
|
before_action :banned?
|
2020-04-19 13:38:21 -07:00
|
|
|
before_action :find_active_announcements
|
2015-01-12 13:44:13 -08:00
|
|
|
|
2015-05-25 20:31:06 -07:00
|
|
|
# check if user wants to read
|
2023-01-06 04:37:22 -08:00
|
|
|
def switch_locale(&)
|
2023-01-05 06:20:24 -08:00
|
|
|
locale = params[:lang] || current_user&.locale || cookies[:lang] || "en"
|
|
|
|
if params[:lang] && current_user.present?
|
|
|
|
current_user.locale = locale
|
|
|
|
current_user.save
|
|
|
|
end
|
2015-07-04 00:31:46 -07:00
|
|
|
|
2023-01-05 06:20:24 -08:00
|
|
|
cookies[:lang] = locale
|
|
|
|
|
2023-01-06 01:01:14 -08:00
|
|
|
I18n.with_locale(locale, &)
|
2015-05-25 20:26:40 -07:00
|
|
|
end
|
|
|
|
|
2015-05-25 20:31:06 -07:00
|
|
|
# check if user got hit by the banhammer of doom
|
2015-01-12 13:44:13 -08:00
|
|
|
def banned?
|
|
|
|
if current_user.present? && current_user.banned?
|
|
|
|
name = current_user.screen_name
|
|
|
|
# obligatory '2001: A Space Odyssey' reference
|
2022-07-30 07:29:12 -07:00
|
|
|
flash[:notice] = t("user.sessions.create.banned", name:)
|
2021-12-29 15:20:09 -08:00
|
|
|
current_ban = current_user.bans.current.first
|
2023-12-10 16:33:27 -08:00
|
|
|
flash[:notice] += "\n#{t('user.sessions.create.reason', reason: current_ban.reason)}" unless current_ban&.reason&.empty?
|
|
|
|
|
|
|
|
flash[:notice] += if current_ban&.permanent?
|
|
|
|
"\n#{t('user.sessions.create.permanent')}"
|
|
|
|
else
|
|
|
|
# TODO: format banned_until
|
|
|
|
"\n#{t('user.sessions.create.until', time: current_ban.expires_at)}"
|
|
|
|
end
|
2023-12-10 16:20:02 -08:00
|
|
|
|
2015-01-12 13:44:13 -08:00
|
|
|
sign_out current_user
|
|
|
|
redirect_to new_user_session_path
|
|
|
|
end
|
|
|
|
end
|
2014-12-28 12:14:10 -08:00
|
|
|
|
2020-04-19 13:38:21 -07:00
|
|
|
def find_active_announcements
|
|
|
|
@active_announcements ||= Announcement.find_active
|
|
|
|
end
|
|
|
|
|
2014-12-28 12:14:10 -08:00
|
|
|
include ApplicationHelper
|
|
|
|
|
2014-08-01 06:27:08 -07:00
|
|
|
protected
|
|
|
|
|
|
|
|
def configure_permitted_parameters
|
2019-03-29 14:37:10 -07:00
|
|
|
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:screen_name, :email, :password, :password_confirmation, :remember_me) }
|
|
|
|
devise_parameter_sanitizer.permit(:sign_in) { |u| u.permit(:login, :screen_name, :email, :password, :remember_me) }
|
|
|
|
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:screen_name, :email, :password, :password_confirmation, :current_password) }
|
2014-08-01 06:27:08 -07:00
|
|
|
end
|
2021-12-28 10:19:05 -08:00
|
|
|
|
|
|
|
def sentry_user_context
|
|
|
|
if current_user.present?
|
|
|
|
Sentry.set_user({ id: current_user.id })
|
|
|
|
else
|
2023-02-04 13:31:53 -08:00
|
|
|
Sentry.set_user({ ip_address: request.remote_ip })
|
2021-12-28 10:19:05 -08:00
|
|
|
end
|
|
|
|
end
|
2014-08-01 02:23:47 -07:00
|
|
|
end
|