X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c9b8b9b9c78a77dd30b828914c8bee9fa8dcbb90..e3c25b992f96b34810c371aa75e30ba8ce40a639:/services/api/app/controllers/arvados/v1/groups_controller.rb diff --git a/services/api/app/controllers/arvados/v1/groups_controller.rb b/services/api/app/controllers/arvados/v1/groups_controller.rb index e9bc006a36..efcc43db26 100644 --- a/services/api/app/controllers/arvados/v1/groups_controller.rb +++ b/services/api/app/controllers/arvados/v1/groups_controller.rb @@ -46,7 +46,6 @@ class Arvados::V1::GroupsController < ApplicationController type: 'boolean', required: false, default: false, description: 'Include past collection versions.', } }) - params.delete(:select) params end @@ -260,6 +259,20 @@ class Arvados::V1::GroupsController < ApplicationController end end + # Check that any fields in @select are valid for at least one class + if @select + all_attributes = [] + klasses.each do |klass| + all_attributes.concat klass.selectable_attributes + end + @select.each do |check| + if !all_attributes.include? check + raise ArgumentError.new "Invalid attribute '#{check}' in select" + end + end + end + any_selections = @select + included_by_uuid = {} seen_last_class = false @@ -291,14 +304,21 @@ class Arvados::V1::GroupsController < ApplicationController request_orders.andand.find { |r| r =~ /^#{klass.table_name}\./i || r !~ /\./ } || klass.default_orders.join(", ") - @select = nil + @select = select_for_klass any_selections, klass, false + where_conds = filter_by_owner - if klass == Collection + if klass == Collection && @select.nil? @select = klass.selectable_attributes - ["manifest_text", "unsigned_manifest_text"] elsif klass == Group where_conds = where_conds.merge(group_class: ["project","filter"]) end + # Make signed manifest_text not selectable because controller + # currently doesn't know to sign it. + if @select + @select = @select - ["manifest_text"] + end + @filters = request_filters.map do |col, op, val| if !col.index('.') [col, op, val]