frostfs-rest-gw/gen/restapi/embedded_spec.go
Denis Kirillov 24817701ee [#2] Update spec
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2022-12-21 11:49:19 +03:00

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": []
}
]
}`))
}