X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9b10524c349d0c28a6dcf33ad0a473c3eb2d2b2f..f19ce869a14511bb8031309a75fd9ee7acfeee6c:/services/api/script/setup-new-user.rb diff --git a/services/api/script/setup-new-user.rb b/services/api/script/setup-new-user.rb index c8bc098f05..af0de13b2c 100755 --- a/services/api/script/setup-new-user.rb +++ b/services/api/script/setup-new-user.rb @@ -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 @@ -14,37 +15,57 @@ opts = Trollop::options do banner '' opt :debug, <<-eos Show debug messages. - eos - opt :create, <<-eos -Create a new user with the given email address if an existing user \ -is not found. eos opt :openid_prefix, <<-eos, default: 'https://www.google.com/accounts/o8/id' If creating a new user record, require authentication from an OpenID \ with this OpenID prefix *and* a matching email address in order to \ claim the account. eos - opt :force, <<-eos -Continue even if sanity checks raise flags: the given user is already \ -active, the given repository already exists, etc. + opt :send_notification_email, <<-eos, default: 'true' +Send notification email after successfully setting up the user. eos - opt :n, 'Do not change anything, just probe' end 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, just_probe: opts.n, user: {}) - log.warn new_user -rescue Exception => e #Arvados::TransactionFailedError - log.warn e.message + found_user = arv.user.get(uuid: user_arg) +rescue Arvados::TransactionFailedError + found = arv.user.list(where: {email: user_arg})[: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 + elsif found.count != 1 + abort "Found #{found.count} users with email. Stop." + else + found_user = found.first + end +end + +# Invoke user setup method +if (found_user) + user = arv.user.setup uuid: found_user[:uuid], repo_name: user_repo_name, + vm_uuid: vm_uuid, openid_prefix: opts.openid_prefix, + send_notification_email: opts.send_notification_email +else + user = arv.user.setup user: {email: user_arg}, repo_name: user_repo_name, + vm_uuid: vm_uuid, openid_prefix: opts.openid_prefix, + send_notification_email: opts.send_notification_email end +log.info {"user uuid: " + user[:uuid]} + +puts user.inspect