diff --git a/reference/dtr/2.6/api/dtr-swagger-2.6.json b/reference/dtr/2.6/api/dtr-swagger-2.6.json new file mode 100644 index 0000000000..0958f472c0 --- /dev/null +++ b/reference/dtr/2.6/api/dtr-swagger-2.6.json @@ -0,0 +1,9957 @@ +{ + "swagger": "2.0", + "info": { + "title": "Docker Trusted Registry", + "version": "2.6.0-tp9" + }, + "paths": { + "/api/v0/accounts/language": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "Get the chosen language", + "operationId": "GetLanguage", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Language" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Language" + } + } + } + } + }, + "/api/v0/accounts/{namespace}": { + "delete": { + "description": "\n\t*Authorization:* Client must be authenticated as a system admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "Removes a user or organization along with all repositories", + "operationId": "DeleteNamespace", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + } + ], + "responses": { + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/accounts/{namespace}/repositories": { + "delete": { + "description": "\n\t*Authorization:* Client must be authenticated as a system admin, organization admin or user in question\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "Removes all of a user or organization's repositories", + "operationId": "DeleteNamespaceRepositories", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + } + ], + "responses": { + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/accounts/{namespace}/webhooks": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "List the webhook subscriptions for a namespace", + "operationId": "ListNamespaceWebhooks", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + } + } + } + }, + "/api/v0/accounts/{orgname}/teams/{teamname}/repositoryAccess": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who owns the organization the team is in or be a member of that team.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "List repository access grants for a team", + "operationId": "ListTeamRepoAccess", + "parameters": [ + { + "type": "string", + "description": "organization account name", + "name": "orgname", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "teamname", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListTeamRepoAccess" + } + }, + "400": { + "description": "the team does not belong to the organization" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListTeamRepoAccess" + } + } + } + } + }, + "/api/v0/accounts/{username}/repositoryAccess/{namespace}/{reponame}": { + "get": { + "description": "\n\t*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "Check a user's access to a repository", + "operationId": "GetUserRepoAccess", + "parameters": [ + { + "type": "string", + "description": "user account name", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.RepoUserAccess" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.RepoUserAccess" + } + } + } + } + }, + "/api/v0/accounts/{username}/settings": { + "get": { + "description": "\n*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "Check a user's settings", + "operationId": "GetUserSettings", + "parameters": [ + { + "type": "string", + "description": "user account name", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.UserSettings" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_USER: A user with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.UserSettings" + } + } + } + }, + "patch": { + "description": "\n*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "accounts" + ], + "summary": "Update a user's settings", + "operationId": "UpdateUserSettings", + "parameters": [ + { + "type": "string", + "description": "user account name", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UserSettings" + } + } + ], + "responses": { + "200": { + "description": "Successfully updated user settings." + }, + "400": { + "description": "INVALID_USER_SETTINGS: The submitted user settings change request contains invalid values." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_USER: A user with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully updated user settings." + } + } + } + }, + "/api/v0/action_configs": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "action_configs" + ], + "summary": "List all action configs", + "operationId": "ListActionConfigs", + "responses": { + "200": { + "description": "Success, list of action configs returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.ActionConfigs" + } + }, + "default": { + "description": "Success, list of action configs returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.ActionConfigs" + } + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "action_configs" + ], + "summary": "Configure actions", + "operationId": "UpdateActionConfig", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/tmpforms.ActionConfigCreate" + } + } + ], + "responses": { + "202": { + "description": "Success.", + "schema": { + "$ref": "#/definitions/tmpresponses.ActionConfig" + } + } + } + } + }, + "/api/v0/action_configs/{action}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "action_configs" + ], + "summary": "Get info about the actionConfig with the given action", + "operationId": "GetActionConfig", + "parameters": [ + { + "type": "string", + "description": "name of action to fetch the config for", + "name": "action", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, action config info returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.ActionConfig" + } + }, + "default": { + "description": "Success, action config info returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.ActionConfig" + } + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "action_configs" + ], + "summary": "Delete the action config. The defaults will be used.", + "operationId": "DeleteActionConfig", + "parameters": [ + { + "type": "string", + "description": "the name of the action to delete the config for", + "name": "action", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, action config has been deleted." + } + } + } + }, + "/api/v0/api_tokens": { + "get": { + "description": "listUserAPITokensHandler", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API_tokens" + ], + "summary": "Get all API tokens associated with user. Get all tokens if no user is not specified", + "operationId": "GetAllAPITokensByUser", + "parameters": [ + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "string", + "description": "Limit the API token results to a specific user", + "name": "username", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved API tokens", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.APIToken" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_USER: A user with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved API tokens", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.APIToken" + } + } + } + } + }, + "post": { + "description": "createAPITokenHandler", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API_tokens" + ], + "summary": "Create a new API token", + "operationId": "CreateAnAPIToken", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateAPIToken" + } + }, + { + "type": "string", + "description": "Limit the API token results to a specific user", + "name": "username", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully created API token", + "schema": { + "$ref": "#/definitions/responses.NewAPIToken" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully created API token", + "schema": { + "$ref": "#/definitions/responses.NewAPIToken" + } + } + } + }, + "delete": { + "description": "cleanupAPITokenHleanupHandler", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API_tokens" + ], + "summary": "Mass deletion of API tokens from database based on user, time created, and/or generation method", + "operationId": "APITokenCleanup", + "parameters": [ + { + "type": "string", + "description": "Limit the API token results to a specific user", + "name": "username", + "in": "query" + }, + { + "type": "string", + "description": "The date on which the token was last used", + "name": "usedbefore", + "in": "query" + }, + { + "type": "string", + "default": "auto", + "description": "The method by which the token was created", + "name": "generatedby", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully cleaned up API tokens" + }, + "400": { + "description": "INVALID_PARAMETERS: Unable to parse query parameters" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_USER: A user with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully cleaned up API tokens" + } + } + } + }, + "/api/v0/api_tokens/{hashedtoken}": { + "get": { + "description": "getAPITokenHandler", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API_tokens" + ], + "summary": "Get an API token's information based on it's token id", + "operationId": "GetAnAPIToken", + "parameters": [ + { + "type": "string", + "description": "API token id", + "name": "hashedtoken", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved API token", + "schema": { + "$ref": "#/definitions/responses.APIToken" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_API_TOKEN: An API token with the id name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved API token", + "schema": { + "$ref": "#/definitions/responses.APIToken" + } + } + } + }, + "delete": { + "description": "deleteAPITokenHandler", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API_tokens" + ], + "summary": "Delete a specific API token", + "operationId": "DeleteAnAPIToken", + "parameters": [ + { + "type": "string", + "description": "API token id", + "name": "hashedtoken", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully deleted API token" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_API_TOKEN: An API token with the id name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully deleted API token" + } + } + }, + "patch": { + "description": "updateAPITokenHandler", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API_tokens" + ], + "summary": "Update information about a specific API token", + "operationId": "UpdateAnAPIToken", + "parameters": [ + { + "type": "string", + "description": "API token id", + "name": "hashedtoken", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdateAPIToken" + } + } + ], + "responses": { + "200": { + "description": "Successfully updated API tokens", + "schema": { + "$ref": "#/definitions/responses.APIToken" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_API_TOKEN: An API token with the id name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully updated API tokens", + "schema": { + "$ref": "#/definitions/responses.APIToken" + } + } + } + } + }, + "/api/v0/content_caches": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as any active user in the system.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "content_caches" + ], + "summary": "List all content caches", + "operationId": "ListContentCaches", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ContentCache" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ContentCache" + } + } + } + } + }, + "post": { + "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "content_caches" + ], + "summary": "Create content cache", + "operationId": "CreateContentCache", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateContentCache" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.ContentCache" + } + }, + "400": { + "description": "invalid content cache details" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/content_caches/{contentcacheuuid}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as any active user in the system.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "content_caches" + ], + "summary": "View details of a content cache", + "operationId": "GetContentCache", + "parameters": [ + { + "type": "string", + "description": "uuid of content cache", + "name": "contentcacheuuid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ContentCache" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_CONTENT_CACHE: A content cache with the given uuid does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ContentCache" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "content_caches" + ], + "summary": "Remove a content cache", + "operationId": "DeleteContentCache", + "parameters": [ + { + "type": "string", + "description": "uuid of content cache", + "name": "contentcacheuuid", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or content cache does not exist" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_CONTENT_CACHE: A content cache with the given uuid does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/crons": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "crons" + ], + "summary": "List all crons", + "operationId": "ListCrons", + "responses": { + "200": { + "description": "Success, list of crons returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Crons" + } + }, + "default": { + "description": "Success, list of crons returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Crons" + } + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "crons" + ], + "summary": "Create / update a periodic task", + "operationId": "UpdateCron", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/tmpforms.CronCreate" + } + } + ], + "responses": { + "202": { + "description": "Success.", + "schema": { + "$ref": "#/definitions/tmpresponses.Cron" + } + } + } + } + }, + "/api/v0/crons/{action}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "crons" + ], + "summary": "Get info about the cron with the given action", + "operationId": "GetCron", + "parameters": [ + { + "type": "string", + "description": "action of the cron to fetch", + "name": "action", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, cron info returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Cron" + } + }, + "default": { + "description": "Success, cron info returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Cron" + } + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "crons" + ], + "summary": "Delete the cron. Jobs created from it will not be canceled.", + "operationId": "DeleteCron", + "parameters": [ + { + "type": "string", + "description": "action of cron to delete", + "name": "action", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, cron has been deleted." + } + } + } + }, + "/api/v0/events": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "events" + ], + "summary": "Get Events", + "operationId": "GetEvents", + "parameters": [ + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "string", + "name": "publishedBefore", + "in": "query" + }, + { + "type": "string", + "name": "publishedAfter", + "in": "query" + }, + { + "type": "string", + "description": "UUID of the user or organization that performed the event", + "name": "actorId", + "in": "query" + }, + { + "type": "string", + "description": "Type of events to filter by", + "name": "eventType", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Events" + } + }, + "400": { + "description": "INVALID_PARAMETERS: Unable to parse query parameters" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Events" + } + } + } + } + }, + "/api/v0/imagescan/layeroverride": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Gets a list of all the available overrides", + "operationId": "GetLayerVulnOverrides", + "responses": { + "200": { + "description": "Successfully set vulnerability override", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.LayerVulnOverride" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "500": { + "description": "INTERNAL_ERROR: An internal server error occurred. Contact a system administrator for more information." + }, + "default": { + "description": "Successfully set vulnerability override", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.LayerVulnOverride" + } + } + } + } + } + }, + "/api/v0/imagescan/layeroverride/{layerid}": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Sets a vulnerability override for the given layer", + "operationId": "SetLayerVulnOverride", + "parameters": [ + { + "type": "string", + "description": "layer id", + "name": "layerid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.VulnOverrideOption" + } + } + ], + "responses": { + "200": { + "description": "Successfully set vulnerability override" + }, + "400": { + "description": "INVALID_SETTINGS: The submitted settings change request contains invalid values." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_LAYER: A layer with the given sha does not exist in the repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "500": { + "description": "INTERNAL_ERROR: An internal server error occurred. Contact a system administrator for more information." + }, + "default": { + "description": "Successfully set vulnerability override" + } + } + } + }, + "/api/v0/imagescan/layeroverride/{vulnerabilityid}": { + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Deletes a layer vulnerability override", + "operationId": "DeleteLayerVulnOverride", + "parameters": [ + { + "type": "string", + "description": "vulnerability id", + "name": "vulnerabilityid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_LAYER: A layer with the given sha does not exist in the repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK" + } + } + } + }, + "/api/v0/imagescan/repositories/{namespace}/{reponame}/{tag}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Deprecated use /scansummary/repositories/{namespace}/{reponame}/{tag}", + "operationId": "GetSummaryByManifestDigest", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name", + "name": "tag", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include detailed summary results", + "name": "detailed", + "in": "query" + }, + { + "type": "string", + "description": "Operating system of the tag", + "name": "os", + "in": "query" + }, + { + "type": "string", + "description": "Architecture of the tag", + "name": "arch", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved summary.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.OldScanSummary" + } + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved summary.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.OldScanSummary" + } + } + } + } + } + }, + "/api/v0/imagescan/scan": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Do a scan or a scan/check of all layers", + "operationId": "ScanAllLayers", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.ScanOptions" + } + } + ], + "responses": { + "200": { + "description": "Successfully submitted all layers to jobrunner for scan/check." + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully submitted all layers to jobrunner for scan/check." + } + } + } + }, + "/api/v0/imagescan/scan/update": { + "put": { + "consumes": [ + "multipart/form-data", + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Update the vulnerability database for security scanning", + "operationId": "UpdateVulnDB", + "parameters": [ + { + "type": "file", + "description": "Upload file to init database", + "name": "file", + "in": "formData" + }, + { + "type": "boolean", + "default": false, + "description": "Init or update vuln db in online mode.", + "name": "online", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully started to updated vulnerability DB." + }, + "400": { + "description": "SCANNING_DB_NOT_READY: Scanning DB is not ready" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully started to updated vulnerability DB." + } + } + } + }, + "/api/v0/imagescan/scan/{namespace}/{reponame}/{tag}/{os}/{arch}": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Do a scan or a scan/check of given image", + "operationId": "ScanImage", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name", + "name": "tag", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "operating system of the tag", + "name": "os", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "architecture of the tag", + "name": "arch", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully submitted image to jobrunner for scan/check." + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully submitted image to jobrunner for scan/check." + } + } + } + }, + "/api/v0/imagescan/scansummary/component/{component}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the image by component", + "operationId": "GetScannedImageByComponent", + "parameters": [ + { + "type": "string", + "description": "component", + "name": "component", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include scan status summary results", + "name": "scanstatus", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + } + } + } + }, + "/api/v0/imagescan/scansummary/cve/{cve}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the image by CVE", + "operationId": "GetScannedImageByCVE", + "parameters": [ + { + "type": "string", + "description": "cve", + "name": "cve", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include scan status summary results", + "name": "scanstatus", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + } + } + } + }, + "/api/v0/imagescan/scansummary/layer/{layerid}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the image by layer sha", + "operationId": "GetScannedImageByLayer", + "parameters": [ + { + "type": "string", + "description": "layer id", + "name": "layerid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include scan status summary results", + "name": "scanstatus", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_LAYER: A layer with the given sha does not exist in the repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + } + } + } + }, + "/api/v0/imagescan/scansummary/license/{license}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the image by license", + "operationId": "GetScannedImageByLicense", + "parameters": [ + { + "type": "string", + "description": "license", + "name": "license", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include scan status summary results", + "name": "scanstatus", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved images", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + } + } + } + }, + "/api/v0/imagescan/scansummary/repositories/{namespace}/{reponame}/{reference}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the scan summary info on a namespace/repo:tag or namespace/repo@digest", + "operationId": "GetScanSummary", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "digest or tag for an image manifest", + "name": "reference", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include scan status summary results", + "name": "scanstatus", + "in": "query" + }, + { + "type": "string", + "description": "Operating system of the tag", + "name": "os", + "in": "query" + }, + { + "type": "string", + "description": "Architecture of the tag", + "name": "arch", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved summary.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_REF: A ref with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved summary.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ScanSummary" + } + } + } + } + } + }, + "/api/v0/imagescan/scansummary/repositories/{namespace}/{reponame}/{tag}/export": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "text/csv", + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the scan summary info on a namespace/repo:tag as a file", + "operationId": "ExportScanSummary", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name", + "name": "tag", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include scan status summary results", + "name": "scanstatus", + "in": "query" + }, + { + "type": "string", + "description": "Operating system of the tag", + "name": "os", + "in": "query" + }, + { + "type": "string", + "description": "Architecture of the tag", + "name": "arch", + "in": "query" + }, + { + "type": "string", + "description": "Scan summary exported filetype", + "name": "Accept", + "in": "header" + } + ], + "responses": { + "400": { + "description": "INVALID_PARAMETERS: Unable to parse query parameters" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/imagescan/scansummary/tags": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get a list of scan summaries", + "operationId": "GetScanSummaries", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.ImagesForm" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved summary.", + "schema": { + "$ref": "#/definitions/responses.ThinScanSummaries" + } + }, + "400": { + "description": "INVALID_PARAMETERS: Unable to parse query parameters" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved summary.", + "schema": { + "$ref": "#/definitions/responses.ThinScanSummaries" + } + } + } + } + }, + "/api/v0/imagescan/status": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "imagescan" + ], + "summary": "Get the status and version of scanning service", + "operationId": "GetNautilusDBStatus", + "responses": { + "200": { + "description": "Successfully retrieved DB status", + "schema": { + "$ref": "#/definitions/responses.NautilusStatus" + } + }, + "400": { + "description": "SCANNING_NOT_ENABLED: Scanning is not enabled" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully retrieved DB status", + "schema": { + "$ref": "#/definitions/responses.NautilusStatus" + } + } + } + } + }, + "/api/v0/index/autocomplete": { + "get": { + "description": "\nRepository results will be filtered to only those repositories visible to the client. Account results will not be filtered.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "index" + ], + "summary": "Autocompletion for repositories and/or accounts", + "operationId": "Autocomplete", + "parameters": [ + { + "type": "string", + "description": "Autocomplete query", + "name": "query", + "in": "query", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include repositories in the response", + "name": "includeRepositories", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Whether to include accounts in the response", + "name": "includeAccounts", + "in": "query" + }, + { + "type": "string", + "description": "Exact repository namespace to limit results to.", + "name": "namespace", + "in": "query" + }, + { + "type": "number", + "default": 25, + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Autocomplete" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Autocomplete" + } + } + } + } + }, + "/api/v0/index/dockersearch": { + "get": { + "description": "\nThis is used for the Docker CLI's docker search command. Repository results will be filtered to only those repositories visible to the client.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "index" + ], + "summary": "Search Docker repositories", + "operationId": "Docker Search", + "parameters": [ + { + "type": "string", + "description": "Search query", + "name": "q", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.DockerSearch" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.DockerSearch" + } + } + } + } + }, + "/api/v0/jobs": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "jobs" + ], + "summary": "List all jobs ordered by most recently scheduled", + "operationId": "ListJobs", + "parameters": [ + { + "type": "string", + "default": "any", + "description": "Filter jobs by action.", + "name": "action", + "in": "query" + }, + { + "type": "string", + "default": "any", + "description": "Filter jobs by worker ID.", + "name": "worker", + "in": "query" + }, + { + "type": "string", + "default": "any", + "description": "Show only jobs that are running.", + "name": "running", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Return most recently scheduled jobs starting from this offset index.", + "name": "start", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of jobs per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, list of jobs returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Jobs" + } + }, + "default": { + "description": "Success, list of jobs returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Jobs" + } + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "jobs" + ], + "summary": "Schedule a job to be run immediately", + "operationId": "CreateJob", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/tmpforms.JobSubmission" + } + } + ], + "responses": { + "202": { + "description": "Success, job waiting to be claimed.", + "schema": { + "$ref": "#/definitions/tmpresponses.Job" + } + } + } + } + }, + "/api/v0/jobs/{jobID}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "jobs" + ], + "summary": "Get info about the job with the given ID", + "operationId": "GetJob", + "parameters": [ + { + "type": "string", + "description": "ID of job to fetch", + "name": "jobID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, job info returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Job" + } + }, + "default": { + "description": "Success, job info returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Job" + } + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "jobs" + ], + "summary": "Signal this job's worker to cancel and delete the job", + "operationId": "DeleteJobs", + "parameters": [ + { + "type": "string", + "description": "ID of job to delete", + "name": "jobID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, job has been deleted." + } + } + } + }, + "/api/v0/jobs/{jobID}/cancel": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "jobs" + ], + "summary": "Signal this job's worker to cancel the job", + "operationId": "CancelJob", + "parameters": [ + { + "type": "string", + "description": "ID of job to cancel", + "name": "jobID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, job has been canceled." + } + } + } + }, + "/api/v0/jobs/{jobID}/logs": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "jobs" + ], + "summary": "Retrieve logs for this job from its worker", + "operationId": "GetJobLogs", + "parameters": [ + { + "type": "string", + "description": "ID of job whose logs to retrieve", + "name": "jobID", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "t/f: stream new logs", + "name": "stream", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Line number to start from", + "name": "offset", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Number of lines to return if not streaming", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, job's logs returned.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/tmpresponses.JobLog" + } + } + }, + "default": { + "description": "Success, job's logs returned.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/tmpresponses.JobLog" + } + } + } + } + } + }, + "/api/v0/meta/alerts": { + "get": { + "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "meta" + ], + "summary": "Get alerts", + "operationId": "GetAlerts", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Alert" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Alert" + } + } + } + } + } + }, + "/api/v0/meta/cluster_status": { + "get": { + "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "meta" + ], + "summary": "Get cluster status", + "operationId": "GetClusterStatus", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ClusterStatus" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ClusterStatus" + } + } + } + } + }, + "/api/v0/meta/features": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as any active user in the system\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "meta" + ], + "summary": "Get features", + "operationId": "GetFeatures", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Features" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Features" + } + } + } + } + }, + "/api/v0/meta/settings": { + "get": { + "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "meta" + ], + "summary": "Get settings", + "operationId": "GetSettings", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Settings" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Settings" + } + } + } + }, + "post": { + "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "meta" + ], + "summary": "Update settings", + "operationId": "UpdateSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.Settings" + } + } + ], + "responses": { + "202": { + "description": "success" + }, + "400": { + "description": "INVALID_SETTINGS: The submitted settings change request contains invalid values." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/remote/registry": { + "post": { + "description": "\n*Authorization:* Client must be authenticated as any active user in the system. Credentials provided in the request body must be for an active user in the remote system.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "remote" + ], + "summary": "Create a check for connection status of remote registry", + "operationId": "CreateRemoteRegistryCheck", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateRemoteRegistryCheck" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.RemoteRegistryCheck" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as any active user in the system. Results will be filtered to only those repositories visible to the client.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List all repositories", + "operationId": "ListRepositories", + "parameters": [ + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repositories" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repositories" + } + } + } + } + }, + "/api/v0/repositories/scan/toggle": { + "post": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Toggles scan on push for all repositories", + "operationId": "ToggleAllRepositoriesScanOnPush", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.ToggleScanOnPush" + } + } + ], + "responses": { + "200": { + "description": "Successfully toggled scan on push for all repositories." + }, + "400": { + "description": "INVALID_JSON: Unable to parse JSON" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "Successfully toggled scan on push for all repositories." + } + } + } + }, + "/api/v0/repositories/{namespace}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as any active user in the system. Results will be filtered to only those repositories visible to the client.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List repositories in a namespace", + "operationId": "ListNamespaceRepositories", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repositories" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repositories" + } + } + } + }, + "post": { + "description": "\n*Authorization:* Client must be authenticated as a user who has admin access to the\nrepository namespace (i.e., user owns the repo or is a member of a team with\n\"admin\" level access to the organization's namespace of repositories).\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Create repository", + "operationId": "CreateRepository", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateRepo" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.Repository" + } + }, + "400": { + "description": "REPOSITORY_EXISTS: A repository with the same name already exists." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "View details of a repository", + "operationId": "GetRepository", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repository" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repository" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Remove a repository", + "operationId": "DeleteRepository", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information", + "name": "domain", + "in": "query" + } + ], + "responses": { + "204": { + "description": "success or repository does not exist" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "REPOSITORY_CONTAINS_TAGS_IN_NOTARY: This repository contains tags in notary and can't be deleted until all tags in notary are removed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + }, + "patch": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\nNote that a repository cannot be renamed this way.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Update details of a repository", + "operationId": "PatchRepository", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdateRepo" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repository" + } + }, + "400": { + "description": "INVALID_REPOSITORY_VISIBILITY: The visibility value of the repository is invalid." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Repository" + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/events": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the events for a repository", + "operationId": "ListRepoEvents", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "string", + "name": "publishedBefore", + "in": "query" + }, + { + "type": "string", + "name": "publishedAfter", + "in": "query" + }, + { + "type": "string", + "description": "UUID of the user or organization that performed the event", + "name": "actorId", + "in": "query" + }, + { + "type": "string", + "description": "Type of events to filter by", + "name": "eventType", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Exclude image pull events", + "name": "excludePull", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Events" + } + }, + "400": { + "description": "INVALID_PARAMETERS: Unable to parse query parameters" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.Events" + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/manifests": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the available manifests for a repository", + "operationId": "ListRepoManifests", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Manifest" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Manifest" + } + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/manifests/{reference}": { + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"write\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Delete a manifest for a repository", + "operationId": "DeleteRepoManifest", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "digest or tag for an image manifest", + "name": "reference", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success" + }, + "400": { + "description": "INVALID_DIGEST: The given digest is invalid." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REF: A ref with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/mirroringPolicies": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the mirroring policies for a repository", + "operationId": "ListRepoMirroringPolicies", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.MirroringPolicy" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.MirroringPolicy" + } + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Deletes a set of mirroring policies for a repository", + "operationId": "DeleteRepoMirroringPolicies", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/forms.DeleteMirroringPolicyIDs" + } + } + } + ], + "responses": { + "204": { + "description": "success" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pollMirroringPolicies": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the poll mirroring policies for a repository", + "operationId": "ListRepoPollMirroringPolicies", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + } + } + } + }, + "post": { + "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Create a poll mirroring policy for a repository", + "operationId": "CreateRepoPollMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreatePollMirroringPolicy" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_POLL_MIRRORING_POLICY: The given poll mirroring policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pollMirroringPolicies/{pollmirroringpolicyid}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Retrieve a specific poll mirroring policy for a repository", + "operationId": "GetRepoPollMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "poll mirroring policy id", + "name": "pollmirroringpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_POLL_MIRRORING_POLICY: A poll mirroring policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + } + } + }, + "put": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Updates a specific poll mirroring policy for a repository", + "operationId": "UpdateRepoPollMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "poll mirroring policy id", + "name": "pollmirroringpolicyid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdatePollMirroringPolicy" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_POLL_MIRRORING_POLICY: The given poll mirroring policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PollMirroringPolicy" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Deletes a specific poll mirroring policy for a repository", + "operationId": "DeleteRepoPollMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "poll mirroring policy id", + "name": "pollmirroringpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or poll mirroring policy does not exist" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_POLL_MIRRORING_POLICY: A poll mirroring policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/promotionPolicies": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the source or target repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the promotion policies for a repository", + "operationId": "ListRepoPromotionPolicies", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to list promotion policies for a repository as a source or destination.", + "name": "source", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + } + } + } + }, + "post": { + "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source and target repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n\nThe tag template is used to rename the tag in the target repository. The\nfollowing symbols are allowed:\n- \"%n\": The tag to promote (e.g. 1, 4.5, latest)\n- \"%A\": Day of the week (e.g. Sunday, Monday)\n- \"%a\": Day of the week, abbreviated (e.g. Sun, Mon , Tue)\n- \"%w\": Day of the week, as a number (e.g. 0, 1, 6)\n- \"%d\": Number for the day of the month (e.g. 01, 15, 31)\n- \"%B\": Month (e.g. January, December)\n- \"%b\": Month, abbreviated (e.g. Jan, Jun, Dec)\n- \"%m\": Month, as a number (e.g. 01, 06, 12)\n- \"%Y\": Year (e.g. 1999, 2015, 2048)\n- \"%y\": Year, two digits (e.g. 99, 15, 48)\n- \"%H\": Hour, in 24 hour format (e.g. 00, 12, 23)\n- \"%I\": Hour, in 12 hour format (e.g. 01, 10, 10)\n- \"%p\": Period of the day (e.g. AM, PM)\n- \"%M\": Minute (e.g. 00, 10, 59)\n- \"%S\": Second (e.g. 00, 10, 59)\n- \"%f\": Microsecond (e.g. 000000, 999999)\n- \"%Z\": Name for the timezone (e.g. UTC, PST, EST)\n- \"%j\": Day of the year (e.g. 001, 200, 366)\n- \"%W\": Week of the year (e.g. 00, 10 , 53)\n", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Create a promotion policy for a repository", + "operationId": "CreateRepoPromotionPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreatePromotionPolicy" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + }, + "400": { + "description": "INVALID_PROMOTION_POLICY: The given promotion policy is invalid." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/promotionPolicies/{promotionpolicyid}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the source or target repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Retrieve a specific promotion policy for a repository", + "operationId": "GetRepoPromotionPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "promotion policy id", + "name": "promotionpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + } + } + }, + "put": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source and target repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Updates a specific promotion policy for a repository", + "operationId": "UpdateRepoPromotionPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "promotion policy id", + "name": "promotionpolicyid", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdatePromotionPolicy" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + }, + "400": { + "description": "INVALID_PROMOTION_POLICY: The given promotion policy is invalid." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PromotionPolicy" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source or target repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Deletes a specific promotion policy for a repository", + "operationId": "DeleteRepoPromotionPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "promotion policy id", + "name": "promotionpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or promotion policy does not exist" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pruningPolicies": { + "get": { + "description": "*Authorization:* Client must be authenticated as a user who has visibility to the repository.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the pruning policies for a repository", + "operationId": "ListRepoPruningPolicies", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PruningPolicy" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PruningPolicy" + } + } + } + } + }, + "post": { + "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Create a pruning policy for a repository", + "operationId": "CreateRepoPruningPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreatePruningPolicy" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.PruningPolicy" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_PRUNING_POLICY: The given pruning policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pruningPolicies/test": { + "post": { + "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Test a pruning policy for a repository", + "operationId": "TestRepoPruningPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreatePruningPolicy" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ThinTag" + } + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_PRUNING_POLICY: The given pruning policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ThinTag" + } + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pruningPolicies/{pruningpolicyid}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Retrieve a specific pruning policy for a repository", + "operationId": "GetRepoPruningPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "pruning policy id", + "name": "pruningpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PruningPolicy" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PRUNING_POLICY: A pruning policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PruningPolicy" + } + } + } + }, + "put": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Updates a specific pruning policy for a repository", + "operationId": "UpdateRepoPruningPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "pruning policy id", + "name": "pruningpolicyid", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdatePruningPolicy" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PruningPolicy" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_PRUNING_POLICY: The given pruning policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PruningPolicy" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Deletes a specific pruning policy for a repository", + "operationId": "DeleteRepoPruningPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "pruning policy id", + "name": "pruningpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or pruning policy does not exist" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PRUNING_POLICY: A pruning policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pushMirroringPolicies": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the push mirroring policies for a repository", + "operationId": "ListRepoPushMirroringPolicies", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + } + } + } + }, + "post": { + "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n\nThe tag template is used to rename the tag in the target repository. The\nfollowing symbols are allowed:\n- \"%n\": The tag to promote (e.g. 1, 4.5, latest)\n- \"%A\": Day of the week (e.g. Sunday, Monday)\n- \"%a\": Day of the week, abbreviated (e.g. Sun, Mon , Tue)\n- \"%w\": Day of the week, as a number (e.g. 0, 1, 6)\n- \"%d\": Number for the day of the month (e.g. 01, 15, 31)\n- \"%B\": Month (e.g. January, December)\n- \"%b\": Month, abbreviated (e.g. Jan, Jun, Dec)\n- \"%m\": Month, as a number (e.g. 01, 06, 12)\n- \"%Y\": Year (e.g. 1999, 2015, 2048)\n- \"%y\": Year, two digits (e.g. 99, 15, 48)\n- \"%H\": Hour, in 24 hour format (e.g. 00, 12, 23)\n- \"%I\": Hour, in 12 hour format (e.g. 01, 10, 10)\n- \"%p\": Period of the day (e.g. AM, PM)\n- \"%M\": Minute (e.g. 00, 10, 59)\n- \"%S\": Second (e.g. 00, 10, 59)\n- \"%f\": Microsecond (e.g. 000000, 999999)\n- \"%Z\": Name for the timezone (e.g. UTC, PST, EST)\n- \"%j\": Day of the year (e.g. 001, 200, 366)\n- \"%W\": Week of the year (e.g. 00, 10 , 53)\n", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Create a push mirroring policy for a repository", + "operationId": "CreateRepoPushMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreatePushMirroringPolicy" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_PUSH_MIRRORING_POLICY: The given push mirroring policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/pushMirroringPolicies/{pushmirroringpolicyid}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Retrieve a specific push mirroring policy for a repository", + "operationId": "GetRepoPushMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "push mirroring policy id", + "name": "pushmirroringpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PUSH_MIRRORING_POLICY: A push mirroring policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + } + } + }, + "put": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Updates a specific push mirroring policy for a repository", + "operationId": "UpdateRepoPushMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "push mirroring policy id", + "name": "pushmirroringpolicyid", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Whether to evaluate the policy on creation", + "name": "initialEvaluation", + "in": "query" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdatePushMirroringPolicy" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + }, + "400": { + "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "INVALID_PUSH_MIRRORING_POLICY: The given push mirroring policy is invalid." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.PushMirroringPolicy" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Deletes a specific push mirroring policy for a repository", + "operationId": "DeleteRepoPushMirroringPolicy", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "push mirroring policy id", + "name": "pushmirroringpolicyid", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or push mirroring policy does not exist" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_PUSH_MIRRORING_POLICY: A push mirroring policy with the given id does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/tags": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the available tags for a repository", + "operationId": "ListRepoTags", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the manifest for each tag", + "name": "includeManifests", + "in": "query" + }, + { + "type": "string", + "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information", + "name": "domain", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ListTag" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.ListTag" + } + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/tags/{reference}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\nIf the ref given is to a manifest list, multiple Tag objects will be returned, one for each manifest in the list.\nSimilarly if the ref is a digest the API will return all tags referencing that digest.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Retrieve a specific tag for a repository", + "operationId": "ListRepoTag", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "digest or tag for an image manifest", + "name": "reference", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information", + "name": "domain", + "in": "query" + }, + { + "type": "string", + "description": "Operating system of the tag", + "name": "os", + "in": "query" + }, + { + "type": "string", + "description": "Architecture of the tag", + "name": "arch", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Tag" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REF: A ref with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Tag" + } + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/tags/{tag}": { + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"write\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Delete a tag for a repository", + "operationId": "DeleteRepoTag", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name", + "name": "tag", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information", + "name": "domain", + "in": "query" + } + ], + "responses": { + "204": { + "description": "success" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "409": { + "description": "TAG_IN_NOTARY: This tag is in notary and can't be deleted until it is removed from notary" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/tags/{tag}/promotion": { + "post": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"read\" level access to the source repository and \"write\" level access to the target repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Promotes a specific tag for a repository", + "operationId": "CreateRepoTagPromotion", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name", + "name": "tag", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreatePromotion" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.Promotion" + } + }, + "400": { + "description": "INVALID_TAG_NAME: The given tag name is either too long or contains illegal characters." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/tags/{tag}/pushMirroring": { + "post": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"read\" level access to the local repository and \"write\" level access to the remote repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Mirrors a local tag by pushing to a remote repository", + "operationId": "CreateRepoTagPushMirroring", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name", + "name": "tag", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateMirroring" + } + } + ], + "responses": { + "201": { + "description": "success", + "schema": { + "$ref": "#/definitions/responses.Mirroring" + } + }, + "400": { + "description": "INVALID_TAG_NAME: The given tag name is either too long or contains illegal characters." + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/teamAccess": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List teams granted access to an organization-owned repository", + "operationId": "ListRepoTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListRepoTeamAccess" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListRepoTeamAccess" + } + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/teamAccess/{teamname}": { + "put": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Set a team's access to an orgnization-owned repository", + "operationId": "GrantRepoTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "teamname", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.Access" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListRepoTeamAccess" + } + }, + "400": { + "description": "the team does not belong to the organization" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListRepoTeamAccess" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "Revoke a team's acccess to an organization-owned repository", + "operationId": "RevokeRepoTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "teamname", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or the team is not in the access list or there is no such team in the organization" + }, + "400": { + "description": "the repository is not owned by an organization" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/repositories/{namespace}/{reponame}/webhooks": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositories" + ], + "summary": "List the webhook subscriptions for a repository", + "operationId": "ListRepoWebhooks", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of repository", + "name": "reponame", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + } + } + } + }, + "/api/v0/repositoryNamespaces/{namespace}/teamAccess": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as an admin or a member of the organization.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositoryNamespaces" + ], + "summary": "List teams granted access to an organization-owned namespace of repositories", + "operationId": "ListRepoNamespaceTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The ID of the first record on the page", + "name": "pageStart", + "in": "query" + }, + { + "type": "integer", + "default": 10, + "description": "Maximum number of results to return", + "name": "pageSize", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Whether to include the resource count in the response header", + "name": "count", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListRepoNamespaceTeamAccess" + } + }, + "400": { + "description": "the namespace is not owned by an organization" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.ListRepoNamespaceTeamAccess" + } + } + } + } + }, + "/api/v0/repositoryNamespaces/{namespace}/teamAccess/{teamname}": { + "get": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level\naccess to the namespace or is a member of the team.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositoryNamespaces" + ], + "summary": "Get a team's granted access to an organization-owned namespace of repositories", + "operationId": "GetRepoNamespaceTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "teamname", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.NamespaceTeamAccess" + } + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_NAMESPACE_TEAM_ACCESS: An access grant for the given team in the given namespace does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.NamespaceTeamAccess" + } + } + } + }, + "put": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the namespace.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositoryNamespaces" + ], + "summary": "Set a team's access to an organization-owned namespace of repositories", + "operationId": "GrantRepoNamespaceTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "teamname", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.Access" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.NamespaceTeamAccess" + } + }, + "400": { + "description": "the team does not belong to the owning organization" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "$ref": "#/definitions/responses.NamespaceTeamAccess" + } + } + } + }, + "delete": { + "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the namespace.\n\t\t", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repositoryNamespaces" + ], + "summary": "Revoke a team's access to an organization-owned namespace of repositories", + "operationId": "RevokeRepoNamespaceTeamAccess", + "parameters": [ + { + "type": "string", + "description": "namespace/owner of repository", + "name": "namespace", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "teamname", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "success or the team does not exist in the access list or there is no such team in the organization" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + } + } + } + }, + "/api/v0/webhooks": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "webhooks" + ], + "summary": "List Webhooks", + "operationId": "ListWebhooks", + "parameters": [ + { + "type": "string", + "default": "any", + "description": "The type of webhook to list", + "name": "webhookType", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + }, + "400": { + "description": "INVALID_JSON: Unable to parse JSON" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "webhooks" + ], + "summary": "Create Webhook", + "operationId": "CreateWebhook", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.Webhook" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + }, + "400": { + "description": "INVALID_JSON: Unable to parse JSON" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + } + } + } + }, + "/api/v0/webhooks/test": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "webhooks" + ], + "summary": "Test Webhook", + "operationId": "TestWebhook", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.WebhookTestPayload" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "INVALID_JSON: Unable to parse JSON" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK" + } + } + } + }, + "/api/v0/webhooks/update": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "webhooks" + ], + "summary": "Update Webhook", + "operationId": "UpdateWebhook", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.WebhookUpdate" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + }, + "400": { + "description": "INVALID_JSON: Unable to parse JSON" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Webhook" + } + } + } + } + } + }, + "/api/v0/webhooks/{webhook}": { + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "webhooks" + ], + "summary": "Delete Webhook", + "operationId": "DeleteWebhook", + "parameters": [ + { + "type": "string", + "description": "webhook subscription ID", + "name": "webhook", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "401": { + "description": "NOT_AUTHENTICATED: The client is not authenticated." + }, + "403": { + "description": "NOT_AUTHORIZED: The client is not authorized." + }, + "404": { + "description": "NO_SUCH_WEBHOOK: A webhook subscription with the given name does not exist for the given repository." + }, + "405": { + "description": "NOT_ALLOWED: Method Not Allowed" + }, + "406": { + "description": "NOT_ACCEPTABLE: Not Acceptable" + }, + "415": { + "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type" + }, + "default": { + "description": "OK" + } + } + } + }, + "/api/v0/workers": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "workers" + ], + "summary": "List all workers", + "operationId": "ListWorkers", + "responses": { + "200": { + "description": "Success, list of workers returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Workers" + } + }, + "default": { + "description": "Success, list of workers returned.", + "schema": { + "$ref": "#/definitions/tmpresponses.Workers" + } + } + } + } + }, + "/api/v0/workers/{id}/capacity": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "workers" + ], + "summary": "Update the capacity for a worker", + "operationId": "UpdateWorkerCapacity", + "parameters": [ + { + "type": "string", + "description": "ID of worker to update", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/tmpforms.UpdateWorkerCapacity" + } + } + ], + "responses": { + "202": { + "description": "Success." + } + } + } + } + }, + "definitions": { + "forms.Access": { + "required": [ + "accessLevel" + ], + "properties": { + "accessLevel": { + "type": "string", + "enum": [ + "read-only", + "read-write", + "admin" + ] + } + } + }, + "forms.CreateAPIToken": { + "properties": { + "tokenLabel": { + "type": "string" + } + } + }, + "forms.CreateContentCache": { + "required": [ + "name", + "host" + ], + "properties": { + "host": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "forms.CreateMirroring": { + "required": [ + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "remoteTag", + "username", + "password", + "authToken" + ], + "properties": { + "authToken": { + "type": "string" + }, + "password": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "remoteTag": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "username": { + "type": "string" + } + } + }, + "forms.CreatePollMirroringPolicy": { + "required": [ + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "enabled", + "username", + "password", + "authToken" + ], + "properties": { + "authToken": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "username": { + "type": "string" + } + } + }, + "forms.CreatePromotion": { + "required": [ + "targetRepository", + "targetTag" + ], + "properties": { + "targetRepository": { + "type": "string" + }, + "targetTag": { + "type": "string" + } + } + }, + "forms.CreatePromotionPolicy": { + "required": [ + "rules", + "targetRepository", + "tagTemplate", + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "tagTemplate": { + "type": "string" + }, + "targetRepository": { + "type": "string" + } + } + }, + "forms.CreatePruningPolicy": { + "required": [ + "rules", + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + } + } + }, + "forms.CreatePushMirroringPolicy": { + "required": [ + "rules", + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "tagTemplate", + "enabled", + "username", + "password", + "authToken" + ], + "properties": { + "authToken": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tagTemplate": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "forms.CreateRemoteRegistryCheck": { + "required": [ + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "username", + "password", + "authToken" + ], + "properties": { + "authToken": { + "type": "string" + }, + "password": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "username": { + "type": "string" + } + } + }, + "forms.CreateRepo": { + "required": [ + "name", + "shortDescription", + "longDescription", + "scanOnPush", + "immutableTags", + "enableManifestLists", + "tagLimit" + ], + "properties": { + "enableManifestLists": { + "type": "boolean" + }, + "immutableTags": { + "type": "boolean" + }, + "longDescription": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scanOnPush": { + "type": "boolean" + }, + "shortDescription": { + "type": "string" + }, + "tagLimit": { + "type": "integer", + "format": "integer" + }, + "visibility": { + "type": "string", + "enum": [ + "public", + "private" + ] + } + } + }, + "forms.DeleteMirroringPolicyIDs": { + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string" + } + } + }, + "forms.EmptyForm": {}, + "forms.Image": { + "required": [ + "name", + "digest" + ], + "properties": { + "digest": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "forms.ImagesForm": { + "required": [ + "images" + ], + "properties": { + "images": { + "type": "array", + "items": { + "$ref": "#/definitions/forms.Image" + } + } + } + }, + "forms.ScanOptions": { + "required": [ + "scan", + "check" + ], + "properties": { + "check": { + "type": "boolean" + }, + "scan": { + "type": "boolean" + } + } + }, + "forms.Settings": { + "required": [ + "dtrHost", + "sso", + "createRepositoryOnPush", + "disableUpgrades", + "reportAnalytics", + "anonymizeAnalytics", + "disableBackupWarning", + "webTLSCert", + "webTLSKey", + "webTLSCA", + "scanningEnabled", + "scanningSyncOnline", + "scanningDeadline", + "scanningEnableAutoRecheck", + "jobHistoryCompactionEnabled", + "jobHistoryToKeep", + "jobHistoryMaxAge", + "repoEventHistoryCompactionEnabled", + "repoEventHistoryToKeep", + "repoEventHistoryMaxAge", + "readOnlyRegistry" + ], + "properties": { + "anonymizeAnalytics": { + "type": "boolean" + }, + "createRepositoryOnPush": { + "type": "boolean" + }, + "disableBackupWarning": { + "type": "boolean" + }, + "disableUpgrades": { + "type": "boolean" + }, + "dtrHost": { + "type": "string" + }, + "jobHistoryCompactionEnabled": { + "type": "boolean" + }, + "jobHistoryMaxAge": { + "type": "string" + }, + "jobHistoryToKeep": { + "type": "integer", + "format": "int64" + }, + "readOnlyRegistry": { + "type": "boolean" + }, + "repoEventHistoryCompactionEnabled": { + "type": "boolean" + }, + "repoEventHistoryMaxAge": { + "type": "string" + }, + "repoEventHistoryToKeep": { + "type": "integer", + "format": "int64" + }, + "reportAnalytics": { + "type": "boolean" + }, + "scanningDeadline": { + "type": "integer" + }, + "scanningEnableAutoRecheck": { + "type": "boolean" + }, + "scanningEnabled": { + "type": "boolean" + }, + "scanningSyncOnline": { + "type": "boolean" + }, + "sso": { + "type": "boolean" + }, + "webTLSCA": { + "type": "string" + }, + "webTLSCert": { + "type": "string" + }, + "webTLSKey": { + "type": "string" + } + } + }, + "forms.ToggleScanOnPush": { + "required": [ + "scanOnPush" + ], + "properties": { + "scanOnPush": { + "type": "boolean" + } + } + }, + "forms.UpdateAPIToken": { + "properties": { + "isActive": { + "type": "boolean" + }, + "tokenLabel": { + "type": "string" + } + } + }, + "forms.UpdatePollMirroringPolicy": { + "properties": { + "authToken": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "username": { + "type": "string" + } + } + }, + "forms.UpdatePromotionPolicy": { + "properties": { + "enabled": { + "type": "boolean" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "tagTemplate": { + "type": "string" + }, + "targetRepository": { + "type": "string" + } + } + }, + "forms.UpdatePruningPolicy": { + "properties": { + "enabled": { + "type": "boolean" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + } + } + }, + "forms.UpdatePushMirroringPolicy": { + "properties": { + "authToken": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tagTemplate": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "forms.UpdateRepo": { + "required": [ + "immutableTags" + ], + "properties": { + "enableManifestLists": { + "type": "boolean" + }, + "immutableTags": { + "type": "boolean" + }, + "longDescription": { + "type": "string" + }, + "scanOnPush": { + "type": "boolean" + }, + "shortDescription": { + "type": "string" + }, + "tagLimit": { + "type": "integer", + "format": "integer" + }, + "visibility": { + "type": "string", + "enum": [ + "public", + "private" + ] + } + } + }, + "forms.UserSettings": { + "properties": { + "contentCacheUUID": { + "type": "string" + } + } + }, + "forms.VulnOverrideOption": { + "required": [ + "component", + "componentVersion", + "cve", + "notes" + ], + "properties": { + "component": { + "type": "string" + }, + "componentVersion": { + "type": "string" + }, + "cve": { + "type": "string" + }, + "notes": { + "type": "string" + } + } + }, + "forms.Webhook": { + "required": [ + "endpoint", + "tlsCert", + "skipTLSVerification" + ], + "properties": { + "endpoint": { + "type": "string" + }, + "key": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tlsCert": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "TAG_PUSH", + "TAG_PULL", + "TAG_DELETE", + "PROMOTION", + "PUSH_MIRRORING", + "POLL_MIRRORING", + "MANIFEST_PUSH", + "MANIFEST_PULL", + "MANIFEST_DELETE", + "REPO_EVENT", + "SCAN_COMPLETED", + "SCAN_FAILED", + "SCANNER_UPDATE_COMPLETED" + ] + } + } + }, + "forms.WebhookTestPayload": { + "required": [ + "type", + "endpoint", + "tlsCert", + "skipTLSVerification" + ], + "properties": { + "endpoint": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tlsCert": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "forms.WebhookUpdate": { + "required": [ + "id", + "inactive", + "tlsCert", + "skipTLSVerification" + ], + "properties": { + "id": { + "type": "string" + }, + "inactive": { + "type": "boolean" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tlsCert": { + "type": "string" + } + } + }, + "responses.APIToken": { + "required": [ + "hashedToken", + "tokenLabel", + "isActive", + "lastUsed", + "createdAt", + "generatedBy", + "creatorUa" + ], + "properties": { + "createdAt": { + "type": "string", + "format": "date-time" + }, + "creatorUa": { + "type": "string" + }, + "generatedBy": { + "type": "string" + }, + "hashedToken": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "lastUsed": { + "type": "string", + "format": "date-time" + }, + "tokenLabel": { + "type": "string" + } + } + }, + "responses.Account": { + "required": [ + "name", + "id", + "fullName", + "isOrg" + ], + "properties": { + "fullName": { + "description": "Full Name of the account", + "type": "string" + }, + "id": { + "description": "ID of the account", + "type": "string" + }, + "isActive": { + "description": "Whether the user is active and can login (users only)", + "type": "boolean" + }, + "isAdmin": { + "description": "Whether the user is a system admin (users only)", + "type": "boolean" + }, + "isImported": { + "description": "Whether the user was imported from an upstream identity provider", + "type": "boolean" + }, + "isOrg": { + "description": "Whether the account is an organization (or user)", + "type": "boolean" + }, + "membersCount": { + "description": "The number of members of the organization", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name of the account", + "type": "string" + }, + "teamsCount": { + "description": "The number of teams in the organization", + "type": "integer", + "format": "int32" + } + } + }, + "responses.Alert": { + "required": [ + "message" + ], + "properties": { + "class": { + "type": "string" + }, + "id": { + "type": "string" + }, + "img": { + "type": "string" + }, + "message": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "responses.Autocomplete": { + "properties": { + "accountResults": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Account" + } + }, + "repositoryResults": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Repository" + } + } + } + }, + "responses.ClusterStatus": { + "required": [ + "rethink_system_tables", + "replica_health", + "replica_timestamp", + "replica_readonly", + "gc_lock_holder" + ], + "properties": { + "gc_lock_holder": { + "type": "string" + }, + "replica_health": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "replica_readonly": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "replica_timestamp": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "rethink_system_tables": { + "type": "object" + } + } + }, + "responses.Component": { + "required": [ + "component", + "version", + "vulns", + "fullpath" + ], + "properties": { + "component": { + "type": "string" + }, + "fullpath": { + "type": "array", + "items": { + "type": "string" + } + }, + "license": { + "$ref": "#/definitions/responses.License" + }, + "version": { + "type": "string" + }, + "vulns": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.VulnerabilityDetails" + } + } + } + }, + "responses.ContentCache": { + "required": [ + "id", + "name", + "host" + ], + "properties": { + "host": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "responses.DetailedSummary": { + "required": [ + "sha256sum" + ], + "properties": { + "components": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Component" + } + }, + "sha256sum": { + "type": "string" + } + } + }, + "responses.DockerRepository": { + "required": [ + "description", + "is_official", + "is_trusted", + "name", + "star_count" + ], + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_trusted": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer", + "format": "int32" + } + } + }, + "responses.DockerSearch": { + "required": [ + "num_results", + "query", + "results" + ], + "properties": { + "num_results": { + "type": "integer", + "format": "int32" + }, + "query": { + "type": "string" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.DockerRepository" + } + } + } + }, + "responses.DockerfileLine": { + "required": [ + "line", + "layerDigest", + "size", + "isEmpty" + ], + "properties": { + "isEmpty": { + "type": "boolean" + }, + "layerDigest": { + "type": "string" + }, + "line": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "size": { + "type": "integer", + "format": "int64" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "responses.Events": { + "required": [ + "events" + ], + "properties": { + "events": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.Event" + } + } + } + }, + "responses.Features": { + "required": [ + "scanningEnabled", + "scanningLicensed", + "promotionLicensed", + "mirroringLicensed", + "metadataStoreOptedIn", + "onlineGCEnabled", + "db_version", + "ucpHost" + ], + "properties": { + "db_version": { + "type": "integer", + "format": "int32" + }, + "metadataStoreOptedIn": { + "type": "boolean" + }, + "mirroringLicensed": { + "type": "boolean" + }, + "onlineGCEnabled": { + "type": "boolean" + }, + "promotionLicensed": { + "type": "boolean" + }, + "scanningEnabled": { + "type": "boolean" + }, + "scanningLicensed": { + "type": "boolean" + }, + "ucpHost": { + "type": "string" + } + } + }, + "responses.Language": { + "required": [ + "language" + ], + "properties": { + "language": { + "type": "string" + } + } + }, + "responses.LayerVulnOverride": { + "required": [ + "pk", + "digest", + "component", + "componentVersion", + "cve", + "notes" + ], + "properties": { + "component": { + "type": "string" + }, + "componentVersion": { + "type": "string" + }, + "cve": { + "type": "string" + }, + "digest": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "pk": { + "type": "string" + } + } + }, + "responses.License": { + "required": [ + "name", + "type", + "url" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "responses.ListRepoNamespaceTeamAccess": { + "required": [ + "namespace", + "teamAccessList" + ], + "properties": { + "namespace": { + "type": "string" + }, + "teamAccessList": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.TeamAccess" + } + } + } + }, + "responses.ListRepoTeamAccess": { + "required": [ + "repository", + "teamAccessList" + ], + "properties": { + "repository": { + "$ref": "#/definitions/responses.Repository" + }, + "teamAccessList": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.TeamAccess" + } + } + } + }, + "responses.ListTag": { + "required": [ + "name", + "digest", + "author", + "updatedAt", + "createdAt", + "hashMismatch", + "inNotary", + "manifest" + ], + "properties": { + "author": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "digest": { + "type": "string" + }, + "hashMismatch": { + "description": "true if the hashes from notary and registry don't match", + "type": "boolean" + }, + "inNotary": { + "description": "true if the tag exists in Notary", + "type": "boolean" + }, + "manifest": { + "$ref": "#/definitions/responses.Manifest" + }, + "mirroring": { + "$ref": "#/definitions/responses.Mirroring" + }, + "name": { + "type": "string" + }, + "promotion": { + "$ref": "#/definitions/responses.Promotion" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + } + }, + "responses.ListTeamRepoAccess": { + "required": [ + "team", + "repositoryAccessList" + ], + "properties": { + "repositoryAccessList": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.RepoAccess" + } + }, + "team": { + "$ref": "#/definitions/responses.Team" + } + } + }, + "responses.Manifest": { + "required": [ + "digest" + ], + "properties": { + "architecture": { + "type": "string" + }, + "author": { + "type": "string" + }, + "configDigest": { + "type": "string" + }, + "configMediaType": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "digest": { + "type": "string" + }, + "dockerfile": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.DockerfileLine" + } + }, + "mediaType": { + "type": "string" + }, + "os": { + "type": "string" + }, + "osVersion": { + "type": "string" + }, + "size": { + "type": "integer", + "format": "int64" + } + } + }, + "responses.Mirroring": { + "required": [ + "mirroringPolicyID", + "digest", + "remoteRepository", + "remoteTag" + ], + "properties": { + "digest": { + "type": "string" + }, + "mirroringPolicyID": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "remoteTag": { + "type": "string" + } + } + }, + "responses.MirroringPolicy": { + "required": [ + "id", + "mirroringType", + "username", + "localRepository", + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "enabled", + "lastMirroredAt", + "lastStatus" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastMirroredAt": { + "type": "string" + }, + "lastStatus": { + "$ref": "#/definitions/schema.MirroringStatus" + }, + "localRepository": { + "type": "string" + }, + "mirroringType": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tagTemplate": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "responses.NamespaceTeamAccess": { + "required": [ + "accessLevel", + "team", + "namespace" + ], + "properties": { + "accessLevel": { + "type": "string", + "enum": [ + "read-only", + "read-write", + "admin" + ] + }, + "namespace": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/responses.Team" + } + } + }, + "responses.NautilusStatus": { + "required": [ + "state", + "scanner_version", + "scannerUpdatedAt", + "db_version", + "db_updated_at", + "lastDBUpdateFailed", + "lastVulnOverridesDBUpdateFailed" + ], + "properties": { + "db_updated_at": { + "type": "string", + "format": "date-time" + }, + "db_version": { + "type": "integer", + "format": "int32" + }, + "lastDBUpdateFailed": { + "type": "boolean" + }, + "lastVulnOverridesDBUpdateFailed": { + "type": "boolean" + }, + "replicas": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/schema.ScannerFingerprint" + } + }, + "scannerUpdatedAt": { + "type": "string", + "format": "date-time" + }, + "scanner_version": { + "type": "integer", + "format": "int32" + }, + "state": { + "type": "integer", + "format": "int32" + } + } + }, + "responses.NewAPIToken": { + "required": [ + "token", + "hashedToken", + "tokenLabel", + "isActive", + "lastUsed", + "createdAt", + "generatedBy", + "creatorUa" + ], + "properties": { + "createdAt": { + "type": "string", + "format": "date-time" + }, + "creatorUa": { + "type": "string" + }, + "generatedBy": { + "type": "string" + }, + "hashedToken": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "lastUsed": { + "type": "string", + "format": "date-time" + }, + "token": { + "type": "string" + }, + "tokenLabel": { + "type": "string" + } + } + }, + "responses.Note": { + "required": [ + "reason", + "type" + ], + "properties": { + "reason": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "responses.OldScanSummary": { + "required": [ + "namespace", + "reponame", + "tag", + "critical", + "major", + "minor", + "last_scan_status", + "check_completed_at", + "should_rescan", + "has_foreign_layers" + ], + "properties": { + "check_completed_at": { + "type": "string", + "format": "date-time" + }, + "critical": { + "type": "integer", + "format": "int32" + }, + "has_foreign_layers": { + "type": "boolean" + }, + "last_scan_status": { + "type": "integer", + "format": "int32" + }, + "layer_details": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.DetailedSummary" + } + }, + "major": { + "type": "integer", + "format": "int32" + }, + "minor": { + "type": "integer", + "format": "int32" + }, + "namespace": { + "type": "string" + }, + "reponame": { + "type": "string" + }, + "should_rescan": { + "type": "boolean" + }, + "tag": { + "type": "string" + } + } + }, + "responses.PollMirroringPolicy": { + "required": [ + "id", + "username", + "localRepository", + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "enabled", + "lastMirroredAt", + "lastStatus" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastMirroredAt": { + "type": "string" + }, + "lastStatus": { + "$ref": "#/definitions/schema.MirroringStatus" + }, + "localRepository": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "username": { + "type": "string" + } + } + }, + "responses.Promotion": { + "required": [ + "promotionPolicyID", + "string", + "sourceRepository", + "sourceTag" + ], + "properties": { + "promotionPolicyID": { + "type": "string" + }, + "sourceRepository": { + "type": "string" + }, + "sourceTag": { + "type": "string" + }, + "string": { + "type": "string" + } + } + }, + "responses.PromotionPolicy": { + "required": [ + "id", + "rules", + "sourceRepository", + "targetRepository", + "tagTemplate", + "enabled", + "lastPromotedAt" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastPromotedAt": { + "type": "string", + "format": "date-time" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "sourceRepository": { + "type": "string" + }, + "tagTemplate": { + "type": "string" + }, + "targetRepository": { + "type": "string" + } + } + }, + "responses.PruningPolicy": { + "required": [ + "id", + "rules", + "repository", + "enabled", + "lastPrunedAt" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastPrunedAt": { + "type": "string" + }, + "repository": { + "type": "string" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + } + } + }, + "responses.PushMirroringPolicy": { + "required": [ + "id", + "rules", + "username", + "localRepository", + "remoteHost", + "remoteRepository", + "remoteCA", + "skipTLSVerification", + "tagTemplate", + "enabled", + "lastMirroredAt", + "lastStatus" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "lastMirroredAt": { + "type": "string" + }, + "lastStatus": { + "$ref": "#/definitions/schema.MirroringStatus" + }, + "localRepository": { + "type": "string" + }, + "remoteCA": { + "type": "string" + }, + "remoteHost": { + "type": "string" + }, + "remoteRepository": { + "type": "string" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/definitions/ruleengine.Rule" + } + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tagTemplate": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "responses.RemoteRegistryCheck": { + "required": [ + "registryType", + "permissions" + ], + "properties": { + "permissions": { + "$ref": "#/definitions/responses.RemoteRepositoryPermissions" + }, + "registryType": { + "type": "string" + } + } + }, + "responses.RemoteRepositoryPermissions": { + "required": [ + "read", + "write" + ], + "properties": { + "read": { + "type": "boolean" + }, + "write": { + "type": "boolean" + } + } + }, + "responses.ReplicaSettings": { + "required": [ + "HTTPPort", + "HTTPSPort", + "node" + ], + "properties": { + "HTTPPort": { + "type": "integer" + }, + "HTTPSPort": { + "type": "integer" + }, + "node": { + "type": "string" + } + } + }, + "responses.RepoAccess": { + "required": [ + "accessLevel", + "repository" + ], + "properties": { + "accessLevel": { + "type": "string", + "enum": [ + "read-only", + "read-write", + "admin" + ] + }, + "repository": { + "$ref": "#/definitions/responses.Repository" + } + } + }, + "responses.RepoUserAccess": { + "required": [ + "accessLevel", + "user", + "repository" + ], + "properties": { + "accessLevel": { + "type": "string", + "enum": [ + "read-only", + "read-write", + "admin" + ] + }, + "repository": { + "$ref": "#/definitions/responses.Repository" + }, + "user": { + "$ref": "#/definitions/responses.Account" + } + } + }, + "responses.Repositories": { + "required": [ + "repositories" + ], + "properties": { + "repositories": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Repository" + } + } + } + }, + "responses.Repository": { + "required": [ + "id", + "namespace", + "namespaceType", + "name", + "shortDescription", + "visibility", + "scanOnPush", + "immutableTags", + "enableManifestLists", + "pulls", + "pushes", + "tagLimit" + ], + "properties": { + "enableManifestLists": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "immutableTags": { + "type": "boolean" + }, + "longDescription": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "namespaceType": { + "type": "string", + "enum": [ + "user", + "organization" + ] + }, + "pulls": { + "type": "integer", + "format": "integer" + }, + "pushes": { + "type": "integer", + "format": "integer" + }, + "scanOnPush": { + "type": "boolean" + }, + "shortDescription": { + "type": "string" + }, + "tagLimit": { + "type": "integer", + "format": "integer" + }, + "visibility": { + "type": "string", + "enum": [ + "public", + "private" + ] + } + } + }, + "responses.ScanSummary": { + "required": [ + "scannedImage", + "shouldRescan" + ], + "properties": { + "scanStatus": { + "type": "integer", + "format": "int32" + }, + "scannedImage": { + "$ref": "#/definitions/schema.ScannedImage" + }, + "shouldRescan": { + "type": "boolean" + } + } + }, + "responses.Settings": { + "required": [ + "dtrHost", + "sso", + "createRepositoryOnPush", + "replicaSettings", + "httpProxy", + "httpsProxy", + "noProxy", + "disableUpgrades", + "reportAnalytics", + "anonymizeAnalytics", + "disableBackupWarning", + "logProtocol", + "logHost", + "logLevel", + "webTLSCert", + "webTLSCA", + "replicaID", + "scanningEnabled", + "scanningSyncOnline", + "scanningDeadline", + "scanningEnableAutoRecheck", + "jobHistoryCompactionEnabled", + "jobHistoryToKeep", + "jobHistoryMaxAge", + "repoEventHistoryCompactionEnabled", + "repoEventHistoryToKeep", + "repoEventHistoryMaxAge", + "storageVolume", + "nfsHost", + "nfsPath", + "readOnlyRegistry" + ], + "properties": { + "anonymizeAnalytics": { + "type": "boolean" + }, + "createRepositoryOnPush": { + "type": "boolean" + }, + "disableBackupWarning": { + "type": "boolean" + }, + "disableUpgrades": { + "type": "boolean" + }, + "dtrHost": { + "type": "string" + }, + "httpProxy": { + "type": "string" + }, + "httpsProxy": { + "type": "string" + }, + "jobHistoryCompactionEnabled": { + "type": "boolean" + }, + "jobHistoryMaxAge": { + "type": "string" + }, + "jobHistoryToKeep": { + "type": "integer", + "format": "int64" + }, + "logHost": { + "type": "string" + }, + "logLevel": { + "type": "string" + }, + "logProtocol": { + "type": "string" + }, + "nfsHost": { + "type": "string" + }, + "nfsPath": { + "type": "string" + }, + "noProxy": { + "type": "string" + }, + "readOnlyRegistry": { + "type": "boolean" + }, + "replicaID": { + "type": "string" + }, + "replicaSettings": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/responses.ReplicaSettings" + } + }, + "repoEventHistoryCompactionEnabled": { + "type": "boolean" + }, + "repoEventHistoryMaxAge": { + "type": "string" + }, + "repoEventHistoryToKeep": { + "type": "integer", + "format": "int64" + }, + "reportAnalytics": { + "type": "boolean" + }, + "scanningDeadline": { + "type": "integer" + }, + "scanningEnableAutoRecheck": { + "type": "boolean" + }, + "scanningEnabled": { + "type": "boolean" + }, + "scanningSyncOnline": { + "type": "boolean" + }, + "sso": { + "type": "boolean" + }, + "storageVolume": { + "type": "string" + }, + "webTLSCA": { + "type": "string" + }, + "webTLSCert": { + "type": "string" + } + } + }, + "responses.Tag": { + "required": [ + "digest", + "createdAt", + "inNotary", + "manifest", + "name", + "author", + "updatedAt", + "hashMismatch" + ], + "properties": { + "author": { + "type": "string" + }, + "components": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.ScannerComponent" + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "digest": { + "type": "string" + }, + "hashMismatch": { + "description": "true if the hashes from notary and registry don't match", + "type": "boolean" + }, + "inNotary": { + "description": "true if the tag exists in Notary", + "type": "boolean" + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.ScannerLicense" + } + }, + "manifest": { + "$ref": "#/definitions/responses.Manifest" + }, + "mirroring": { + "$ref": "#/definitions/responses.Mirroring" + }, + "name": { + "type": "string" + }, + "promotion": { + "$ref": "#/definitions/responses.Promotion" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "vuln_summary": { + "$ref": "#/definitions/responses.OldScanSummary" + } + } + }, + "responses.Team": { + "required": [ + "id", + "clientUserIsMember" + ], + "properties": { + "clientUserIsMember": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, + "responses.TeamAccess": { + "required": [ + "accessLevel", + "team" + ], + "properties": { + "accessLevel": { + "type": "string", + "enum": [ + "read-only", + "read-write", + "admin" + ] + }, + "team": { + "$ref": "#/definitions/responses.Team" + } + } + }, + "responses.ThinScanSummaries": { + "required": [ + "images" + ], + "properties": { + "images": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/schema.ScannerVulnCount" + } + } + } + }, + "responses.ThinTag": { + "required": [ + "name", + "digest" + ], + "properties": { + "digest": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "responses.UserSettings": { + "required": [ + "ContentCacheUUID" + ], + "properties": { + "ContentCacheUUID": { + "type": "string" + } + } + }, + "responses.Vulnerability": { + "required": [ + "cve", + "cvss", + "summary" + ], + "properties": { + "cve": { + "type": "string" + }, + "cvss": { + "type": "number", + "format": "float" + }, + "summary": { + "type": "string" + } + } + }, + "responses.VulnerabilityDetails": { + "required": [ + "vuln", + "exact", + "notes" + ], + "properties": { + "exact": { + "type": "boolean" + }, + "notes": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Note" + } + }, + "vuln": { + "$ref": "#/definitions/responses.Vulnerability" + } + } + }, + "responses.Webhook": { + "required": [ + "id", + "type", + "key", + "endpoint", + "authorID", + "createdAt", + "inactive", + "tlsCert", + "skipTLSVerification" + ], + "properties": { + "authorID": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "endpoint": { + "type": "string" + }, + "id": { + "type": "string" + }, + "inactive": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "lastSuccessfulAt": { + "type": "string", + "format": "date-time" + }, + "skipTLSVerification": { + "type": "boolean" + }, + "tlsCert": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "ruleengine.Rule": { + "properties": { + "field": { + "type": "string" + }, + "operator": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "schema.Event": { + "required": [ + "id", + "publishedAt", + "actor", + "actorType", + "type", + "object", + "repository" + ], + "properties": { + "actor": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "id": { + "type": "string" + }, + "object": { + "$ref": "#/definitions/schema.Object" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "repository": { + "type": "string" + }, + "target": { + "$ref": "#/definitions/schema.Object" + }, + "type": { + "type": "string" + } + } + }, + "schema.LayerVulnOverride": { + "required": [ + "pk", + "digest", + "component", + "componentVersion", + "cve", + "notes" + ], + "properties": { + "component": { + "type": "string" + }, + "componentVersion": { + "type": "string" + }, + "cve": { + "type": "string" + }, + "digest": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "pk": { + "type": "string" + } + } + }, + "schema.MirroringStatus": { + "required": [ + "code", + "detail", + "timestamp" + ], + "properties": { + "code": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "schema.Object": { + "required": [ + "id", + "type" + ], + "properties": { + "content": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "schema.ScannedImage": { + "required": [ + "pk", + "namespace", + "repository", + "tag", + "manifestDigest", + "totalVulnCount", + "licenses", + "layers", + "components", + "cves", + "maxCVSSValue", + "scannerFingerprint", + "vulnOverrides" + ], + "properties": { + "components": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.ScannerComponent" + } + }, + "cves": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.ScannerCVE" + } + }, + "layers": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.ScannerLayer" + } + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.ScannerLicense" + } + }, + "manifestDigest": { + "type": "string" + }, + "maxCVSSValue": { + "type": "number", + "format": "float" + }, + "namespace": { + "type": "string" + }, + "pk": { + "type": "string" + }, + "repository": { + "type": "string" + }, + "scannerFingerprint": { + "$ref": "#/definitions/schema.ScannerFingerprint" + }, + "tag": { + "type": "string" + }, + "totalVulnCount": { + "$ref": "#/definitions/schema.ScannerVulnCount" + }, + "vulnOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/schema.LayerVulnOverride" + } + } + } + }, + "schema.ScannerCVE": { + "required": [ + "cvePK", + "summary", + "cvss", + "notes" + ], + "properties": { + "cvePK": { + "type": "string" + }, + "cvss": { + "type": "number", + "format": "float" + }, + "notes": { + "type": "string" + }, + "summary": { + "type": "string" + } + } + }, + "schema.ScannerComponent": { + "required": [ + "componentPK", + "vulnCount", + "name", + "version", + "filepaths", + "cves", + "licenses", + "source" + ], + "properties": { + "componentPK": { + "type": "string" + }, + "cves": { + "type": "array", + "items": { + "type": "string" + } + }, + "filepaths": { + "type": "array", + "items": { + "type": "string" + } + }, + "licenses": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "source": { + "type": "string" + }, + "version": { + "type": "string" + }, + "vulnCount": { + "$ref": "#/definitions/schema.ScannerVulnCount" + } + } + }, + "schema.ScannerFingerprint": { + "required": [ + "scannerType", + "version" + ], + "properties": { + "scannerType": { + "type": "integer", + "format": "int32" + }, + "version": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "schema.ScannerLayer": { + "required": [ + "digest", + "mediaType", + "author", + "size", + "components" + ], + "properties": { + "author": { + "type": "string" + }, + "components": { + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "type": "string" + }, + "mediaType": { + "type": "string" + }, + "size": { + "type": "integer", + "format": "int64" + } + } + }, + "schema.ScannerLicense": { + "required": [ + "name", + "url", + "type" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "schema.ScannerVulnCount": { + "required": [ + "critical", + "major", + "minor" + ], + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "major": { + "type": "integer", + "format": "int32" + }, + "minor": { + "type": "integer", + "format": "int32" + } + } + }, + "tmpforms.ActionConfigCreate": { + "required": [ + "action", + "parameters" + ], + "properties": { + "action": { + "description": "The action to modify the config for", + "type": "string" + }, + "parameters": { + "description": "Extra parameters to pass to the job. The available parameters depend on the job. These are overwritten by any corresponding parameters set in the job itself.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "tmpforms.CronCreate": { + "required": [ + "action", + "schedule", + "retries", + "capacityMap", + "parameters", + "deadline", + "stopTimeout" + ], + "properties": { + "action": { + "description": "The action which the cron will perform", + "type": "string" + }, + "capacityMap": { + "description": "The map of required capacity", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "deadline": { + "description": "After this amount of time has passed, a SIGTERM will be sent", + "type": "string" + }, + "parameters": { + "description": "Extra parameters to pass to the job. The available parameters depend on the job.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "retries": { + "description": "The number of times to retry a job if it fails", + "type": "integer", + "format": "int32" + }, + "schedule": { + "description": "The for the cron as a cronspec string: (seconds) (minutes) (hours) (day of month) (month) (day of week) or @hourly, @weekly, etc.", + "type": "string" + }, + "stopTimeout": { + "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive", + "type": "string" + } + } + }, + "tmpforms.EmptyForm": {}, + "tmpforms.JobSubmission": { + "required": [ + "action", + "parameters", + "retries", + "capacityMap", + "deadline", + "stopTimeout", + "scheduledAt" + ], + "properties": { + "action": { + "description": "The action which the job will perform", + "type": "string" + }, + "capacityMap": { + "description": "The map of required capacity", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "deadline": { + "description": "After this amount of time has passed, a SIGTERM will be sent", + "type": "string" + }, + "parameters": { + "description": "Parameters to start the job with", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "retries": { + "description": "The number of times to retry a job if it fails", + "type": "integer", + "format": "int32" + }, + "scheduledAt": { + "description": "The time at which to run the job. Empty string or no value means now. Format: RFC3339", + "type": "string" + }, + "stopTimeout": { + "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive", + "type": "string" + } + } + }, + "tmpforms.UpdateWorkerCapacity": { + "required": [ + "capacityMap" + ], + "properties": { + "capacityMap": { + "description": "The new capacity for the worker, representing roughly the amount of RAM to use", + "type": "object", + "additionalProperties": { + "type": "integer" + } + } + } + }, + "tmpresponses.ActionConfig": { + "required": [ + "id", + "action", + "parameters" + ], + "properties": { + "action": { + "description": "The action this config refers to.", + "type": "string" + }, + "id": { + "description": "Randomly generated UUID for foreign references.", + "type": "string" + }, + "parameters": { + "description": "Extra parameters to pass to the job. The available parameters depend on the job.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "tmpresponses.ActionConfigs": { + "required": [ + "actionConfigs" + ], + "properties": { + "actionConfigs": { + "type": "array", + "items": { + "$ref": "#/definitions/tmpresponses.ActionConfig" + } + } + } + }, + "tmpresponses.Cron": { + "required": [ + "id", + "action", + "schedule", + "retries", + "capacityMap", + "parameters", + "deadline", + "stopTimeout", + "nextRun" + ], + "properties": { + "action": { + "description": "The action to be performed by jobs spawned from this cron.", + "type": "string" + }, + "capacityMap": { + "description": "The map of required capacity", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "deadline": { + "type": "string" + }, + "id": { + "description": "Randomly generated UUID for foreign references.", + "type": "string" + }, + "nextRun": { + "description": "The next time the job will run.", + "type": "string", + "format": "date-time" + }, + "parameters": { + "description": "Extra parameters to pass to the job. The available parameters depend on the job.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "retries": { + "description": "The number of times to retry the job if it fails", + "type": "integer", + "format": "int32" + }, + "schedule": { + "description": "The schedule for this cron as a cronspec string: (seconds) (minutes) (hours) (day of month) (month) (day of week) or @hourly, @weekly, etc.", + "type": "string" + }, + "stopTimeout": { + "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive", + "type": "string" + } + } + }, + "tmpresponses.Crons": { + "required": [ + "crons" + ], + "properties": { + "crons": { + "type": "array", + "items": { + "$ref": "#/definitions/tmpresponses.Cron" + } + } + } + }, + "tmpresponses.Job": { + "required": [ + "id", + "retryFromID", + "workerID", + "status", + "scheduledAt", + "lastUpdated", + "action", + "retriesLeft", + "retriesTotal", + "capacityMap", + "parameters", + "deadline", + "stopTimeout" + ], + "properties": { + "action": { + "description": "The action this job performs", + "type": "string" + }, + "capacityMap": { + "description": "The map of required capacity", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "deadline": { + "type": "string" + }, + "id": { + "description": "The ID of the job", + "type": "string" + }, + "lastUpdated": { + "description": "The last time at which the status of this job was updated", + "type": "string", + "format": "date-time" + }, + "parameters": { + "description": "Extra parameters to pass to the job. The available parameters depend on the job.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "retriesLeft": { + "description": "The number of times to retry the job if it fails", + "type": "integer", + "format": "int32" + }, + "retriesTotal": { + "description": "The total number of times to retry the original job if it fails", + "type": "integer", + "format": "int32" + }, + "retryFromID": { + "description": "The ID of the job this job retried from", + "type": "string" + }, + "scheduledAt": { + "description": "The time at which this job was scheduled", + "type": "string", + "format": "date-time" + }, + "status": { + "description": "The current status of the job", + "type": "string", + "enum": [ + "waiting", + "running", + "done", + "canceled", + "errored" + ] + }, + "stopTimeout": { + "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive", + "type": "string" + }, + "workerID": { + "description": "The ID of the worker which performed the job, unclaimed by a worker if empty", + "type": "string" + } + } + }, + "tmpresponses.JobLog": { + "required": [ + "data", + "lineNum" + ], + "properties": { + "data": { + "type": "string" + }, + "lineNum": { + "type": "integer", + "format": "int32" + } + } + }, + "tmpresponses.Jobs": { + "required": [ + "jobs" + ], + "properties": { + "jobs": { + "type": "array", + "items": { + "$ref": "#/definitions/tmpresponses.Job" + } + } + } + }, + "tmpresponses.Worker": { + "required": [ + "id", + "status", + "capacityMap", + "heartbeatExpiration" + ], + "properties": { + "capacityMap": { + "description": "A map used to represent now much load the worker should be allocated. Only security scanning jobs use this and the value is roughly equivalent to expected memory usage in bytes.", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "heartbeatExpiration": { + "description": "Time after which the worker should be considered dead.", + "type": "string" + }, + "id": { + "description": "Randomly generated UUID for foreign references.", + "type": "string" + }, + "status": { + "description": "Status of the worker", + "type": "string" + } + } + }, + "tmpresponses.Workers": { + "required": [ + "workers" + ], + "properties": { + "workers": { + "type": "array", + "items": { + "$ref": "#/definitions/tmpresponses.Worker" + } + } + } + } + }, + "tags": [ + { + "description": "Accounts", + "name": "accounts" + }, + { + "description": "Admin", + "name": "meta" + }, + { + "description": "Content Caches", + "name": "content_caches" + }, + { + "description": "Repositories", + "name": "repositories" + }, + { + "description": "Repository Namespaces", + "name": "repositoryNamespaces" + }, + { + "description": "Events", + "name": "events" + }, + { + "description": "Docker Security Scanner", + "name": "imagescan" + }, + { + "description": "Webhooks", + "name": "webhooks" + }, + { + "description": "Jobs", + "name": "jobs" + }, + { + "description": "Crons", + "name": "crons" + }, + { + "description": "Workers", + "name": "workers" + }, + { + "description": "Action Configs", + "name": "action_configs" + } + ] +}