Module: Symphonia::ControllerExtensions
- Extended by:
- ActiveSupport::Concern
- Included in:
- ApplicationController
- Defined in:
- lib/symphonia/controller_extensions.rb
Defined Under Namespace
Classes: Unauthorized
Instance Method Summary collapse
- #admin_require ⇒ Object (also: #require_admin)
- #authorize ⇒ Object
- #back_url ⇒ Object
- #current_user ⇒ Object
- #current_user_session ⇒ Object
- #handle_unverified_request ⇒ Object
-
#login_require(_format = nil) ⇒ Object
(also: #require_login, #require_user)
protected.
- #menu_item(item = nil) ⇒ Object
- #redirect_back_or_default(default, options = {}) ⇒ Object
-
#redirect_to_referer_or(*args, &block) ⇒ Object
Redirects to the request referer if present, redirects to args or call block otherwise.
- #render_403 ⇒ Object
- #render_404 ⇒ Object
-
#render_api_head(status) ⇒ Object
Renders a head API response.
-
#render_api_ok ⇒ Object
Renders a 200 response for successful updates or deletions via the API.
- #set_default_locale ⇒ Object
-
#set_locale ⇒ Object
private.
- #store_location ⇒ Object
Instance Method Details
#admin_require ⇒ Object Also known as: require_admin
90 91 92 93 94 95 96 97 |
# File 'lib/symphonia/controller_extensions.rb', line 90 def admin_require return unless login_require unless current_user.admin? render_403 false end end |
#authorize ⇒ Object
145 146 147 148 149 150 |
# File 'lib/symphonia/controller_extensions.rb', line 145 def return true if Symphonia::User.current.admin? raise Unauthorized if Symphonia::User.current.logged_in? login_require end |
#back_url ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/symphonia/controller_extensions.rb', line 25 def back_url url = params[:back_url].presence if url.nil? && (referer = request.env['HTTP_REFERER'].presence) url = CGI.unescape(referer.to_s) end url end |
#current_user ⇒ Object
138 139 140 141 142 143 |
# File 'lib/symphonia/controller_extensions.rb', line 138 def current_user return (Symphonia::User.current ||= @current_user) if defined?(@current_user) @current_user = current_user_session&.user Symphonia::User.current = @current_user || Symphonia::User::Anonymous.new end |
#current_user_session ⇒ Object
132 133 134 135 136 |
# File 'lib/symphonia/controller_extensions.rb', line 132 def current_user_session return @current_user_session if defined?(@current_user_session) @current_user_session = UserSession.find end |
#handle_unverified_request ⇒ Object
152 153 154 155 156 157 158 159 |
# File 'lib/symphonia/controller_extensions.rb', line 152 def handle_unverified_request return true if current_user&.logged_in? && request.format&.json? current_user_session&.destroy raise ActionController::InvalidAuthenticityToken # redirect_to main_app.root_url end |
#login_require(_format = nil) ⇒ Object Also known as: require_login, require_user
protected
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/symphonia/controller_extensions.rb', line 70 def login_require(_format = nil) if current_user.nil? || !current_user.logged_in? respond_to do |format| format.html do store_location redirect_to symphonia.login_path, flash: { error: t(:text_login_require) } end format.json do render json: { errors: 'You must be logged in to access this endpoint' }, status: :unauthorized end format.any { head :unauthorized } end return false end true end |
#menu_item(item = nil) ⇒ Object
128 129 130 |
# File 'lib/symphonia/controller_extensions.rb', line 128 def (item = nil) @menu_item = (item || controller_name) end |
#redirect_back_or_default(default, options = {}) ⇒ Object
165 166 167 168 |
# File 'lib/symphonia/controller_extensions.rb', line 165 def redirect_back_or_default(default, = {}) ||= {} redirect_to(params[:back_url] || default, ) end |
#redirect_to_referer_or(*args, &block) ⇒ Object
Redirects to the request referer if present, redirects to args or call block otherwise.
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/symphonia/controller_extensions.rb', line 34 def redirect_to_referer_or(*args, &block) redirect_to :back rescue ::ActionController::RedirectBackError if args.any? redirect_to(*args) elsif block_given? block.call else raise "#redirect_to_referer_or takes arguments or a block" end end |
#render_403 ⇒ Object
101 102 103 104 105 106 107 108 109 |
# File 'lib/symphonia/controller_extensions.rb', line 101 def render_403 respond_to do |format| format.html { render template: 'common/403', message: :notice_not_authorized, status: :forbidden } format.js do render plain: "alert('#{t :text_access_deny}')", message: :notice_not_authorized, status: :forbidden end format.any { head 403, message: :notice_not_authorized } end end |
#render_404 ⇒ Object
111 112 113 114 115 116 |
# File 'lib/symphonia/controller_extensions.rb', line 111 def render_404 respond_to do |format| format.html { render template: 'common/404', message: :notice_page_not_found, status: :not_found } format.any { head 404, message: :not_found } end end |
#render_api_head(status) ⇒ Object
Renders a head API response
124 125 126 |
# File 'lib/symphonia/controller_extensions.rb', line 124 def render_api_head(status) head status end |
#render_api_ok ⇒ Object
Renders a 200 response for successful updates or deletions via the API
119 120 121 |
# File 'lib/symphonia/controller_extensions.rb', line 119 def render_api_ok render_api_head :ok end |
#set_default_locale ⇒ Object
62 63 64 65 66 |
# File 'lib/symphonia/controller_extensions.rb', line 62 def set_default_locale return unless (enforce_default = Symphonia.config.default_locale) I18n.locale = enforce_default end |
#set_locale ⇒ Object
private
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/symphonia/controller_extensions.rb', line 48 def set_locale params_locale = params.fetch(:locale, nil).presence params_locale ||= session[:locale].presence params_locale ||= request.env['HTTP_ACCEPT_LANGUAGE'].to_s.split(',').collect { |l| l.scan(/^[a-z]{2}/) }.flatten client_lang = Array(params_locale).compact client_lang.unshift current_user.language if current_user.language @client_lang = client_lang.detect { |l| I18n.available_locales.include?(l.to_sym) } I18n.locale = (@client_lang || I18n.default_locale) session[:locale] = I18n.locale logger.debug "* Locale set to '#{I18n.locale}'" end |
#store_location ⇒ Object
161 162 163 |
# File 'lib/symphonia/controller_extensions.rb', line 161 def store_location session[:return_to] = request.url end |