X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/688319dca9cbbb27452a0062943bb38b6935254e..7caabd9c19c46ebc218d10b2c048e36d6e8cb2a4:/services/api/app/controllers/arvados/v1/schema_controller.rb diff --git a/services/api/app/controllers/arvados/v1/schema_controller.rb b/services/api/app/controllers/arvados/v1/schema_controller.rb index 49fc398e14..aee5d1f951 100644 --- a/services/api/app/controllers/arvados/v1/schema_controller.rb +++ b/services/api/app/controllers/arvados/v1/schema_controller.rb @@ -3,15 +3,15 @@ # SPDX-License-Identifier: AGPL-3.0 class Arvados::V1::SchemaController < ApplicationController - skip_before_filter :catch_redirect_hint - skip_before_filter :find_objects_for_index - skip_before_filter :find_object_by_uuid - skip_before_filter :load_filters_param - skip_before_filter :load_limit_offset_order_params - skip_before_filter :load_read_auths - skip_before_filter :load_where_param - skip_before_filter :render_404_if_no_object - skip_before_filter :require_auth_scope + skip_before_action :catch_redirect_hint + skip_before_action :find_objects_for_index + skip_before_action :find_object_by_uuid + skip_before_action :load_filters_param + skip_before_action :load_limit_offset_order_params + skip_before_action :load_read_auths + skip_before_action :load_where_param + skip_before_action :render_404_if_no_object + skip_before_action :require_auth_scope include DbCurrentTime @@ -25,13 +25,18 @@ class Arvados::V1::SchemaController < ApplicationController def discovery_doc Rails.cache.fetch 'arvados_v1_rest_discovery' do Rails.application.eager_load! + remoteHosts = {} + Rails.configuration.RemoteClusters.each {|k,v| if k != :"*" then remoteHosts[k] = v["Host"] end } discovery = { kind: "discovery#restDescription", discoveryVersion: "v1", id: "arvados:v1", name: "arvados", version: "v1", - revision: "20131114", + # format is YYYYMMDD, must be fixed with (needs to be linearly + # sortable), updated manually, may be used by clients to + # determine availability of API server features. + revision: "20190926", source_version: AppVersion.hash, sourceVersion: AppVersion.hash, # source_version should be deprecated in the future packageVersion: AppVersion.package_version, @@ -39,38 +44,35 @@ class Arvados::V1::SchemaController < ApplicationController title: "Arvados API", description: "The API to interact with Arvados.", documentationLink: "http://doc.arvados.org/api/index.html", - defaultCollectionReplication: Rails.configuration.default_collection_replication, + defaultCollectionReplication: Rails.configuration.Collections.DefaultReplication, protocol: "rest", baseUrl: root_url + "arvados/v1/", basePath: "/arvados/v1/", rootUrl: root_url, servicePath: "arvados/v1/", batchPath: "batch", - uuidPrefix: Rails.application.config.uuid_prefix, - defaultTrashLifetime: Rails.application.config.default_trash_lifetime, - blobSignatureTtl: Rails.application.config.blob_signature_ttl, - maxRequestSize: Rails.application.config.max_request_size, - dockerImageFormats: Rails.application.config.docker_image_formats, - crunchLogBytesPerEvent: Rails.application.config.crunch_log_bytes_per_event, - crunchLogSecondsBetweenEvents: Rails.application.config.crunch_log_seconds_between_events, - crunchLogThrottlePeriod: Rails.application.config.crunch_log_throttle_period, - crunchLogThrottleBytes: Rails.application.config.crunch_log_throttle_bytes, - crunchLogThrottleLines: Rails.application.config.crunch_log_throttle_lines, - crunchLimitLogBytesPerJob: Rails.application.config.crunch_limit_log_bytes_per_job, - crunchLogPartialLineThrottlePeriod: Rails.application.config.crunch_log_partial_line_throttle_period, - remoteHosts: Rails.configuration.remote_hosts, - remoteHostsViaDNS: Rails.configuration.remote_hosts_via_dns, - websocketUrl: Rails.application.config.websocket_address, - workbenchUrl: Rails.application.config.workbench_address, - keepWebServiceUrl: Rails.application.config.keep_web_service_url, - gitUrl: case Rails.application.config.git_repo_https_base - when false - '' - when true - 'https://git.%s.arvadosapi.com/' % Rails.configuration.uuid_prefix - else - Rails.application.config.git_repo_https_base - end, + uuidPrefix: Rails.configuration.ClusterID, + defaultTrashLifetime: Rails.configuration.Collections.DefaultTrashLifetime, + blobSignatureTtl: Rails.configuration.Collections.BlobSigningTTL, + maxRequestSize: Rails.configuration.API.MaxRequestSize, + maxItemsPerResponse: Rails.configuration.API.MaxItemsPerResponse, + dockerImageFormats: Rails.configuration.Containers.SupportedDockerImageFormats.keys, + crunchLogBytesPerEvent: Rails.configuration.Containers.Logging.LogBytesPerEvent, + crunchLogSecondsBetweenEvents: Rails.configuration.Containers.Logging.LogSecondsBetweenEvents, + crunchLogThrottlePeriod: Rails.configuration.Containers.Logging.LogThrottlePeriod, + crunchLogThrottleBytes: Rails.configuration.Containers.Logging.LogThrottleBytes, + crunchLogThrottleLines: Rails.configuration.Containers.Logging.LogThrottleLines, + crunchLimitLogBytesPerJob: Rails.configuration.Containers.Logging.LimitLogBytesPerJob, + crunchLogPartialLineThrottlePeriod: Rails.configuration.Containers.Logging.LogPartialLineThrottlePeriod, + crunchLogUpdatePeriod: Rails.configuration.Containers.Logging.LogUpdatePeriod, + crunchLogUpdateSize: Rails.configuration.Containers.Logging.LogUpdateSize, + remoteHosts: remoteHosts, + remoteHostsViaDNS: Rails.configuration.RemoteClusters["*"].Proxy, + websocketUrl: Rails.configuration.Services.Websocket.ExternalURL.to_s, + workbenchUrl: Rails.configuration.Services.Workbench1.ExternalURL.to_s, + workbench2Url: Rails.configuration.Services.Workbench2.ExternalURL.to_s, + keepWebServiceUrl: Rails.configuration.Services.WebDAV.ExternalURL.to_s, + gitUrl: Rails.configuration.Services.GitHTTP.ExternalURL.to_s, parameters: { alt: { type: "string", @@ -131,6 +133,14 @@ class Arvados::V1::SchemaController < ApplicationController object_properties[col.name] = { type: k.serialized_attributes[col.name].object_class.to_s } + elsif k.attribute_types[col.name].is_a? JsonbType::Hash + object_properties[col.name] = { + type: Hash.to_s + } + elsif k.attribute_types[col.name].is_a? JsonbType::Array + object_properties[col.name] = { + type: Array.to_s + } else object_properties[col.name] = { type: col.type @@ -394,8 +404,30 @@ class Arvados::V1::SchemaController < ApplicationController end end end - Rails.configuration.disable_api_methods.each do |method| - ctrl, action = method.split('.', 2) + + discovery[:resources]['configs'] = { + methods: { + get: { + id: "arvados.configs.get", + path: "config", + httpMethod: "GET", + description: "Get public config", + parameters: { + }, + parameterOrder: [ + ], + response: { + }, + scopes: [ + "https://api.curoverse.com/auth/arvados", + "https://api.curoverse.com/auth/arvados.readonly" + ] + }, + } + } + + Rails.configuration.API.DisabledAPIs.each do |method, _| + ctrl, action = method.to_s.split('.', 2) discovery[:resources][ctrl][:methods].delete(action.to_sym) end discovery