X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6d73acc845a2dd7413fdde0742473d83bf3d0719..33d7da6903a0fc2c9570a11c939dce6a4894f66e:/apps/workbench/app/controllers/users_controller.rb diff --git a/apps/workbench/app/controllers/users_controller.rb b/apps/workbench/app/controllers/users_controller.rb index 1610653b87..3696eccedf 100644 --- a/apps/workbench/app/controllers/users_controller.rb +++ b/apps/workbench/app/controllers/users_controller.rb @@ -1,7 +1,7 @@ class UsersController < ApplicationController skip_before_filter :find_object_by_uuid, :only => [:welcome, :activity] skip_around_filter :thread_with_mandatory_api_token, :only => :welcome - before_filter :ensure_current_user_is_admin, only: [:sudo, :unsetup] + before_filter :ensure_current_user_is_admin, only: [:sudo, :unsetup, :setup] def welcome if current_user @@ -145,4 +145,91 @@ class UsersController < ApplicationController show end + def setup + respond_to do |format| + if current_user.andand.is_admin + setup_params = {} + if params['uuid'] && params['uuid'].size>0 + setup_params[:uuid] = params['uuid'] + end + if params['email'] && params['email'].size>0 + user = {email: params['email'], openid_prefix: params['openid_prefix']} + setup_params[:user] = user + end + if params['repo_name'] && params['repo_name'].size>0 + setup_params[:repo_name] = params['repo_name'] + end + if params['vm_uuid'] && params['vm_uuid'].size>0 + setup_params[:vm_uuid] = params['vm_uuid'] + end + + if User.setup setup_params + format.js + else + self.render_error status: 422 + end + else + self.render_error status: 422 + end + end + end + + def setup_popup + @vms = VirtualMachine.all.results + + @current_selections = find_current_links @object + + respond_to do |format| + format.html + format.js + end + end + + protected + + def find_current_links user + current_selections = {} + + if !user + return current_selections + end + + # oid login perm + oid_login_perms = Link.where(tail_uuid: user.email, + head_kind: 'arvados#user', + link_class: 'permission', + name: 'can_login') + + if oid_login_perms.any? + prefix_properties = oid_login_perms.first.properties + current_selections[:identity_url_prefix] = prefix_properties[:identity_url_prefix] + end + + # repo perm + repo_perms = Link.where(tail_uuid: user.uuid, + head_kind: 'arvados#repository', + link_class: 'permission', + name: 'can_write') + if repo_perms.any? + repo_uuid = repo_perms.first.head_uuid + repos = Repository.where(head_uuid: repo_uuid) + if repos.any? + repo_name = repos.first.name + current_selections[:repo_name] = repo_name + end + end + + # vm login perm + vm_login_perms = Link.where(tail_uuid: user.uuid, + head_kind: 'arvados#virtualMachine', + link_class: 'permission', + name: 'can_login') + if vm_login_perms.any? + vm_uuid = vm_login_perms.first.head_uuid + current_selections[:vm_uuid] = vm_uuid + end + + return current_selections + end + end