From ed2b65fa0aa4d752db8e1eaaecc17eb05c06acd3 Mon Sep 17 00:00:00 2001 From: Ward Vandewege Date: Fri, 15 Nov 2013 16:49:35 -0500 Subject: [PATCH] Improve error handling for login operations. --- .../api/app/controllers/static_controller.rb | 2 +- .../controllers/user_sessions_controller.rb | 8 +++---- .../app/views/static/login_failure.html.erb | 22 +++++++++++++++++++ .../config/initializers/omniauth.rb.example | 2 ++ services/api/config/routes.rb | 2 ++ 5 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 services/api/app/views/static/login_failure.html.erb diff --git a/services/api/app/controllers/static_controller.rb b/services/api/app/controllers/static_controller.rb index 071425212a..9fbf80687d 100644 --- a/services/api/app/controllers/static_controller.rb +++ b/services/api/app/controllers/static_controller.rb @@ -1,7 +1,7 @@ class StaticController < ApplicationController skip_before_filter :find_object_by_uuid - skip_before_filter :require_auth_scope_all, :only => :home + skip_before_filter :require_auth_scope_all, :only => [ :home, :login_failure ] def home render 'intro' diff --git a/services/api/app/controllers/user_sessions_controller.rb b/services/api/app/controllers/user_sessions_controller.rb index 612061eb6f..45edc9049b 100644 --- a/services/api/app/controllers/user_sessions_controller.rb +++ b/services/api/app/controllers/user_sessions_controller.rb @@ -13,12 +13,10 @@ class UserSessionsController < ApplicationController identity_url_ok = (omniauth['info']['identity_url'].length > 0) rescue false unless identity_url_ok # Whoa. This should never happen. + logger.error "UserSessionsController.create: omniauth object missing/invalid" + logger.error "omniauth.pretty_inspect():\n\n#{omniauth.pretty_inspect()}" - @title = "UserSessionsController.create: omniauth object missing/invalid" - @body = "omniauth.pretty_inspect():\n\n#{omniauth.pretty_inspect()}" - - view_context.fatal_error(@title,@body) - return redirect_to openid_login_error_url + return redirect_to login_failure_url end user = User.find_by_identity_url(omniauth['info']['identity_url']) diff --git a/services/api/app/views/static/login_failure.html.erb b/services/api/app/views/static/login_failure.html.erb new file mode 100644 index 0000000000..958f668cbf --- /dev/null +++ b/services/api/app/views/static/login_failure.html.erb @@ -0,0 +1,22 @@ +<% content_for :js do %> +$(function(){ + $('button.login').button().click(function(){window.location=$(this).attr('href')}); +}); +<% end %> + + +
+ +
+ +

Error

+ +

Sorry, something went wrong logging you in. Please try again.

+ +

+ Log in here. +

+ +
+
+
diff --git a/services/api/config/initializers/omniauth.rb.example b/services/api/config/initializers/omniauth.rb.example index 6c1b67bac0..cd25374a75 100644 --- a/services/api/config/initializers/omniauth.rb.example +++ b/services/api/config/initializers/omniauth.rb.example @@ -9,3 +9,5 @@ CUSTOM_PROVIDER_URL = 'http://auth.clinicalfuture.com' Rails.application.config.middleware.use OmniAuth::Builder do provider :josh_id, APP_ID, APP_SECRET, CUSTOM_PROVIDER_URL end + +OmniAuth.config.on_failure = StaticController.action(:login_failure) diff --git a/services/api/config/routes.rb b/services/api/config/routes.rb index ebb5c69271..c8a68293d1 100644 --- a/services/api/config/routes.rb +++ b/services/api/config/routes.rb @@ -123,6 +123,8 @@ Server::Application.routes.draw do match '/discovery/v1/apis/arvados/v1/rest', :to => 'arvados/v1/schema#discovery_rest_description' + match '/static/login_failure', :to => 'static#login_failure', :as => :login_failure + # Send unroutable requests to an arbitrary controller # (ends up at ApplicationController#render_not_found) match '*a', :to => 'arvados/v1/links#render_not_found' -- 2.30.2