diff options
author | Rhenium <rhenium@rhe.jp> | 2014-03-11 21:23:02 +0900 |
---|---|---|
committer | Rhenium <rhenium@rhe.jp> | 2014-03-11 21:23:02 +0900 |
commit | 7c392ca7735a36948515a392b544ace60a242838 (patch) | |
tree | 7d887731c549decf33d23018268e5e974b16a2cd /app | |
parent | 71c2069595618cb048c8e04c577902c08fc20a57 (diff) | |
download | aclog-7c392ca7735a36948515a392b544ace60a242838.tar.gz |
reorganize exceptions
Diffstat (limited to 'app')
-rw-r--r-- | app/api/api.rb | 8 | ||||
-rw-r--r-- | app/api/api_deprecated.rb | 2 | ||||
-rw-r--r-- | app/api/api_tweets.rb | 6 | ||||
-rw-r--r-- | app/api/api_users.rb | 2 | ||||
-rw-r--r-- | app/api/concerns/twitter_oauth_echo_authentication.rb | 4 | ||||
-rw-r--r-- | app/controllers/errors_controller.rb | 22 | ||||
-rw-r--r-- | app/controllers/settings_controller.rb | 2 | ||||
-rw-r--r-- | app/models/user.rb | 2 |
8 files changed, 18 insertions, 30 deletions
diff --git a/app/api/api.rb b/app/api/api.rb index 5eb0711..353a99e 100644 --- a/app/api/api.rb +++ b/app/api/api.rb @@ -5,13 +5,13 @@ class Api < Grape::API { error: { message: message } }.to_json end - rescue_from ActiveRecord::RecordNotFound, Aclog::Exceptions::NotFound do + rescue_from ActiveRecord::RecordNotFound, Aclog::Exceptions::NotFound, rescue_subclasses: true do error_response message: "That page does not exists.", status: 404 end - rescue_from Aclog::Exceptions::Forbidden do + rescue_from Aclog::Exceptions::Forbidden, rescue_subclasses: true do error_response message: "You do not have permission to access this page.", status: 403 end - rescue_from Aclog::Exceptions::OAuthEchoError do + rescue_from Aclog::Exceptions::OAuthEchoError, rescue_subclasses: true do error_response message: "Invalid OAuth Echo data.", status: 401 end @@ -27,8 +27,6 @@ class Api < Grape::API User.find(user_id) end end - rescue Aclog::Exceptions::OAuthEchoUnauthorized - raise Aclog::Exceptions::OAuthEchoError, $! end def permitted_to_see?(user_or_tweet) diff --git a/app/api/api_deprecated.rb b/app/api/api_deprecated.rb index 5f325f4..9c0607d 100644 --- a/app/api/api_deprecated.rb +++ b/app/api/api_deprecated.rb @@ -33,7 +33,7 @@ class ApiDeprecated < Grape::API def user @_user ||= begin user = User.find(id: params[:user_id], screen_name: params[:screen_name]) - raise Aclog::Exceptions::Forbidden unless permitted_to_see?(user) + raise Aclog::Exceptions::UserProtected unless permitted_to_see?(user) user end end diff --git a/app/api/api_tweets.rb b/app/api/api_tweets.rb index 72a9c92..f792989 100644 --- a/app/api/api_tweets.rb +++ b/app/api/api_tweets.rb @@ -39,14 +39,14 @@ class ApiTweets < Grape::API def user @_user ||= begin user = User.find(id: params[:user_id], screen_name: params[:screen_name]) - raise Aclog::Exceptions::Forbidden unless permitted_to_see?(user) + raise Aclog::Exceptions::UserProtected unless permitted_to_see?(user) user end end def source_user user = User.find(id: params[:source_user_id], screen_name: params[:source_screen_name]) - raise Aclog::Exceptions::Forbidden unless permitted_to_see?(user) + raise Aclog::Exceptions::UserProtected unless permitted_to_see?(user) user end @@ -66,7 +66,7 @@ class ApiTweets < Grape::API end get "show", rabl: "tweet" do @tweet = Tweet.find(params[:id]) - raise Aclog::Exceptions::Forbidden unless permitted_to_see?(@tweet) + raise Aclog::Exceptions::UserProtected unless permitted_to_see?(@tweet) end desc "Returns Tweets, specified by comma-separated IDs.", example_params: { ids: "43341783446466560,50220624609685505" } diff --git a/app/api/api_users.rb b/app/api/api_users.rb index 9eda640..253bd63 100644 --- a/app/api/api_users.rb +++ b/app/api/api_users.rb @@ -11,7 +11,7 @@ class ApiUsers < Grape::API def user @_user ||= begin user = User.find(id: params[:id] || params[:user_id], screen_name: params[:screen_name]) - raise Aclog::Exceptions::Forbidden unless permitted_to_see?(user) + raise Aclog::Exceptions::UserProtected unless permitted_to_see?(user) user end end diff --git a/app/api/concerns/twitter_oauth_echo_authentication.rb b/app/api/concerns/twitter_oauth_echo_authentication.rb index 224dca6..f0cf53a 100644 --- a/app/api/concerns/twitter_oauth_echo_authentication.rb +++ b/app/api/concerns/twitter_oauth_echo_authentication.rb @@ -7,7 +7,7 @@ module TwitterOauthEchoAuthentication provider = headers["X-Auth-Service-Provider"] credentials = headers["X-Verify-Credentials-Authorization"] unless provider == twitter_provider && credentials - raise Aclog::Exceptions::OAuthEchoUnauthorized, "X-Auth-Service-Provider is invalid" + raise Aclog::Exceptions::OAuthEchoError, "X-Auth-Service-Provider is invalid" end json = open(twitter_provider, "Authorization" => credentials) {|res| @@ -15,7 +15,7 @@ module TwitterOauthEchoAuthentication } json["id"] - rescue Aclog::Exceptions::OAuthEchoUnauthorized + rescue Aclog::Exceptions::OAuthEchoError raise $! rescue OpenURI::HTTPError if $!.message.include?("401") diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index 8328388..f59c6e5 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -1,42 +1,32 @@ class ErrorsController < ApplicationController before_action :force_format - layout :select_layout def render_error @exception = env["action_dispatch.exception"] case @exception - when OAuth::Unauthorized - # only /i/callback: when Cancel pressed on Twitter's OAuth - redirect_to root_path - when Aclog::Exceptions::LoginRequired, - Aclog::Exceptions::UserProtected, - Aclog::Exceptions::AccountPrivate + when Aclog::Exceptions::Forbidden @status = 403 @message = t("error.forbidden") when ActionController::RoutingError, ActiveRecord::RecordNotFound, ActionView::MissingTemplate, - Aclog::Exceptions::UserNotRegistered + Aclog::Exceptions::NotFound @status = 404 @message = t("error.not_found") + when OAuth::Unauthorized, + Aclog::Exceptions::Unauthorized + @status = 401 + @message = "" else @status = 500 @message = "#{t("error.internal_error")}: #{@exception.class}" end - if @exception.is_a? Aclog::Exceptions::UserError - @user = @exception.user - end - render status: @status end private - def select_layout - @user ? nil : "index" - end - def force_format request.format = (env["REQUEST_PATH"].scan(/\.([A-Za-z]+)$/).flatten.first || :html).to_sym diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index ca30d46..587bc7f 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -21,6 +21,6 @@ class SettingsController < ApplicationController private def set_account @account = logged_in? && current_user.account - raise Aclog::Exceptions::LoginRequired unless @account + redirect_to "/i/login" unless @account end end diff --git a/app/models/user.rb b/app/models/user.rb index de499fd..f067894 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -68,7 +68,7 @@ class User < ActiveRecord::Base end def stats - raise Aclog::Exceptions::UserNotRegistered.new(self) unless registered? && account.active? + raise(Aclog::Exceptions::UserNotRegistered, self) unless registered? && account.active? Rails.cache.fetch("stats/#{self.id}", expires_in: 3.hours) do reactions_count = tweets.sum(:reactions_count) |