Merge branch 'master' into 3296-user-profile
[arvados.git] / apps / workbench / app / controllers / application_controller.rb
index df95335cb83975f6cb04a31bb46bc21160fced76..fd3a000ecf0980d4b4f430dcd762e0f609f64517 100644 (file)
@@ -13,6 +13,7 @@ class ApplicationController < ActionController::Base
   #   skip_around_filter :require_thread_api_token
   around_filter :require_thread_api_token, except: ERROR_ACTIONS
   before_filter :check_user_agreements, except: ERROR_ACTIONS
+  before_filter :check_user_profile, except: [:update_profile] + ERROR_ACTIONS
   before_filter :check_user_notifications, except: ERROR_ACTIONS
   before_filter :load_filters_and_paging_params, except: ERROR_ACTIONS
   before_filter :find_object_by_uuid, except: [:index, :choose] + ERROR_ACTIONS
@@ -417,6 +418,7 @@ class ApplicationController < ActionController::Base
         is_admin: user.is_admin,
         prefs: user.prefs
       }
+
       if !request.format.json? and request.method.in? ['GET', 'HEAD']
         # Repeat this request with api_token in the (new) session
         # cookie instead of the query string.  This prevents API
@@ -510,6 +512,35 @@ class ApplicationController < ActionController::Base
     true
   end
 
+  def check_user_profile
+    profile_config = Rails.configuration.user_profile_form_fields
+
+    if request.method.downcase != 'get' || params[:partials]
+      return true
+    end
+
+    if current_user && profile_config
+      missing_required_profile = false
+
+      user_prefs = User.limit(1).where(uuid: current_user.uuid).first.prefs
+      current_user_profile = user_prefs[:profile] if user_prefs
+
+      profile_config.andand.each do |entry|
+        if entry['required']
+          if !current_user_profile || !current_user_profile[entry['key'].to_sym]
+            missing_required_profile = true
+            break
+          end
+        end
+      end
+
+      if missing_required_profile
+        render 'users/profile'
+      end
+    end
+    true
+  end
+
   def select_theme
     return Rails.configuration.arvados_theme
   end