19880: Password based login fix
[arvados.git] / apps / workbench / app / models / arvados_api_client.rb
index 3c9bfa793daa5a8ba143cbbf8fc40122654b6fff..25a4e74b70ca405fd8f3b8e760897ba8197d53ca 100644 (file)
@@ -40,7 +40,7 @@ class ArvadosApiClient
     def initialize(request_url, api_response)
       @api_status = api_response.status_code
       @api_response_s = api_response.content
-      @api_response = Oj.load(@api_response_s, :symbol_keys => true)
+      @api_response = Oj.strict_load(@api_response_s, :symbol_keys => true)
       errors = @api_response[:errors]
       if errors.respond_to?(:join)
         errors = errors.join("\n\n")
@@ -167,7 +167,7 @@ class ArvadosApiClient
     end
 
     begin
-      resp = Oj.load(msg.content, :symbol_keys => true)
+      resp = Oj.strict_load(msg.content, :symbol_keys => true)
     rescue Oj::ParseError
       resp = nil
     end
@@ -235,19 +235,35 @@ class ArvadosApiClient
   end
 
   def arvados_login_url(params={})
+    case
+    when Rails.configuration.Login.PAM.Enable,
+         Rails.configuration.Login.LDAP.Enable,
+         Rails.configuration.Login.Test.Enable
+
+      uri = URI.parse(Rails.configuration.Services.Workbench1.ExternalURL.to_s)
+      uri.path = "/users/welcome"
+      uri.query = URI.encode_www_form(params)
+    else
+      uri = URI.parse(Rails.configuration.Services.Controller.ExternalURL.to_s)
+      if Rails.configuration.testing_override_login_url
+        uri = URI(Rails.configuration.testing_override_login_url)
+      end
+      uri.path = "/login"
+      uri.query = URI.encode_www_form(params)
+    end
+    uri.to_s
+  end
+
+  def arvados_logout_url(params={})
     uri = URI.parse(Rails.configuration.Services.Controller.ExternalURL.to_s)
     if Rails.configuration.testing_override_login_url
       uri = URI(Rails.configuration.testing_override_login_url)
     end
-    uri.path = "/login"
+    uri.path = "/logout"
     uri.query = URI.encode_www_form(params)
     uri.to_s
   end
 
-  def arvados_logout_url(params={})
-    arvados_login_url(params).sub('/login','/logout')
-  end
-
   def arvados_v1_base
     # workaround Ruby 2.3 bug, can't duplicate URI objects
     # https://github.com/httprb/http/issues/388