class ApplicationController < ActionController::Base include Pundit protect_from_forgery MissingTOSAcceptance = Class.new(Exception) OutadedTOSAcceptance = Class.new(Exception) before_action :set_locale before_action :check_for_terms_acceptance!, unless: :devise_controller? before_action :configure_permitted_parameters, if: :devise_controller? before_action :set_current_organization, :store_user_location rescue_from MissingTOSAcceptance, OutadedTOSAcceptance do redirect_to terms_path end rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized rescue_from ActiveRecord::RecordNotFound, with: :resource_not_found helper_method :current_organization, :admin?, :superadmin? def switch_lang redirect_back(fallback_location: root_path) end private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) end def set_current_organization if org_id = session[:current_organization_id] @current_organization = Organization.find(org_id) elsif current_user @current_organization = current_user.organizations.first end end def store_user_location if request.get? && !request.xhr? && is_navigational_format? && !devise_controller? store_location_for(:user, request.fullpath) end end def after_sign_in_path_for(user) stored_location = stored_location_for(user) if stored_location.present? stored_location elsif user.members.present? users_path else organizations_path end end def check_for_terms_acceptance! if user_signed_in? accepted = current_user.terms_accepted_at if accepted.nil? raise MissingTOSAcceptance elsif accepted < Document.terms_and_conditions.updated_at raise OutadedTOSAcceptance end end end def current_organization @current_organization ||= current_user.try(:organizations).try(:first) end def current_member @current_member ||= current_user.as_member_of(current_organization) if current_user end def pundit_user current_member end def admin? current_user.try :manages?, current_organization end def superadmin? current_user.try :superuser? end alias :superuser? :superadmin? def authenticate_superuser! superuser? || redirect_to(root_path) end def options_locale current_user.try(:locale) || session[:locale] || http_accept_language.compatible_language_from(I18n.available_locales) || I18n.default_locale end def set_locale I18n.locale = if params[:locale] current_user.update(locale: params[:locale]) if current_user params[:locale] else options_locale end session[:locale] = I18n.locale end def user_not_authorized flash[:error] = "You are not authorized to perform this action." redirect_to(request.referrer || root_path) end def resource_not_found render 'errors/not_found', status: 404 end def member_should_exist_and_be_active if !current_member redirect_to organizations_path elsif !current_member.active flash[:error] = I18n.t('users.index.account_deactivated') redirect_to select_organization_path end end def user_should_be_confirmed return if !current_user || current_user.confirmed? redirect_to please_confirm_users_path end end