Merge branch 'master' into 9998-unsigned_manifest
[arvados.git] / services / api / app / controllers / arvados / v1 / users_controller.rb
index 887a5e4462786aa68ca684547256c835780b37ce..db5e7bd952323f661bbcd11312a937956f4d5044 100644 (file)
@@ -96,12 +96,29 @@ class Arvados::V1::UsersController < ApplicationController
       end
     end
 
+    # It's not always possible for the client to know the user's
+    # username when submitting this request: the username might have
+    # been assigned automatically in create!() above. If client
+    # provided a plain repository name, prefix it with the username
+    # now that we know what it is.
+    if params[:repo_name].nil?
+      full_repo_name = nil
+    elsif @object.username.nil?
+      raise ArgumentError.
+        new("cannot setup a repository because user has no username")
+    elsif object_found and
+        params[:repo_name].start_with?("#{@object.username}/")
+      full_repo_name = params[:repo_name]
+    else
+      full_repo_name = "#{@object.username}/#{params[:repo_name]}"
+    end
+
     if object_found
-      @response = @object.setup_repo_vm_links params[:repo_name],
+      @response = @object.setup_repo_vm_links full_repo_name,
                     params[:vm_uuid], params[:openid_prefix]
     else
       @response = User.setup @object, params[:openid_prefix],
-                    params[:repo_name], params[:vm_uuid]
+                    full_repo_name, params[:vm_uuid]
     end
 
     # setup succeeded. send email to user
@@ -141,8 +158,8 @@ class Arvados::V1::UsersController < ApplicationController
     }
   end
 
-  def apply_filters
-    return super if @read_users.any? &:is_admin
+  def apply_filters(model_class=nil)
+    return super if @read_users.any?(&:is_admin)
     if params[:uuid] != current_user.andand.uuid
       # Non-admin index/show returns very basic information about readable users.
       safe_attrs = ["uuid", "is_active", "email", "first_name", "last_name"]