Use setup method instead of create method to setup a new user
[arvados.git] / services / api / script / setup-new-user.rb
index 72e18040a531b296bb7277916a670533db7a2e09..fbdb0b0547c49f428b057e9a0395c2586be5135b 100755 (executable)
@@ -4,6 +4,7 @@ abort 'Error: Ruby >= 1.9.3 required.' if RUBY_VERSION < '1.9.3'
 
 require 'logger'
 require 'trollop'
+
 log = Logger.new STDERR
 log.progname = $0.split('/').last
 
@@ -31,15 +32,37 @@ log.level = (ENV['DEBUG'] || opts.debug) ? Logger::DEBUG : Logger::WARN
 if ARGV.count != 3
   Trollop::die "required arguments are missing"
 end
+
 user_arg, user_repo_name, vm_uuid = ARGV
 
 require 'arvados'
 arv = Arvados.new(api_version: 'v1')
 
+# Look up the given user by uuid or, failing that, email address.
 begin
-       new_user = arv.user.create(user_param: user_arg, repo_name: user_repo_name, vm_uuid: vm_uuid, openid_prefix: opts.openid_prefix, user: {})
-       log.warn new_user
-rescue Exception => e #Arvados::TransactionFailedError
-       log.warn e.message
-end
+  user = arv.user.get(uuid: user_arg)
+rescue Arvados::TransactionFailedError
+  found = arv.user.list(where: {email: ARGV[0]})[:items]
+         
+  if found.count == 0 
+    if !user_arg.match(/\w\@\w+\.\w+/)
+      abort "About to create new user, but #{user_arg.inspect} " +
+               "does not look like an email address. Stop."
+    end
+           
+    user = arv.user.setup(repo_name: user_repo_name, vm_uuid: vm_uuid, 
+        user: {email: user_arg})
+    log.info { "created user: " + user[:uuid] }
+  elsif found.count != 1
+    abort "Found #{found.count} users " +
+             "with uuid or email #{user_arg.inspect}. Stop."
+  else
+    user = found.first
+    # Found user. Update ther user links
+    user = arv.user.setup(repo_name: user_repo_name, vm_uuid: vm_uuid, 
+        user: {email: user[:uuid]})
+  end
 
+  puts "USER = #{user.inspect}"
+  log.info { "user uuid: " + user[:uuid] }
+end