theseus/app/controllers/public/application_controller.rb
2025-12-29 10:39:37 -05:00

51 lines
1.5 KiB
Ruby

module Public
class ApplicationController < ActionController::Base
include Pundit::Authorization
layout "public"
before_action do
Sentry.set_user(id: current_public_user&.id, email: current_public_user&.email)
Sentry.set_context("impersonation", {
real_user_id: current_user&.id,
real_user_email: current_user&.email,
impersonator_user_id: session[:public_impersonator_user_id],
})
end
helper_method :current_user, :current_public_user, :public_user_signed_in?, :authenticate_public_user!, :impersonating?
# DO NOT USE (in most cases :-P)
def current_user
@current_user ||= ::User.find_by(id: session[:user_id]) if session[:user_id]
end
def current_public_user
@current_public_user ||= Public::User.find_by(id: session[:public_user_id]) if session[:public_user_id]
end
def public_user_signed_in?
!!current_public_user
end
def authenticate_public_user!
unless public_user_signed_in?
redirect_to public_login_path, alert: ("you need to be logged in!" unless request.env["PATH_INFO"] == "/")
end
end
def impersonating?
!!session[:public_impersonator_user_id]
end
rescue_from Pundit::NotAuthorizedError do |e|
flash[:error] = "hey, you can't do that!"
redirect_to public_root_path
end
rescue_from ActiveRecord::RecordNotFound do |e|
flash[:error] = "sorry, couldn't find that page!"
redirect_to public_root_path
end
end
end