X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/64146b4f3614854e6a0f8430f27261fe0a0ca26c..901c29a82076d6c3079216254ea1f70cee28cced:/app/controllers/application_controller.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f35493b26..ad91b3a3b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,8 +1,11 @@ class ApplicationController < ActionController::Base include SessionPersistence + # check_authorization protect_from_forgery :with => :exception + rescue_from CanCan::AccessDenied, :with => :deny_access + before_action :fetch_body around_action :better_errors_allow_inline, :if => proc { Rails.env.development? } @@ -17,16 +20,16 @@ class ApplicationController < ActionController::Base session.delete(:user) session_expires_automatically - redirect_to :controller => "user", :action => "suspended" + redirect_to :controller => "users", :action => "suspended" # don't allow access to any auth-requiring part of the site unless # the new CTs have been seen (and accept/decline chosen). elsif !current_user.terms_seen && flash[:skip_terms].nil? flash[:notice] = t "user.terms.you need to accept or decline" if params[:referer] - redirect_to :controller => "user", :action => "terms", :referer => params[:referer] + redirect_to :controller => "users", :action => "terms", :referer => params[:referer] else - redirect_to :controller => "user", :action => "terms", :referer => request.fullpath + redirect_to :controller => "users", :action => "terms", :referer => request.fullpath end end elsif session[:token] @@ -41,7 +44,7 @@ class ApplicationController < ActionController::Base def require_user unless current_user if request.get? - redirect_to :controller => "user", :action => "login", :referer => request.fullpath + redirect_to :controller => "users", :action => "login", :referer => request.fullpath else head :forbidden end @@ -386,11 +389,11 @@ class ApplicationController < ActionController::Base ## # render a "no such user" page def render_unknown_user(name) - @title = t "user.no_such_user.title" + @title = t "users.no_such_user.title" @not_found_user = name respond_to do |format| - format.html { render :template => "user/no_such_user", :status => :not_found } + format.html { render :template => "users/no_such_user", :status => :not_found } format.all { head :not_found } end end @@ -466,6 +469,23 @@ class ApplicationController < ActionController::Base raise end + def current_ability + Ability.new(current_user).merge(granted_capability) + end + + def granted_capability + Capability.new(current_user, current_token) + end + + def deny_access(_exception) + if current_user + set_locale + report_error t("oauth.permissions.missing"), :forbidden + else + require_user + end + end + private # extract authorisation credentials from headers, returns user = nil if none