1 class Arvados::V1::UsersController < ApplicationController
2 skip_before_filter :find_object_by_uuid, only:
3 [:activate, :current, :system, :setup]
4 skip_before_filter :render_404_if_no_object, only:
5 [:activate, :current, :system, :setup]
6 before_filter :admin_required, only: [:setup, :unsetup]
18 if current_user.andand.is_admin && params[:uuid]
19 @object = User.find params[:uuid]
21 @object = current_user
23 if not @object.is_active
24 if not (current_user.is_admin or @object.is_invited)
25 logger.warn "User #{@object.uuid} called users.activate " +
27 raise ArgumentError.new "Cannot activate without being invited."
30 required_uuids = Link.where("owner_uuid = ? and link_class = ? and name = ? and tail_uuid = ? and head_uuid like ?",
35 Collection.uuid_like_pattern).
37 signed_uuids = Link.where(owner_uuid: system_user_uuid,
38 link_class: 'signature',
40 tail_uuid: @object.uuid,
41 head_uuid: required_uuids).
43 todo_uuids = required_uuids - signed_uuids
45 @object.update_attributes is_active: true
46 logger.info "User #{@object.uuid} activated"
48 logger.warn "User #{@object.uuid} called users.activate " +
49 "before signing agreements #{todo_uuids.inspect}"
50 raise ArvadosModel::PermissionDeniedError.new \
51 "Cannot activate without user agreements #{todo_uuids.inspect}."
58 # create user object and all the needed links
62 @object = User.find_by_uuid params[:uuid]
64 return render_404_if_no_object
69 raise ArgumentError.new "Required uuid or user"
71 if params[:user]['uuid']
72 @object = User.find_by_uuid params[:user]['uuid']
79 if !params[:user]['email']
80 raise ArgumentError.new "Require user email"
83 if !params[:openid_prefix]
84 raise ArgumentError.new "Required openid_prefix parameter is missing."
87 @object = model_class.create! resource_attrs
93 @response = @object.setup_repo_vm_links params[:repo_name],
94 params[:vm_uuid], params[:openid_prefix]
96 @response = User.setup @object, params[:openid_prefix],
97 params[:repo_name], params[:vm_uuid]
100 # setup succeeded. send email to user
101 if params[:send_notification_email] == true || params[:send_notification_email] == 'true'
102 UserNotifier.account_is_setup(@object).deliver
105 render json: { kind: "arvados#HashList", items: @response.as_api_response(nil) }
108 # delete user agreements, vm, repository, login links; set state to inactive
110 reload_object_before_update
117 def self._setup_requires_parameters
119 send_notification_email: { type: 'boolean', required: true },