X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/949ed4898bc5af8eaf0fdd21c00f7242168cfe22..5adca9b05d740be31040477b43396f498429e6b3:/apps/workbench/app/controllers/projects_controller.rb diff --git a/apps/workbench/app/controllers/projects_controller.rb b/apps/workbench/app/controllers/projects_controller.rb index 118a46755b..f32f356d0c 100644 --- a/apps/workbench/app/controllers/projects_controller.rb +++ b/apps/workbench/app/controllers/projects_controller.rb @@ -161,18 +161,29 @@ class ProjectsController < ApplicationController @errors = ["No user/group UUIDs specified to share with."] return render_error(status: 422) end - results = {"success" => [], "failure" => {}} + results = {"success" => [], "errors" => []} params[:uuids].each do |shared_uuid| begin Link.create(tail_uuid: shared_uuid, link_class: "permission", name: "can_read", head_uuid: @object.uuid) rescue ArvadosApiClient::ApiError => error - results["failure"][shared_uuid] = error.api_response.andand[:errors] + error_list = error.api_response.andand[:errors] + if error_list.andand.any? + results["errors"] += error_list.map { |e| "#{shared_uuid}: #{e}" } + else + error_code = error.api_status || "Bad status" + results["errors"] << "#{shared_uuid}: #{error_code} response" + end else results["success"] << shared_uuid end end - status = (results["failure"].empty?) ? 200 : 422 + if results["errors"].empty? + results.delete("errors") + status = 200 + else + status = 422 + end respond_to do |f| f.json { render(json: results, status: status) } end