class Lato::ApplicationController
def catch_exceptions
def catch_exceptions yield rescue => exception Rails.logger.error(exception.message) Rails.logger.error(exception.backtrace.join("\n")) if exception.is_a?(ActiveRecord::RecordNotFound) respond_to_with_not_found else respond_to_with_error(exception) end end
def error
def error respond_to_with_error end
def index
def index session_root_path = Lato.config.session_root_path ? main_app.send(Lato.config.session_root_path) : lato.account_path redirect_to @session.valid? ? session_root_path : lato.authentication_signin_path end
def not_found
def not_found respond_to_with_not_found end
def offline
def offline respond_to_with_offline end
def override_request_remote_ip
This method is used to get the real ip of the user when the application is behind a proxy.
This method override the request remote ip with the X-Forwarded-For header if exists.
def override_request_remote_ip request.remote_ip = request.headers['X-Forwarded-For'] if request.headers['X-Forwarded-For'] end
def respond_to_redirect_same_page(notice = nil)
def respond_to_redirect_same_page(notice = nil) respond_to do |format| format.html { redirect_to request.referer, notice: notice } format.json { render json: {} } end end
def respond_to_with_error(exception = nil)
def respond_to_with_error(exception = nil) @exception = Rails.env.production? ? nil : exception hide_sidebar respond_to do |format| format.html { render 'lato/errors/error', status: :internal_server_error } format.json { render json: { error: @exception&.message || 'Internal server error' }, status: :internal_server_error } end end
def respond_to_with_not_found
def respond_to_with_not_found hide_sidebar respond_to do |format| format.html { render 'lato/errors/not_found', status: :not_found } format.json { render json: { error: 'Resource not found' }, status: :not_found } end end
def respond_to_with_offline
def respond_to_with_offline hide_sidebar respond_to do |format| format.html { render 'lato/errors/offline', status: :service_unavailable } format.json { render json: { error: 'Network not available' }, status: :service_unavailable } end end
def set_default_locale
This method set the default locale for the application.
def set_default_locale return unless @session.valid? I18n.locale = @session.user.locale || I18n.default_locale end
def switch_locale
def switch_locale I18n.locale = params[:locale] @session.user.update(locale: params[:locale]) if @session.valid? respond_to_redirect_same_page end