During setup of an existing user, create oid login permission, if it does not already...
[arvados.git] / services / api / app / controllers / arvados / v1 / users_controller.rb
index 65b7ddcbcc909ff6fdb019c1463732f66d464924..58661a0e9a3c970712eccc054b8d2e9060dc249e 100644 (file)
@@ -3,6 +3,7 @@ class Arvados::V1::UsersController < ApplicationController
     [:activate, :event_stream, :current, :system, :setup]
   skip_before_filter :render_404_if_no_object, only:
     [:activate, :event_stream, :current, :system, :setup]
+  before_filter :admin_required, only: [:setup, :unsetup]
 
   def current
     @object = current_user
@@ -28,7 +29,7 @@ class Arvados::V1::UsersController < ApplicationController
       end
     end
   end
-      
+
   def event_stream
     channel = current_user.andand.uuid
     if current_user.andand.is_admin
@@ -90,24 +91,54 @@ class Arvados::V1::UsersController < ApplicationController
 
   # create user object and all the needed links
   def setup
+    @object = nil
     if params[:uuid]
       @object = User.find_by_uuid params[:uuid]
       if !@object
         return render_404_if_no_object
       end
+      object_found = true
     else
       if !params[:user]
-        raise ArgumentError.new "Required uuid or email"
-      end
-      @object = model_class.new resource_attrs
-      if !params[:openid_prefix]
-        raise ArgumentError.new "Required openid_prefix parameter is missing."
+        raise ArgumentError.new "Required uuid or user"
+      else
+        if params[:user]['uuid']
+          @object = User.find_by_uuid params[:user]['uuid']
+          if @object
+            object_found = true
+          end
+        end
+
+        if !@object
+          if !params[:user]['email']
+            raise ArgumentError.new "Require user email"
+          end
+
+          if !params[:openid_prefix]
+            raise ArgumentError.new "Required openid_prefix parameter is missing."
+          end
+
+          @object = model_class.create! resource_attrs
+        end
       end
     end
 
-    @response = User.setup @object, params[:openid_prefix],
-                params[:repo_name], params[:vm_uuid]
-    render json: { kind: "List", items: @response }
+    if object_found
+      @response = @object.setup_repo_vm_links params[:repo_name],
+                    params[:vm_uuid], params[:openid_prefix]
+    else
+      @response = User.setup @object, params[:openid_prefix],
+                    params[:repo_name], params[:vm_uuid]
+    end
+
+    render json: { kind: "arvados#HashList", items: @response }
+  end
+
+  # delete user agreements, vm, repository, login links; set state to inactive
+  def unsetup
+    reload_object_before_update
+    @object.unsetup
+    show
   end
 
 end