mirror of
https://github.com/System-End/theseus.git
synced 2026-04-19 22:15:09 +00:00
51 lines
1.5 KiB
Ruby
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
|