Merge branch 'master' into 13822-nm-delayed-daemon
[arvados.git] / services / api / app / controllers / user_sessions_controller.rb
index 5de85bc98bcbcb1a0051c3ecee355e82292b5a27..b8fe2948923582ad9f40f3ec00c394cd6b2473ec 100644 (file)
@@ -26,9 +26,9 @@ class UserSessionsController < ApplicationController
 
     # Only local users can create sessions, hence uuid_like_pattern
     # here.
-    user = User.where('identity_url = ? and uuid like ?',
-                      omniauth['info']['identity_url'],
-                      User.uuid_like_pattern).first
+    user = User.unscoped.where('identity_url = ? and uuid like ?',
+                               omniauth['info']['identity_url'],
+                               User.uuid_like_pattern).first
     if not user
       # Check for permission to log in to an existing User record with
       # a different identity_url
@@ -45,6 +45,7 @@ class UserSessionsController < ApplicationController
         end
       end
     end
+
     if not user
       # New user registration
       user = User.new(:email => omniauth['info']['email'],
@@ -67,6 +68,13 @@ class UserSessionsController < ApplicationController
         # First login to a pre-activated account
         user.identity_url = omniauth['info']['identity_url']
       end
+
+      while (uuid = user.redirect_to_user_uuid)
+        user = User.unscoped.where(uuid: uuid).first
+        if !user
+          raise Exception.new("identity_url #{omniauth['info']['identity_url']} redirects to nonexistent uuid #{uuid}")
+        end
+      end
     end
 
     # For the benefit of functional and integration tests: