2015-07-17 22:04:53 -07:00
|
|
|
require 'ipaddr'
|
|
|
|
|
2010-05-14 15:12:31 -07:00
|
|
|
class ApplicationController < ActionController::Base
|
2012-12-29 22:46:36 -08:00
|
|
|
include FragmentLocalization
|
|
|
|
|
2010-05-14 15:12:31 -07:00
|
|
|
protect_from_forgery
|
2011-06-27 12:33:34 -07:00
|
|
|
|
2023-08-03 17:40:52 -07:00
|
|
|
helper_method :current_user, :user_signed_in?
|
2012-12-29 22:46:36 -08:00
|
|
|
|
2023-08-02 16:05:02 -07:00
|
|
|
before_action :set_locale
|
2011-06-27 12:33:34 -07:00
|
|
|
|
2023-08-06 17:26:56 -07:00
|
|
|
before_action :configure_permitted_parameters, if: :devise_controller?
|
2023-08-06 18:24:23 -07:00
|
|
|
before_action :save_return_to_path,
|
|
|
|
if: ->(c) { c.controller_name == 'sessions' && c.action_name == 'new' }
|
2023-08-06 17:26:56 -07:00
|
|
|
|
2023-10-27 19:38:49 -07:00
|
|
|
# Enable profiling tools if logged in as admin.
|
|
|
|
before_action do
|
|
|
|
if current_user && current_user.admin?
|
|
|
|
Rack::MiniProfiler.authorize_request
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2023-08-03 17:40:52 -07:00
|
|
|
def authenticate_user!
|
2023-08-06 15:52:05 -07:00
|
|
|
redirect_to(new_auth_user_session_path) unless user_signed_in?
|
2011-07-12 21:25:14 -07:00
|
|
|
end
|
|
|
|
|
2011-07-26 17:27:23 -07:00
|
|
|
def authorize_user!
|
|
|
|
raise AccessDenied unless user_signed_in? && current_user.id == params[:user_id].to_i
|
|
|
|
end
|
|
|
|
|
2023-08-03 17:40:52 -07:00
|
|
|
def current_user
|
2023-08-06 15:52:05 -07:00
|
|
|
if auth_user_signed_in?
|
|
|
|
User.where(remote_id: current_auth_user.id).first
|
|
|
|
else
|
|
|
|
nil
|
|
|
|
end
|
2023-08-03 17:40:52 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
def user_signed_in?
|
2023-08-06 15:52:05 -07:00
|
|
|
auth_user_signed_in?
|
2011-06-27 12:33:34 -07:00
|
|
|
end
|
2012-06-05 09:44:11 -07:00
|
|
|
|
2012-12-29 22:46:36 -08:00
|
|
|
def infer_locale
|
2013-01-11 09:07:11 -08:00
|
|
|
return params[:locale] if valid_locale?(params[:locale])
|
|
|
|
return cookies[:locale] if valid_locale?(cookies[:locale])
|
|
|
|
Rails.logger.debug "Preferred languages: #{http_accept_language.user_preferred_languages}"
|
2013-01-26 22:35:22 -08:00
|
|
|
http_accept_language.language_region_compatible_from(I18n.public_locales.map(&:to_s)) ||
|
2013-01-11 09:07:11 -08:00
|
|
|
I18n.default_locale
|
2012-12-29 22:46:36 -08:00
|
|
|
end
|
|
|
|
|
2012-06-05 09:44:11 -07:00
|
|
|
def not_found(record_name='record')
|
|
|
|
raise ActionController::RoutingError.new("#{record_name} not found")
|
|
|
|
end
|
2011-07-15 13:15:57 -07:00
|
|
|
|
|
|
|
class AccessDenied < StandardError;end
|
|
|
|
|
|
|
|
rescue_from AccessDenied, :with => :on_access_denied
|
|
|
|
|
|
|
|
def on_access_denied
|
2023-08-02 17:55:32 -07:00
|
|
|
render template: 'public/403.html', :layout => false, :status => :forbidden
|
2011-07-15 13:15:57 -07:00
|
|
|
end
|
2011-07-20 09:39:18 -07:00
|
|
|
|
2011-07-20 12:16:22 -07:00
|
|
|
def redirect_back!(default=:back)
|
|
|
|
redirect_to(params[:return_to] || default)
|
|
|
|
end
|
2012-12-29 22:46:36 -08:00
|
|
|
|
|
|
|
def set_locale
|
|
|
|
I18n.locale = infer_locale || I18n.default_locale
|
|
|
|
end
|
2013-01-11 09:07:11 -08:00
|
|
|
|
|
|
|
def valid_locale?(locale)
|
2013-01-17 20:16:34 -08:00
|
|
|
locale && I18n.usable_locales.include?(locale.to_sym)
|
2013-01-11 09:07:11 -08:00
|
|
|
end
|
2023-08-06 17:26:56 -07:00
|
|
|
|
|
|
|
def configure_permitted_parameters
|
|
|
|
# Devise will automatically permit the authentication key (username) and
|
|
|
|
# the password, but we need to let the email field through ourselves.
|
|
|
|
devise_parameter_sanitizer.permit(:sign_up, keys: [:email])
|
|
|
|
devise_parameter_sanitizer.permit(:account_update, keys: [:email])
|
|
|
|
end
|
2023-08-06 18:24:23 -07:00
|
|
|
|
|
|
|
def save_return_to_path
|
|
|
|
if params[:return_to]
|
|
|
|
Rails.logger.debug "Saving return_to path: #{params[:return_to].inspect}"
|
|
|
|
session[:devise_return_to] = params[:return_to]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def after_sign_in_path_for(user)
|
|
|
|
return_to = session.delete(:devise_return_to)
|
|
|
|
Rails.logger.debug "Using return_to path: #{return_to.inspect}"
|
|
|
|
return_to || root_path
|
|
|
|
end
|
|
|
|
|
|
|
|
def after_sign_out_path_for(user)
|
|
|
|
return_to = params[:return_to]
|
|
|
|
Rails.logger.debug "Using return_to path: #{return_to.inspect}"
|
|
|
|
return_to || root_path
|
|
|
|
end
|
2010-05-14 15:12:31 -07:00
|
|
|
end
|
2011-06-27 12:33:34 -07:00
|
|
|
|