forked from TrueCloudLab/frostfs-rest-gw
3436 lines
86 KiB
Go
3436 lines
86 KiB
Go
// Code generated by go-swagger; DO NOT EDIT.
|
|
|
|
package restapi
|
|
|
|
// This file was generated by the swagger tool.
|
|
// Editing this file might prove futile when you re-run the swagger generate command
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
var (
|
|
// SwaggerJSON embedded version of the swagger document used at generation time
|
|
SwaggerJSON json.RawMessage
|
|
// FlatSwaggerJSON embedded flattened version of the swagger document used at generation time
|
|
FlatSwaggerJSON json.RawMessage
|
|
)
|
|
|
|
func init() {
|
|
SwaggerJSON = json.RawMessage([]byte(`{
|
|
"schemes": [
|
|
"http"
|
|
],
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "REST API for native integration with FrostFS.",
|
|
"title": "REST API FrostFS",
|
|
"version": "v1"
|
|
},
|
|
"host": "localhost:8090",
|
|
"basePath": "/v1",
|
|
"paths": {
|
|
"/accounting/balance/{address}": {
|
|
"get": {
|
|
"security": [],
|
|
"description": "Getting balance of provided wallet address in FrostFS.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Get balance in FrostFS",
|
|
"operationId": "getBalance",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded wallet address.",
|
|
"name": "address",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Balance of address in FrostFS",
|
|
"schema": {
|
|
"$ref": "#/definitions/Balance"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth": {
|
|
"post": {
|
|
"security": [],
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Form bearer token to further requests",
|
|
"operationId": "auth",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Owner Id (wallet address) that will sign the token.",
|
|
"name": "X-Bearer-Owner-Id",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 100,
|
|
"description": "Token lifetime in epoch.",
|
|
"name": "X-Bearer-Lifetime",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Form token for all users or only for this gate.",
|
|
"name": "X-Bearer-For-All-Users",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"description": "Bearer tokens to form.",
|
|
"name": "tokens",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Bearer"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Base64 encoded stable binary marshaled bearer token bodies.",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/TokenResponse"
|
|
}
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsAuth",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth/bearer": {
|
|
"get": {
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Form binary bearer token",
|
|
"operationId": "formBinaryBearer",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Base64 encoded stable binary marshaled bearer token.",
|
|
"schema": {
|
|
"$ref": "#/definitions/BinaryBearer"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsAuthBearer",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/containers": {
|
|
"get": {
|
|
"security": [],
|
|
"summary": "Get list of containers",
|
|
"operationId": "listContainers",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded owner id.",
|
|
"name": "ownerId",
|
|
"in": "query",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "The number of containers to skip before starting to collect the result set.",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"type": "integer",
|
|
"default": 100,
|
|
"description": "The numbers of containers to return.",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Containers info.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ContainerList"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Create new container in FrostFS",
|
|
"operationId": "putContainer",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provide this parameter to register container name in NNS service.",
|
|
"name": "name-scope-global",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"description": "Container info",
|
|
"name": "container",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/ContainerPutInfo"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Identifier of the created container.",
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"containerId"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv"
|
|
}
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsContainersPutList",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/containers/{containerId}": {
|
|
"get": {
|
|
"security": [],
|
|
"summary": "Get container by id",
|
|
"operationId": "getContainer",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Container info.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ContainerInfo"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete container by id",
|
|
"operationId": "deleteContainer",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful deletion.",
|
|
"schema": {
|
|
"$ref": "#/definitions/SuccessResponse"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsContainersGetDelete",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/containerId"
|
|
}
|
|
]
|
|
},
|
|
"/containers/{containerId}/eacl": {
|
|
"get": {
|
|
"security": [],
|
|
"summary": "Get container EACL by id",
|
|
"operationId": "getContainerEACL",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Container EACL information.",
|
|
"schema": {
|
|
"$ref": "#/definitions/Eacl"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Set container EACL by id",
|
|
"operationId": "putContainerEACL",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
},
|
|
{
|
|
"description": "EACL for container.",
|
|
"name": "eacl",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/Eacl"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful EACL updating.",
|
|
"schema": {
|
|
"$ref": "#/definitions/SuccessResponse"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsContainersEACL",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/containerId"
|
|
}
|
|
]
|
|
},
|
|
"/objects": {
|
|
"put": {
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Upload object to FrostFS",
|
|
"operationId": "putObject",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/fullBearerToken"
|
|
},
|
|
{
|
|
"description": "Object info to upload",
|
|
"name": "object",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/ObjectUpload"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Address of uploaded objects",
|
|
"schema": {
|
|
"$ref": "#/definitions/Address"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsObjectsPut",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/objects/{containerId}/search": {
|
|
"post": {
|
|
"security": [
|
|
{},
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"summary": "Search objects by filters",
|
|
"operationId": "searchObjects",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/fullBearerToken"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "The number of containers to skip before starting to collect the result set.",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"type": "integer",
|
|
"default": 100,
|
|
"description": "The numbers of containers to return.",
|
|
"name": "limit",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"description": "Filters to search objects.",
|
|
"name": "searchFilters",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/SearchFilters"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of objects",
|
|
"schema": {
|
|
"$ref": "#/definitions/ObjectList"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsObjectsSearch",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Base64 encoded stable binary marshaled bearer token.",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/containerId"
|
|
}
|
|
]
|
|
},
|
|
"/objects/{containerId}/{objectId}": {
|
|
"get": {
|
|
"security": [
|
|
{},
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"summary": "Get object info by address",
|
|
"operationId": "getObjectInfo",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/fullBearerToken"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Range offset to start reading data.",
|
|
"name": "range-offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"minimum": 1,
|
|
"type": "integer",
|
|
"description": "Length of data range.",
|
|
"name": "range-length",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"maximum": 524288000,
|
|
"type": "integer",
|
|
"default": 4194304,
|
|
"description": "Max payload size (in bytes) that can be included in the response.\nIf the actual size is greater than this params the payload won't be included in the response.\n",
|
|
"name": "max-payload-size",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Object info",
|
|
"schema": {
|
|
"$ref": "#/definitions/ObjectInfo"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Remove object from FrostFS",
|
|
"operationId": "deleteObject",
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/signatureParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureKeyParam"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/signatureScheme"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/fullBearerToken"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful deletion.",
|
|
"schema": {
|
|
"$ref": "#/definitions/SuccessResponse"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsObjectsGetDelete",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/parameters/containerId"
|
|
},
|
|
{
|
|
"$ref": "#/parameters/objectId"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"definitions": {
|
|
"Action": {
|
|
"description": "Rule execution result action in FrostFS EACL. Either allows or denies access if the rule's filters match.",
|
|
"type": "string",
|
|
"enum": [
|
|
"ALLOW",
|
|
"DENY"
|
|
]
|
|
},
|
|
"Address": {
|
|
"description": "Address of the object in FrostFS.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"objectId"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"objectId": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
|
|
}
|
|
},
|
|
"Attribute": {
|
|
"description": "Attribute is a pair of strings that can be attached to a container or an object.",
|
|
"type": "object",
|
|
"required": [
|
|
"key",
|
|
"value"
|
|
],
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"key": "User-Defined-Tag",
|
|
"value": "tag value"
|
|
}
|
|
},
|
|
"Balance": {
|
|
"type": "object",
|
|
"required": [
|
|
"address",
|
|
"value",
|
|
"precision"
|
|
],
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"precision": {
|
|
"type": "integer"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"Bearer": {
|
|
"description": "Bearer token that is expected to be formed.",
|
|
"type": "object",
|
|
"properties": {
|
|
"container": {
|
|
"$ref": "#/definitions/Rule"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"object": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Record"
|
|
}
|
|
}
|
|
},
|
|
"example": [
|
|
{
|
|
"name": "my-bearer-token",
|
|
"object": [
|
|
{
|
|
"action": "ALLOW",
|
|
"filters": null,
|
|
"operation": "GET",
|
|
"targets": [
|
|
{
|
|
"keys": null,
|
|
"role": "OTHERS"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"container": {
|
|
"verb": "PUT"
|
|
},
|
|
"name": "my token to create container"
|
|
}
|
|
]
|
|
},
|
|
"BinaryBearer": {
|
|
"description": "Bearer token for object operations that is represented in binary form.",
|
|
"type": "object",
|
|
"required": [
|
|
"token"
|
|
],
|
|
"properties": {
|
|
"token": {
|
|
"description": "Base64 encoded bearer token.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"token": "ChIKDAoAGggIARABIgIIAxoCCGQSZgohA+J5jFWFMiOpyvMZBu9wwPTKsWsG0q206kVe63iuWP/wEkEE4SIV0QngnKppDf54QezUKmar7UQby6HzufT5yVIOvj7QEqZnOavrKW0chCeCwP0khda/j9k00ct6NMEDxQFW+g=="
|
|
}
|
|
},
|
|
"ContainerInfo": {
|
|
"description": "Information about container.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"containerName",
|
|
"version",
|
|
"ownerId",
|
|
"basicAcl",
|
|
"placementPolicy",
|
|
"attributes"
|
|
],
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"basicAcl": {
|
|
"type": "string"
|
|
},
|
|
"cannedAcl": {
|
|
"description": "The friendly name for the basicAcl field.",
|
|
"type": "string"
|
|
},
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"containerName": {
|
|
"type": "string"
|
|
},
|
|
"ownerId": {
|
|
"type": "string"
|
|
},
|
|
"placementPolicy": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"attribute": [
|
|
{
|
|
"key": "Timestamp",
|
|
"value": "1648810072"
|
|
},
|
|
{
|
|
"key": "Name",
|
|
"value": "container"
|
|
}
|
|
],
|
|
"basicAcl": "0x1fbf9fff",
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"containerName": "container",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
|
|
"placementPolicy": "REP 2",
|
|
"version": "2.11"
|
|
}
|
|
},
|
|
"ContainerList": {
|
|
"description": "List of containers info",
|
|
"type": "object",
|
|
"required": [
|
|
"size",
|
|
"containers"
|
|
],
|
|
"properties": {
|
|
"containers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/ContainerInfo"
|
|
}
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"example": {
|
|
"containers": [
|
|
{
|
|
"attribute": [
|
|
{
|
|
"key": "Timestamp",
|
|
"value": "1648810072"
|
|
},
|
|
{
|
|
"key": "Name",
|
|
"value": "container"
|
|
}
|
|
],
|
|
"basicAcl": "0x1fbf9fff",
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"containerName": "container",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
|
|
"placementPolicy": "REP 2",
|
|
"version": "2.11"
|
|
},
|
|
{
|
|
"attribute": [
|
|
{
|
|
"key": "Name",
|
|
"value": "container2"
|
|
}
|
|
],
|
|
"basicAcl": "0x1fbf9fff",
|
|
"containerId": "FsE7HLQBBYc2WFJzuTXMcpspDEmwUxsD5YmNb2r25uUu",
|
|
"containerName": "container2",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
|
|
"placementPolicy": "REP 1",
|
|
"version": "2.11"
|
|
}
|
|
],
|
|
"size": 2
|
|
}
|
|
},
|
|
"ContainerPutInfo": {
|
|
"description": "Request body to create container. To specify container name use appropriate property (name provided in attributes will be ignored).",
|
|
"type": "object",
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"basicAcl": {
|
|
"type": "string"
|
|
},
|
|
"containerName": {
|
|
"type": "string"
|
|
},
|
|
"placementPolicy": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"attributes": [
|
|
{
|
|
"key": "Custom-Attribute",
|
|
"value": "value"
|
|
}
|
|
],
|
|
"basicAcl": "public-read-write",
|
|
"containerName": "container",
|
|
"placementPolicy": "REP 3"
|
|
}
|
|
},
|
|
"Eacl": {
|
|
"description": "EACL FrostFS table.",
|
|
"type": "object",
|
|
"required": [
|
|
"records"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string",
|
|
"readOnly": true
|
|
},
|
|
"records": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Record"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"records": [
|
|
{
|
|
"action": "GET",
|
|
"filters": [
|
|
{
|
|
"headerType": "OBJECT",
|
|
"key": "FileName",
|
|
"matchType": "STRING_EQUAL",
|
|
"value": "myfile"
|
|
}
|
|
],
|
|
"operation": "ALLOW",
|
|
"targets": [
|
|
{
|
|
"role": "OTHERS"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"ErrorResponse": {
|
|
"description": "Error response.",
|
|
"type": "object",
|
|
"required": [
|
|
"type",
|
|
"message"
|
|
],
|
|
"properties": {
|
|
"code": {
|
|
"type": "integer"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"$ref": "#/definitions/ErrorType"
|
|
}
|
|
},
|
|
"example": {
|
|
"code": 1024,
|
|
"message": "incomplete object PUT by placement",
|
|
"type": "API"
|
|
}
|
|
},
|
|
"ErrorType": {
|
|
"description": "Error type. Allow determine source of the error.",
|
|
"type": "string",
|
|
"enum": [
|
|
"GW",
|
|
"API"
|
|
]
|
|
},
|
|
"Filter": {
|
|
"description": "Filter in FrostFS EACL to check particular properties of the request or the object.",
|
|
"type": "object",
|
|
"required": [
|
|
"headerType",
|
|
"matchType",
|
|
"key",
|
|
"value"
|
|
],
|
|
"properties": {
|
|
"headerType": {
|
|
"$ref": "#/definitions/HeaderType"
|
|
},
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"matchType": {
|
|
"$ref": "#/definitions/MatchType"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"headerType": "OBJECT",
|
|
"key": "FileName",
|
|
"matchType": "STRING_NOT_EQUAL",
|
|
"value": "myfile"
|
|
}
|
|
},
|
|
"HeaderType": {
|
|
"description": "Enumeration of possible sources of Headers to apply filters in FrostFS EACL.",
|
|
"type": "string",
|
|
"enum": [
|
|
"REQUEST",
|
|
"OBJECT",
|
|
"SERVICE"
|
|
]
|
|
},
|
|
"MatchType": {
|
|
"description": "Match type in FrostFS EACL filter.",
|
|
"type": "string",
|
|
"enum": [
|
|
"STRING_EQUAL",
|
|
"STRING_NOT_EQUAL"
|
|
]
|
|
},
|
|
"ObjectBaseInfo": {
|
|
"description": "Basic object information.",
|
|
"type": "object",
|
|
"required": [
|
|
"address"
|
|
],
|
|
"properties": {
|
|
"address": {
|
|
"$ref": "#/definitions/Address"
|
|
},
|
|
"filePath": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"address": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
|
|
},
|
|
"filePath": "/my/object/name.txt",
|
|
"name": "name.txt"
|
|
}
|
|
},
|
|
"ObjectInfo": {
|
|
"description": "Object information.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"objectId",
|
|
"ownerId",
|
|
"attributes",
|
|
"objectSize",
|
|
"payloadSize"
|
|
],
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"objectId": {
|
|
"type": "string"
|
|
},
|
|
"objectSize": {
|
|
"description": "Object full payload size",
|
|
"type": "integer"
|
|
},
|
|
"ownerId": {
|
|
"type": "string"
|
|
},
|
|
"payload": {
|
|
"description": "Base64 encoded object payload",
|
|
"type": "string"
|
|
},
|
|
"payloadSize": {
|
|
"description": "Payload size in response",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"example": {
|
|
"attribute": [
|
|
{
|
|
"key": "Timestamp",
|
|
"value": "1648810072"
|
|
},
|
|
{
|
|
"key": "Name",
|
|
"value": "object"
|
|
}
|
|
],
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM"
|
|
}
|
|
},
|
|
"ObjectList": {
|
|
"description": "List of objects.",
|
|
"type": "object",
|
|
"required": [
|
|
"size",
|
|
"objects"
|
|
],
|
|
"properties": {
|
|
"objects": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/ObjectBaseInfo"
|
|
}
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"example": {
|
|
"objects": [
|
|
{
|
|
"address": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
|
|
},
|
|
"name": "/my/object/name"
|
|
},
|
|
{
|
|
"address": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "3GbmMWusaWgMHokWui2zDunxMTzButuQMVLbtL3cDn8s"
|
|
},
|
|
"name": "/my/object/some/other/name"
|
|
}
|
|
],
|
|
"size": 2
|
|
}
|
|
},
|
|
"ObjectUpload": {
|
|
"description": "Request body to create object.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"fileName"
|
|
],
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"fileName": {
|
|
"type": "string"
|
|
},
|
|
"payload": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"attributes": [
|
|
{
|
|
"key": "User-Attribute",
|
|
"value": "some-value"
|
|
}
|
|
],
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"fileName": "myFile.txt",
|
|
"payload": "Y29udGVudCBvZiBmaWxl"
|
|
}
|
|
},
|
|
"Operation": {
|
|
"description": "Request's operation type to match in FrostFS EACL if the rule is applicable to a particular request.",
|
|
"type": "string",
|
|
"enum": [
|
|
"GET",
|
|
"HEAD",
|
|
"PUT",
|
|
"DELETE",
|
|
"SEARCH",
|
|
"RANGE",
|
|
"RANGEHASH"
|
|
]
|
|
},
|
|
"Principal": {
|
|
"type": "string"
|
|
},
|
|
"Record": {
|
|
"description": "A single FrostFS EACL rule.",
|
|
"type": "object",
|
|
"required": [
|
|
"action",
|
|
"operation",
|
|
"filters",
|
|
"targets"
|
|
],
|
|
"properties": {
|
|
"action": {
|
|
"$ref": "#/definitions/Action"
|
|
},
|
|
"filters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Filter"
|
|
}
|
|
},
|
|
"operation": {
|
|
"$ref": "#/definitions/Operation"
|
|
},
|
|
"targets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Target"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"action": "ALLOW",
|
|
"filters": null,
|
|
"operation": "GET",
|
|
"targets": [
|
|
{
|
|
"keys": null,
|
|
"role": "OTHERS"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"Role": {
|
|
"description": "Role for target in EACL.",
|
|
"type": "string",
|
|
"enum": [
|
|
"USER",
|
|
"SYSTEM",
|
|
"OTHERS",
|
|
"KEYS"
|
|
]
|
|
},
|
|
"Rule": {
|
|
"description": "Container session token rule.",
|
|
"type": "object",
|
|
"required": [
|
|
"verb"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"verb": {
|
|
"$ref": "#/definitions/Verb"
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "6jvKJCQr6e47Yx8SsbSN3fNgzroUJVkY66Q9wqxYcAjc",
|
|
"verb": "DELETE"
|
|
}
|
|
},
|
|
"SearchFilter": {
|
|
"description": "Search filter to find objects.",
|
|
"type": "object",
|
|
"required": [
|
|
"key",
|
|
"value",
|
|
"match"
|
|
],
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"match": {
|
|
"$ref": "#/definitions/SearchMatch"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"key": "FileName",
|
|
"match": "MatchStringEqual",
|
|
"value": "object-name"
|
|
}
|
|
},
|
|
"SearchFilters": {
|
|
"description": "List of SearchFilter elements.",
|
|
"type": "object",
|
|
"required": [
|
|
"filters"
|
|
],
|
|
"properties": {
|
|
"filters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/SearchFilter"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"filters": [
|
|
{
|
|
"key": "FileName",
|
|
"match": "MatchCommonPrefix",
|
|
"value": "some/prefix"
|
|
},
|
|
{
|
|
"key": "CustomAttribute",
|
|
"match": "MatchStringEqual",
|
|
"value": "tag-value"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"SearchMatch": {
|
|
"description": "Search match type.",
|
|
"type": "string",
|
|
"enum": [
|
|
"MatchStringEqual",
|
|
"MatchStringNotEqual",
|
|
"MatchNotPresent",
|
|
"MatchCommonPrefix"
|
|
]
|
|
},
|
|
"SuccessResponse": {
|
|
"description": "Success response.",
|
|
"type": "object",
|
|
"required": [
|
|
"success"
|
|
],
|
|
"properties": {
|
|
"success": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"example": {
|
|
"success": true
|
|
}
|
|
},
|
|
"Target": {
|
|
"description": "Target to apply the ACL rule. Can be a subject's role class or a list of public keys to match (KEYS role).",
|
|
"type": "object",
|
|
"required": [
|
|
"role",
|
|
"keys"
|
|
],
|
|
"properties": {
|
|
"keys": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"role": {
|
|
"$ref": "#/definitions/Role"
|
|
}
|
|
},
|
|
"example": {
|
|
"keys": [
|
|
"021dc56fc6d81d581ae7605a8e00e0e0bab6cbad566a924a527339475a97a8e38e"
|
|
],
|
|
"role": "KEYS"
|
|
}
|
|
},
|
|
"TokenResponse": {
|
|
"description": "Base64 encoded marshaled token (for container or for object operations).",
|
|
"type": "object",
|
|
"required": [
|
|
"type",
|
|
"token"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"token": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"$ref": "#/definitions/TokenType"
|
|
}
|
|
},
|
|
"example": [
|
|
{
|
|
"token": "ClYKBAgCEA0aCAgDEAEiAggDGggIARACIgIIAxoICAIQAiICCAMaCAgDEAIiAggDGggIBBACIgIIAxoICAUQAiICCAMaCAgGEAIiAggDGggIBxACIgIIAxIbChk182WEDFuAqq3nssrGOaH0NK0ZhzF8bu+YGgQIaBgE",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"token": "ChCpanIBJCpJuJz42KOmGMSnEhsKGTWquaX2Lq6GhhO4faOYkLD0f9WkXuYJlq4aBAhnGAMiIQJgFcIEghQB5lq3AJZOVswInwc1IGhlQ7NCUh4DFO3UATIECAEQAQ==",
|
|
"type": "container"
|
|
}
|
|
]
|
|
},
|
|
"TokenType": {
|
|
"description": "Type of token.",
|
|
"type": "string",
|
|
"enum": [
|
|
"object",
|
|
"container"
|
|
]
|
|
},
|
|
"Verb": {
|
|
"description": "Verb that describes the allowed container operation for token.",
|
|
"type": "string",
|
|
"enum": [
|
|
"PUT",
|
|
"DELETE",
|
|
"SETEACL"
|
|
]
|
|
}
|
|
},
|
|
"parameters": {
|
|
"containerId": {
|
|
"type": "string",
|
|
"description": "Base58 encoded container id.",
|
|
"name": "containerId",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
"fullBearerToken": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provided bearer token is final or gate should assemble it using signature.",
|
|
"name": "fullBearer",
|
|
"in": "query"
|
|
},
|
|
"objectId": {
|
|
"type": "string",
|
|
"description": "Base58 encoded object id.",
|
|
"name": "objectId",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
"signatureKeyParam": {
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
"signatureParam": {
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
"signatureScheme": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
}
|
|
},
|
|
"securityDefinitions": {
|
|
"BearerAuth": {
|
|
"description": "Bearer token body to provide with FrostFS request. Must have 'Bearer ' prefix.",
|
|
"type": "apiKey",
|
|
"name": "Authorization",
|
|
"in": "header"
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
]
|
|
}`))
|
|
FlatSwaggerJSON = json.RawMessage([]byte(`{
|
|
"schemes": [
|
|
"http"
|
|
],
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "REST API for native integration with FrostFS.",
|
|
"title": "REST API FrostFS",
|
|
"version": "v1"
|
|
},
|
|
"host": "localhost:8090",
|
|
"basePath": "/v1",
|
|
"paths": {
|
|
"/accounting/balance/{address}": {
|
|
"get": {
|
|
"security": [],
|
|
"description": "Getting balance of provided wallet address in FrostFS.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Get balance in FrostFS",
|
|
"operationId": "getBalance",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded wallet address.",
|
|
"name": "address",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Balance of address in FrostFS",
|
|
"schema": {
|
|
"$ref": "#/definitions/Balance"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth": {
|
|
"post": {
|
|
"security": [],
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Form bearer token to further requests",
|
|
"operationId": "auth",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Owner Id (wallet address) that will sign the token.",
|
|
"name": "X-Bearer-Owner-Id",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 100,
|
|
"description": "Token lifetime in epoch.",
|
|
"name": "X-Bearer-Lifetime",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Form token for all users or only for this gate.",
|
|
"name": "X-Bearer-For-All-Users",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"description": "Bearer tokens to form.",
|
|
"name": "tokens",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Bearer"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Base64 encoded stable binary marshaled bearer token bodies.",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/TokenResponse"
|
|
}
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsAuth",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth/bearer": {
|
|
"get": {
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Form binary bearer token",
|
|
"operationId": "formBinaryBearer",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Base64 encoded stable binary marshaled bearer token.",
|
|
"schema": {
|
|
"$ref": "#/definitions/BinaryBearer"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsAuthBearer",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/containers": {
|
|
"get": {
|
|
"security": [],
|
|
"summary": "Get list of containers",
|
|
"operationId": "listContainers",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded owner id.",
|
|
"name": "ownerId",
|
|
"in": "query",
|
|
"required": true
|
|
},
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "The number of containers to skip before starting to collect the result set.",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"type": "integer",
|
|
"default": 100,
|
|
"description": "The numbers of containers to return.",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Containers info.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ContainerList"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Create new container in FrostFS",
|
|
"operationId": "putContainer",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provide this parameter to register container name in NNS service.",
|
|
"name": "name-scope-global",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"description": "Container info",
|
|
"name": "container",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/ContainerPutInfo"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Identifier of the created container.",
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"containerId"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv"
|
|
}
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsContainersPutList",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/containers/{containerId}": {
|
|
"get": {
|
|
"security": [],
|
|
"summary": "Get container by id",
|
|
"operationId": "getContainer",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Container info.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ContainerInfo"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete container by id",
|
|
"operationId": "deleteContainer",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful deletion.",
|
|
"schema": {
|
|
"$ref": "#/definitions/SuccessResponse"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsContainersGetDelete",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded container id.",
|
|
"name": "containerId",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
]
|
|
},
|
|
"/containers/{containerId}/eacl": {
|
|
"get": {
|
|
"security": [],
|
|
"summary": "Get container EACL by id",
|
|
"operationId": "getContainerEACL",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Container EACL information.",
|
|
"schema": {
|
|
"$ref": "#/definitions/Eacl"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Set container EACL by id",
|
|
"operationId": "putContainerEACL",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"description": "EACL for container.",
|
|
"name": "eacl",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/Eacl"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful EACL updating.",
|
|
"schema": {
|
|
"$ref": "#/definitions/SuccessResponse"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsContainersEACL",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded container id.",
|
|
"name": "containerId",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
]
|
|
},
|
|
"/objects": {
|
|
"put": {
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"summary": "Upload object to FrostFS",
|
|
"operationId": "putObject",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provided bearer token is final or gate should assemble it using signature.",
|
|
"name": "fullBearer",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"description": "Object info to upload",
|
|
"name": "object",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/ObjectUpload"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Address of uploaded objects",
|
|
"schema": {
|
|
"$ref": "#/definitions/Address"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsObjectsPut",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/objects/{containerId}/search": {
|
|
"post": {
|
|
"security": [
|
|
{},
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"summary": "Search objects by filters",
|
|
"operationId": "searchObjects",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provided bearer token is final or gate should assemble it using signature.",
|
|
"name": "fullBearer",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "The number of containers to skip before starting to collect the result set.",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"type": "integer",
|
|
"default": 100,
|
|
"description": "The numbers of containers to return.",
|
|
"name": "limit",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"description": "Filters to search objects.",
|
|
"name": "searchFilters",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/SearchFilters"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of objects",
|
|
"schema": {
|
|
"$ref": "#/definitions/ObjectList"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsObjectsSearch",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Base64 encoded stable binary marshaled bearer token.",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded container id.",
|
|
"name": "containerId",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
]
|
|
},
|
|
"/objects/{containerId}/{objectId}": {
|
|
"get": {
|
|
"security": [
|
|
{},
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"summary": "Get object info by address",
|
|
"operationId": "getObjectInfo",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provided bearer token is final or gate should assemble it using signature.",
|
|
"name": "fullBearer",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer",
|
|
"description": "Range offset to start reading data.",
|
|
"name": "range-offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"minimum": 1,
|
|
"type": "integer",
|
|
"description": "Length of data range.",
|
|
"name": "range-length",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"maximum": 524288000,
|
|
"minimum": 0,
|
|
"type": "integer",
|
|
"default": 4194304,
|
|
"description": "Max payload size (in bytes) that can be included in the response.\nIf the actual size is greater than this params the payload won't be included in the response.\n",
|
|
"name": "max-payload-size",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Object info",
|
|
"schema": {
|
|
"$ref": "#/definitions/ObjectInfo"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Remove object from FrostFS",
|
|
"operationId": "deleteObject",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provided bearer token is final or gate should assemble it using signature.",
|
|
"name": "fullBearer",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful deletion.",
|
|
"schema": {
|
|
"$ref": "#/definitions/SuccessResponse"
|
|
},
|
|
"headers": {
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad request.",
|
|
"schema": {
|
|
"$ref": "#/definitions/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"security": [],
|
|
"operationId": "optionsObjectsGetDelete",
|
|
"responses": {
|
|
"200": {
|
|
"description": "CORS",
|
|
"headers": {
|
|
"Access-Control-Allow-Headers": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Methods": {
|
|
"type": "string"
|
|
},
|
|
"Access-Control-Allow-Origin": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded container id.",
|
|
"name": "containerId",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Base58 encoded object id.",
|
|
"name": "objectId",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"definitions": {
|
|
"Action": {
|
|
"description": "Rule execution result action in FrostFS EACL. Either allows or denies access if the rule's filters match.",
|
|
"type": "string",
|
|
"enum": [
|
|
"ALLOW",
|
|
"DENY"
|
|
]
|
|
},
|
|
"Address": {
|
|
"description": "Address of the object in FrostFS.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"objectId"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"objectId": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
|
|
}
|
|
},
|
|
"Attribute": {
|
|
"description": "Attribute is a pair of strings that can be attached to a container or an object.",
|
|
"type": "object",
|
|
"required": [
|
|
"key",
|
|
"value"
|
|
],
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"key": "User-Defined-Tag",
|
|
"value": "tag value"
|
|
}
|
|
},
|
|
"Balance": {
|
|
"type": "object",
|
|
"required": [
|
|
"address",
|
|
"value",
|
|
"precision"
|
|
],
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"precision": {
|
|
"type": "integer"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"Bearer": {
|
|
"description": "Bearer token that is expected to be formed.",
|
|
"type": "object",
|
|
"properties": {
|
|
"container": {
|
|
"$ref": "#/definitions/Rule"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"object": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Record"
|
|
}
|
|
}
|
|
},
|
|
"example": [
|
|
{
|
|
"name": "my-bearer-token",
|
|
"object": [
|
|
{
|
|
"action": "ALLOW",
|
|
"filters": [],
|
|
"operation": "GET",
|
|
"targets": [
|
|
{
|
|
"keys": [],
|
|
"role": "OTHERS"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"container": {
|
|
"verb": "PUT"
|
|
},
|
|
"name": "my token to create container"
|
|
}
|
|
]
|
|
},
|
|
"BinaryBearer": {
|
|
"description": "Bearer token for object operations that is represented in binary form.",
|
|
"type": "object",
|
|
"required": [
|
|
"token"
|
|
],
|
|
"properties": {
|
|
"token": {
|
|
"description": "Base64 encoded bearer token.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"token": "ChIKDAoAGggIARABIgIIAxoCCGQSZgohA+J5jFWFMiOpyvMZBu9wwPTKsWsG0q206kVe63iuWP/wEkEE4SIV0QngnKppDf54QezUKmar7UQby6HzufT5yVIOvj7QEqZnOavrKW0chCeCwP0khda/j9k00ct6NMEDxQFW+g=="
|
|
}
|
|
},
|
|
"ContainerInfo": {
|
|
"description": "Information about container.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"containerName",
|
|
"version",
|
|
"ownerId",
|
|
"basicAcl",
|
|
"placementPolicy",
|
|
"attributes"
|
|
],
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"basicAcl": {
|
|
"type": "string"
|
|
},
|
|
"cannedAcl": {
|
|
"description": "The friendly name for the basicAcl field.",
|
|
"type": "string"
|
|
},
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"containerName": {
|
|
"type": "string"
|
|
},
|
|
"ownerId": {
|
|
"type": "string"
|
|
},
|
|
"placementPolicy": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"attribute": [
|
|
{
|
|
"key": "Timestamp",
|
|
"value": "1648810072"
|
|
},
|
|
{
|
|
"key": "Name",
|
|
"value": "container"
|
|
}
|
|
],
|
|
"basicAcl": "0x1fbf9fff",
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"containerName": "container",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
|
|
"placementPolicy": "REP 2",
|
|
"version": "2.11"
|
|
}
|
|
},
|
|
"ContainerList": {
|
|
"description": "List of containers info",
|
|
"type": "object",
|
|
"required": [
|
|
"size",
|
|
"containers"
|
|
],
|
|
"properties": {
|
|
"containers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/ContainerInfo"
|
|
}
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"example": {
|
|
"containers": [
|
|
{
|
|
"attribute": [
|
|
{
|
|
"key": "Timestamp",
|
|
"value": "1648810072"
|
|
},
|
|
{
|
|
"key": "Name",
|
|
"value": "container"
|
|
}
|
|
],
|
|
"basicAcl": "0x1fbf9fff",
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"containerName": "container",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
|
|
"placementPolicy": "REP 2",
|
|
"version": "2.11"
|
|
},
|
|
{
|
|
"attribute": [
|
|
{
|
|
"key": "Name",
|
|
"value": "container2"
|
|
}
|
|
],
|
|
"basicAcl": "0x1fbf9fff",
|
|
"containerId": "FsE7HLQBBYc2WFJzuTXMcpspDEmwUxsD5YmNb2r25uUu",
|
|
"containerName": "container2",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM",
|
|
"placementPolicy": "REP 1",
|
|
"version": "2.11"
|
|
}
|
|
],
|
|
"size": 2
|
|
}
|
|
},
|
|
"ContainerPutInfo": {
|
|
"description": "Request body to create container. To specify container name use appropriate property (name provided in attributes will be ignored).",
|
|
"type": "object",
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"basicAcl": {
|
|
"type": "string"
|
|
},
|
|
"containerName": {
|
|
"type": "string"
|
|
},
|
|
"placementPolicy": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"attributes": [
|
|
{
|
|
"key": "Custom-Attribute",
|
|
"value": "value"
|
|
}
|
|
],
|
|
"basicAcl": "public-read-write",
|
|
"containerName": "container",
|
|
"placementPolicy": "REP 3"
|
|
}
|
|
},
|
|
"Eacl": {
|
|
"description": "EACL FrostFS table.",
|
|
"type": "object",
|
|
"required": [
|
|
"records"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string",
|
|
"readOnly": true
|
|
},
|
|
"records": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Record"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"records": [
|
|
{
|
|
"action": "GET",
|
|
"filters": [
|
|
{
|
|
"headerType": "OBJECT",
|
|
"key": "FileName",
|
|
"matchType": "STRING_EQUAL",
|
|
"value": "myfile"
|
|
}
|
|
],
|
|
"operation": "ALLOW",
|
|
"targets": [
|
|
{
|
|
"role": "OTHERS"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"ErrorResponse": {
|
|
"description": "Error response.",
|
|
"type": "object",
|
|
"required": [
|
|
"type",
|
|
"message"
|
|
],
|
|
"properties": {
|
|
"code": {
|
|
"type": "integer"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"$ref": "#/definitions/ErrorType"
|
|
}
|
|
},
|
|
"example": {
|
|
"code": 1024,
|
|
"message": "incomplete object PUT by placement",
|
|
"type": "API"
|
|
}
|
|
},
|
|
"ErrorType": {
|
|
"description": "Error type. Allow determine source of the error.",
|
|
"type": "string",
|
|
"enum": [
|
|
"GW",
|
|
"API"
|
|
]
|
|
},
|
|
"Filter": {
|
|
"description": "Filter in FrostFS EACL to check particular properties of the request or the object.",
|
|
"type": "object",
|
|
"required": [
|
|
"headerType",
|
|
"matchType",
|
|
"key",
|
|
"value"
|
|
],
|
|
"properties": {
|
|
"headerType": {
|
|
"$ref": "#/definitions/HeaderType"
|
|
},
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"matchType": {
|
|
"$ref": "#/definitions/MatchType"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"headerType": "OBJECT",
|
|
"key": "FileName",
|
|
"matchType": "STRING_NOT_EQUAL",
|
|
"value": "myfile"
|
|
}
|
|
},
|
|
"HeaderType": {
|
|
"description": "Enumeration of possible sources of Headers to apply filters in FrostFS EACL.",
|
|
"type": "string",
|
|
"enum": [
|
|
"REQUEST",
|
|
"OBJECT",
|
|
"SERVICE"
|
|
]
|
|
},
|
|
"MatchType": {
|
|
"description": "Match type in FrostFS EACL filter.",
|
|
"type": "string",
|
|
"enum": [
|
|
"STRING_EQUAL",
|
|
"STRING_NOT_EQUAL"
|
|
]
|
|
},
|
|
"ObjectBaseInfo": {
|
|
"description": "Basic object information.",
|
|
"type": "object",
|
|
"required": [
|
|
"address"
|
|
],
|
|
"properties": {
|
|
"address": {
|
|
"$ref": "#/definitions/Address"
|
|
},
|
|
"filePath": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"address": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
|
|
},
|
|
"filePath": "/my/object/name.txt",
|
|
"name": "name.txt"
|
|
}
|
|
},
|
|
"ObjectInfo": {
|
|
"description": "Object information.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"objectId",
|
|
"ownerId",
|
|
"attributes",
|
|
"objectSize",
|
|
"payloadSize"
|
|
],
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"objectId": {
|
|
"type": "string"
|
|
},
|
|
"objectSize": {
|
|
"description": "Object full payload size",
|
|
"type": "integer"
|
|
},
|
|
"ownerId": {
|
|
"type": "string"
|
|
},
|
|
"payload": {
|
|
"description": "Base64 encoded object payload",
|
|
"type": "string"
|
|
},
|
|
"payloadSize": {
|
|
"description": "Payload size in response",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"example": {
|
|
"attribute": [
|
|
{
|
|
"key": "Timestamp",
|
|
"value": "1648810072"
|
|
},
|
|
{
|
|
"key": "Name",
|
|
"value": "object"
|
|
}
|
|
],
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd",
|
|
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM"
|
|
}
|
|
},
|
|
"ObjectList": {
|
|
"description": "List of objects.",
|
|
"type": "object",
|
|
"required": [
|
|
"size",
|
|
"objects"
|
|
],
|
|
"properties": {
|
|
"objects": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/ObjectBaseInfo"
|
|
}
|
|
},
|
|
"size": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"example": {
|
|
"objects": [
|
|
{
|
|
"address": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
|
|
},
|
|
"name": "/my/object/name"
|
|
},
|
|
{
|
|
"address": {
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"objectId": "3GbmMWusaWgMHokWui2zDunxMTzButuQMVLbtL3cDn8s"
|
|
},
|
|
"name": "/my/object/some/other/name"
|
|
}
|
|
],
|
|
"size": 2
|
|
}
|
|
},
|
|
"ObjectUpload": {
|
|
"description": "Request body to create object.",
|
|
"type": "object",
|
|
"required": [
|
|
"containerId",
|
|
"fileName"
|
|
],
|
|
"properties": {
|
|
"attributes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Attribute"
|
|
}
|
|
},
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"fileName": {
|
|
"type": "string"
|
|
},
|
|
"payload": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"attributes": [
|
|
{
|
|
"key": "User-Attribute",
|
|
"value": "some-value"
|
|
}
|
|
],
|
|
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
|
|
"fileName": "myFile.txt",
|
|
"payload": "Y29udGVudCBvZiBmaWxl"
|
|
}
|
|
},
|
|
"Operation": {
|
|
"description": "Request's operation type to match in FrostFS EACL if the rule is applicable to a particular request.",
|
|
"type": "string",
|
|
"enum": [
|
|
"GET",
|
|
"HEAD",
|
|
"PUT",
|
|
"DELETE",
|
|
"SEARCH",
|
|
"RANGE",
|
|
"RANGEHASH"
|
|
]
|
|
},
|
|
"Principal": {
|
|
"type": "string"
|
|
},
|
|
"Record": {
|
|
"description": "A single FrostFS EACL rule.",
|
|
"type": "object",
|
|
"required": [
|
|
"action",
|
|
"operation",
|
|
"filters",
|
|
"targets"
|
|
],
|
|
"properties": {
|
|
"action": {
|
|
"$ref": "#/definitions/Action"
|
|
},
|
|
"filters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Filter"
|
|
}
|
|
},
|
|
"operation": {
|
|
"$ref": "#/definitions/Operation"
|
|
},
|
|
"targets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Target"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"action": "ALLOW",
|
|
"filters": [],
|
|
"operation": "GET",
|
|
"targets": [
|
|
{
|
|
"keys": [],
|
|
"role": "OTHERS"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"Role": {
|
|
"description": "Role for target in EACL.",
|
|
"type": "string",
|
|
"enum": [
|
|
"USER",
|
|
"SYSTEM",
|
|
"OTHERS",
|
|
"KEYS"
|
|
]
|
|
},
|
|
"Rule": {
|
|
"description": "Container session token rule.",
|
|
"type": "object",
|
|
"required": [
|
|
"verb"
|
|
],
|
|
"properties": {
|
|
"containerId": {
|
|
"type": "string"
|
|
},
|
|
"verb": {
|
|
"$ref": "#/definitions/Verb"
|
|
}
|
|
},
|
|
"example": {
|
|
"containerId": "6jvKJCQr6e47Yx8SsbSN3fNgzroUJVkY66Q9wqxYcAjc",
|
|
"verb": "DELETE"
|
|
}
|
|
},
|
|
"SearchFilter": {
|
|
"description": "Search filter to find objects.",
|
|
"type": "object",
|
|
"required": [
|
|
"key",
|
|
"value",
|
|
"match"
|
|
],
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"match": {
|
|
"$ref": "#/definitions/SearchMatch"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"key": "FileName",
|
|
"match": "MatchStringEqual",
|
|
"value": "object-name"
|
|
}
|
|
},
|
|
"SearchFilters": {
|
|
"description": "List of SearchFilter elements.",
|
|
"type": "object",
|
|
"required": [
|
|
"filters"
|
|
],
|
|
"properties": {
|
|
"filters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/SearchFilter"
|
|
}
|
|
}
|
|
},
|
|
"example": {
|
|
"filters": [
|
|
{
|
|
"key": "FileName",
|
|
"match": "MatchCommonPrefix",
|
|
"value": "some/prefix"
|
|
},
|
|
{
|
|
"key": "CustomAttribute",
|
|
"match": "MatchStringEqual",
|
|
"value": "tag-value"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"SearchMatch": {
|
|
"description": "Search match type.",
|
|
"type": "string",
|
|
"enum": [
|
|
"MatchStringEqual",
|
|
"MatchStringNotEqual",
|
|
"MatchNotPresent",
|
|
"MatchCommonPrefix"
|
|
]
|
|
},
|
|
"SuccessResponse": {
|
|
"description": "Success response.",
|
|
"type": "object",
|
|
"required": [
|
|
"success"
|
|
],
|
|
"properties": {
|
|
"success": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"example": {
|
|
"success": true
|
|
}
|
|
},
|
|
"Target": {
|
|
"description": "Target to apply the ACL rule. Can be a subject's role class or a list of public keys to match (KEYS role).",
|
|
"type": "object",
|
|
"required": [
|
|
"role",
|
|
"keys"
|
|
],
|
|
"properties": {
|
|
"keys": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"role": {
|
|
"$ref": "#/definitions/Role"
|
|
}
|
|
},
|
|
"example": {
|
|
"keys": [
|
|
"021dc56fc6d81d581ae7605a8e00e0e0bab6cbad566a924a527339475a97a8e38e"
|
|
],
|
|
"role": "KEYS"
|
|
}
|
|
},
|
|
"TokenResponse": {
|
|
"description": "Base64 encoded marshaled token (for container or for object operations).",
|
|
"type": "object",
|
|
"required": [
|
|
"type",
|
|
"token"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"token": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"$ref": "#/definitions/TokenType"
|
|
}
|
|
},
|
|
"example": [
|
|
{
|
|
"token": "ClYKBAgCEA0aCAgDEAEiAggDGggIARACIgIIAxoICAIQAiICCAMaCAgDEAIiAggDGggIBBACIgIIAxoICAUQAiICCAMaCAgGEAIiAggDGggIBxACIgIIAxIbChk182WEDFuAqq3nssrGOaH0NK0ZhzF8bu+YGgQIaBgE",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"token": "ChCpanIBJCpJuJz42KOmGMSnEhsKGTWquaX2Lq6GhhO4faOYkLD0f9WkXuYJlq4aBAhnGAMiIQJgFcIEghQB5lq3AJZOVswInwc1IGhlQ7NCUh4DFO3UATIECAEQAQ==",
|
|
"type": "container"
|
|
}
|
|
]
|
|
},
|
|
"TokenType": {
|
|
"description": "Type of token.",
|
|
"type": "string",
|
|
"enum": [
|
|
"object",
|
|
"container"
|
|
]
|
|
},
|
|
"Verb": {
|
|
"description": "Verb that describes the allowed container operation for token.",
|
|
"type": "string",
|
|
"enum": [
|
|
"PUT",
|
|
"DELETE",
|
|
"SETEACL"
|
|
]
|
|
}
|
|
},
|
|
"parameters": {
|
|
"containerId": {
|
|
"type": "string",
|
|
"description": "Base58 encoded container id.",
|
|
"name": "containerId",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
"fullBearerToken": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Provided bearer token is final or gate should assemble it using signature.",
|
|
"name": "fullBearer",
|
|
"in": "query"
|
|
},
|
|
"objectId": {
|
|
"type": "string",
|
|
"description": "Base58 encoded object id.",
|
|
"name": "objectId",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
"signatureKeyParam": {
|
|
"type": "string",
|
|
"description": "Hex encoded the public part of the key that signed the bearer token.",
|
|
"name": "X-Bearer-Signature-Key",
|
|
"in": "header"
|
|
},
|
|
"signatureParam": {
|
|
"type": "string",
|
|
"description": "Base64 encoded signature for bearer token.",
|
|
"name": "X-Bearer-Signature",
|
|
"in": "header"
|
|
},
|
|
"signatureScheme": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use wallet connect signature scheme or native FrostFS signature.",
|
|
"name": "walletConnect",
|
|
"in": "query"
|
|
}
|
|
},
|
|
"securityDefinitions": {
|
|
"BearerAuth": {
|
|
"description": "Bearer token body to provide with FrostFS request. Must have 'Bearer ' prefix.",
|
|
"type": "apiKey",
|
|
"name": "Authorization",
|
|
"in": "header"
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
]
|
|
}`))
|
|
}
|