From 81f29afeccff656c6e99756132de2eb5159c2acc Mon Sep 17 00:00:00 2001 From: Tatiana Nesterenko Date: Fri, 16 Aug 2024 18:13:10 +0100 Subject: [PATCH] api: Remove the `fullBearer` parameter from all API requests This parameter indicates that a binary bearer token was requested via the `/auth/bearer` request and is being used instead of wallet connect. However, it's not difficult to detect this without the `fullBearer` parameter. If the `X-Bearer-Signature` and `X-Bearer-Signature-Key` are absent in the request header, we can assume that the received token is `fullBearer`. Signed-off-by: Tatiana Nesterenko --- handlers/apiserver/rest-server.gen.go | 406 +++++++++----------------- handlers/auth.go | 2 +- handlers/newObjects.go | 46 +-- handlers/objects.go | 53 +--- spec/rest.yaml | 20 -- 5 files changed, 166 insertions(+), 361 deletions(-) diff --git a/handlers/apiserver/rest-server.gen.go b/handlers/apiserver/rest-server.gen.go index bec7799..0d830d4 100644 --- a/handlers/apiserver/rest-server.gen.go +++ b/handlers/apiserver/rest-server.gen.go @@ -419,9 +419,6 @@ type AttrVal = string // ContainerId defines model for containerId. type ContainerId = string -// FullBearerToken defines model for fullBearerToken. -type FullBearerToken = bool - // ObjectId defines model for objectId. type ObjectId = string @@ -541,9 +538,6 @@ type PutObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // XBearerSignature Base64 encoded signature for bearer token. XBearerSignature *SignatureParam `json:"X-Bearer-Signature,omitempty"` @@ -556,9 +550,6 @@ type NewOptionsUploadContainerObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // XBearerSignature Base64 encoded signature for bearer token. XBearerSignature *SignatureParam `json:"X-Bearer-Signature,omitempty"` @@ -571,9 +562,6 @@ type NewUploadContainerObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // XBearerSignature Base64 encoded signature for bearer token. XBearerSignature *SignatureParam `json:"X-Bearer-Signature,omitempty"` @@ -611,9 +599,6 @@ type NewGetByAttributeParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // Download Set the Content-Disposition header as attachment in response. This makes the browser to download object as file instead of showing it on the page. Download *string `form:"download,omitempty" json:"download,omitempty"` @@ -629,9 +614,6 @@ type NewHeadByAttributeParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // Download Set the Content-Disposition header as attachment in response. This makes the browser to download object as file instead of showing it on the page. Download *string `form:"download,omitempty" json:"download,omitempty"` @@ -647,9 +629,6 @@ type NewOptionsByAttributeParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // XBearerSignature Base64 encoded signature for bearer token. XBearerSignature *SignatureParam `json:"X-Bearer-Signature,omitempty"` @@ -662,9 +641,6 @@ type NewGetContainerObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // Download Set the Content-Disposition header as attachment in response. This make the browser to download object as file instead of showing it on the page. Download *string `form:"download,omitempty" json:"download,omitempty"` @@ -680,9 +656,6 @@ type NewHeadContainerObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // Download Set the Content-Disposition header as attachment in response. This make the browser to download object as file instead of showing it on the page. Download *string `form:"download,omitempty" json:"download,omitempty"` @@ -698,9 +671,6 @@ type NewOptionsContainerObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // XBearerSignature Base64 encoded signature for bearer token. XBearerSignature *SignatureParam `json:"X-Bearer-Signature,omitempty"` @@ -713,9 +683,6 @@ type SearchObjectsParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // Offset The number of containers to skip before starting to collect the result set. Offset *int `form:"offset,omitempty" json:"offset,omitempty"` @@ -734,9 +701,6 @@ type DeleteObjectParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // XBearerSignature Base64 encoded signature for bearer token. XBearerSignature *SignatureParam `json:"X-Bearer-Signature,omitempty"` @@ -749,9 +713,6 @@ type GetObjectInfoParams struct { // WalletConnect Use wallet connect signature scheme or native NeoFS signature. WalletConnect *SignatureScheme `form:"walletConnect,omitempty" json:"walletConnect,omitempty"` - // FullBearer Provided bearer token is final or gate should assemble it using signature. - FullBearer *FullBearerToken `form:"fullBearer,omitempty" json:"fullBearer,omitempty"` - // RangeOffset Range offset to start reading data. RangeOffset *int64 `form:"range-offset,omitempty" json:"range-offset,omitempty"` @@ -1639,13 +1600,6 @@ func (w *ServerInterfaceWrapper) PutObject(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - headers := ctx.Request().Header // ------------- Optional header parameter "X-Bearer-Signature" ------------- if valueList, found := headers[http.CanonicalHeaderKey("X-Bearer-Signature")]; found { @@ -1703,13 +1657,6 @@ func (w *ServerInterfaceWrapper) NewOptionsUploadContainerObject(ctx echo.Contex return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - headers := ctx.Request().Header // ------------- Optional header parameter "X-Bearer-Signature" ------------- if valueList, found := headers[http.CanonicalHeaderKey("X-Bearer-Signature")]; found { @@ -1771,13 +1718,6 @@ func (w *ServerInterfaceWrapper) NewUploadContainerObject(ctx echo.Context) erro return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - headers := ctx.Request().Header // ------------- Optional header parameter "X-Bearer-Signature" ------------- if valueList, found := headers[http.CanonicalHeaderKey("X-Bearer-Signature")]; found { @@ -1915,13 +1855,6 @@ func (w *ServerInterfaceWrapper) NewGetByAttribute(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - // ------------- Optional query parameter "download" ------------- err = runtime.BindQueryParameter("form", true, false, "download", ctx.QueryParams(), ¶ms.Download) @@ -2006,13 +1939,6 @@ func (w *ServerInterfaceWrapper) NewHeadByAttribute(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - // ------------- Optional query parameter "download" ------------- err = runtime.BindQueryParameter("form", true, false, "download", ctx.QueryParams(), ¶ms.Download) @@ -2093,13 +2019,6 @@ func (w *ServerInterfaceWrapper) NewOptionsByAttribute(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - headers := ctx.Request().Header // ------------- Optional header parameter "X-Bearer-Signature" ------------- if valueList, found := headers[http.CanonicalHeaderKey("X-Bearer-Signature")]; found { @@ -2169,13 +2088,6 @@ func (w *ServerInterfaceWrapper) NewGetContainerObject(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - // ------------- Optional query parameter "download" ------------- err = runtime.BindQueryParameter("form", true, false, "download", ctx.QueryParams(), ¶ms.Download) @@ -2252,13 +2164,6 @@ func (w *ServerInterfaceWrapper) NewHeadContainerObject(ctx echo.Context) error return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - // ------------- Optional query parameter "download" ------------- err = runtime.BindQueryParameter("form", true, false, "download", ctx.QueryParams(), ¶ms.Download) @@ -2331,13 +2236,6 @@ func (w *ServerInterfaceWrapper) NewOptionsContainerObject(ctx echo.Context) err return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - headers := ctx.Request().Header // ------------- Optional header parameter "X-Bearer-Signature" ------------- if valueList, found := headers[http.CanonicalHeaderKey("X-Bearer-Signature")]; found { @@ -2413,13 +2311,6 @@ func (w *ServerInterfaceWrapper) SearchObjects(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - // ------------- Optional query parameter "offset" ------------- err = runtime.BindQueryParameter("form", true, false, "offset", ctx.QueryParams(), ¶ms.Offset) @@ -2503,13 +2394,6 @@ func (w *ServerInterfaceWrapper) DeleteObject(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - headers := ctx.Request().Header // ------------- Optional header parameter "X-Bearer-Signature" ------------- if valueList, found := headers[http.CanonicalHeaderKey("X-Bearer-Signature")]; found { @@ -2577,13 +2461,6 @@ func (w *ServerInterfaceWrapper) GetObjectInfo(ctx echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter walletConnect: %s", err)) } - // ------------- Optional query parameter "fullBearer" ------------- - - err = runtime.BindQueryParameter("form", true, false, "fullBearer", ctx.QueryParams(), ¶ms.FullBearer) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fullBearer: %s", err)) - } - // ------------- Optional query parameter "range-offset" ------------- err = runtime.BindQueryParameter("form", true, false, "range-offset", ctx.QueryParams(), ¶ms.RangeOffset) @@ -2811,148 +2688,147 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "/l7jVaN+1zQePj78XwAAAP//O0bidbzVAAA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/handlers/auth.go b/handlers/auth.go index 7e31c79..6ce3cc7 100644 --- a/handlers/auth.go +++ b/handlers/auth.go @@ -118,7 +118,7 @@ func (a *RestAPI) FormBinaryBearer(ctx echo.Context, params apiserver.FormBinary walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, false) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("invalid bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) diff --git a/handlers/newObjects.go b/handlers/newObjects.go index c50c54c..505d31f 100644 --- a/handlers/newObjects.go +++ b/handlers/newObjects.go @@ -23,13 +23,9 @@ func (a *RestAPI) NewUploadContainerObject(ctx echo.Context, containerID apiserv err error addr oid.Address btoken *bearer.Token - fullBearer apiserver.FullBearerToken walletConnect apiserver.SignatureScheme ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } if params.WalletConnect != nil { walletConnect = *params.WalletConnect } @@ -45,7 +41,7 @@ func (a *RestAPI) NewUploadContainerObject(ctx echo.Context, containerID apiserv return ctx.JSON(http.StatusBadRequest, util.NewErrorResponse(err)) } - btoken, err = getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err = getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("invalid bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -151,18 +147,12 @@ func (a *RestAPI) NewGetContainerObject(ctx echo.Context, containerID apiserver. return ctx.JSON(http.StatusBadRequest, resp) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -186,18 +176,12 @@ func (a *RestAPI) NewHeadContainerObject(ctx echo.Context, containerID apiserver ctx.Response().Header().Set(accessControlAllowOriginHeader, "*") - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -219,18 +203,12 @@ func (a *RestAPI) NewGetByAttribute(ctx echo.Context, containerID apiserver.Cont return ctx.JSON(http.StatusBadRequest, resp) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -282,18 +260,12 @@ func (a *RestAPI) NewHeadByAttribute(ctx echo.Context, containerID apiserver.Con return ctx.JSON(http.StatusBadRequest, resp) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) diff --git a/handlers/objects.go b/handlers/objects.go index 45d32cd..d926492 100644 --- a/handlers/objects.go +++ b/handlers/objects.go @@ -74,18 +74,12 @@ func (a *RestAPI) PutObject(ctx echo.Context, params apiserver.PutObjectParams) return ctx.JSON(http.StatusBadRequest, a.logAndGetErrorResponse("bind", err)) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("invalid bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -151,18 +145,12 @@ func (a *RestAPI) GetObjectInfo(ctx echo.Context, containerID apiserver.Containe return ctx.JSON(http.StatusBadRequest, util.NewErrorResponse(err)) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -254,18 +242,12 @@ func (a *RestAPI) DeleteObject(ctx echo.Context, containerID apiserver.Container return ctx.JSON(http.StatusBadRequest, util.NewErrorResponse(err)) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -304,18 +286,12 @@ func (a *RestAPI) SearchObjects(ctx echo.Context, containerID apiserver.Containe return ctx.JSON(http.StatusBadRequest, util.NewErrorResponse(err)) } - var ( - fullBearer apiserver.FullBearerToken - walletConnect apiserver.SignatureScheme - ) - if params.FullBearer != nil { - fullBearer = *params.FullBearer - } + var walletConnect apiserver.SignatureScheme if params.WalletConnect != nil { walletConnect = *params.WalletConnect } - btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect, fullBearer) + btoken, err := getBearerToken(principal, params.XBearerSignature, params.XBearerSignatureKey, walletConnect) if err != nil { resp := a.logAndGetErrorResponse("get bearer token", err) return ctx.JSON(http.StatusBadRequest, resp) @@ -759,20 +735,21 @@ func parseAddress(containerID, objectID string) (oid.Address, error) { return addr, nil } -func getBearerToken(token string, signature, key *string, isWalletConnect, isFullToken bool) (*bearer.Token, error) { +func getBearerToken(token string, signature, key *string, isWalletConnect bool) (*bearer.Token, error) { if token == "" { return nil, nil } + isFullToken := false bt := &BearerToken{Token: token} - if !isFullToken { - if signature == nil || key == nil { - return nil, errors.New("missed signature or key header") - } - + if signature != nil && key != nil { bt.Signature = *signature bt.Key = *key + } else if signature == nil && key == nil { + isFullToken = true + } else { + return nil, errors.New("missed signature or key header") } return prepareBearerToken(bt, isWalletConnect, isFullToken) diff --git a/spec/rest.yaml b/spec/rest.yaml index 3f4c052..c790d8c 100644 --- a/spec/rest.yaml +++ b/spec/rest.yaml @@ -188,7 +188,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' requestBody: description: Object info to upload content: @@ -240,7 +239,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - $ref: '#/components/parameters/containerId' - name: offset in: query @@ -321,7 +319,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - name: range-offset in: query description: Range offset to start reading data. @@ -375,7 +372,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' responses: "200": description: Successful deletion. @@ -764,7 +760,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - name: download in: query description: Set the Content-Disposition header as attachment in response. @@ -800,7 +795,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' responses: "200": description: CORS @@ -826,7 +820,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - name: download in: query description: Set the Content-Disposition header as attachment in response. @@ -939,7 +932,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - name: X-Attributes in: header description: | @@ -1014,7 +1006,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' responses: "200": description: CORS @@ -1144,7 +1135,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - name: download in: query description: Set the Content-Disposition header as attachment in response. @@ -1181,7 +1171,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' responses: "200": description: CORS @@ -1210,7 +1199,6 @@ paths: - $ref: '#/components/parameters/signatureParam' - $ref: '#/components/parameters/signatureKeyParam' - $ref: '#/components/parameters/signatureScheme' - - $ref: '#/components/parameters/fullBearerToken' - name: download in: query description: Set the Content-Disposition header as attachment in response. @@ -2162,14 +2150,6 @@ components: schema: type: boolean default: false - fullBearerToken: - name: fullBearer - in: query - description: Provided bearer token is final or gate should assemble it using - signature. - schema: - type: boolean - default: false containerId: name: containerId in: path