forked from TrueCloudLab/frostfs-sdk-go
[#197] session: Refactor and document the package
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
497053c785
commit
552c7875bf
32 changed files with 1622 additions and 1358 deletions
|
@ -9,7 +9,6 @@ import (
|
|||
v2session "github.com/nspcc-dev/neofs-api-go/v2/session"
|
||||
"github.com/nspcc-dev/neofs-api-go/v2/signature"
|
||||
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
|
||||
"github.com/nspcc-dev/neofs-sdk-go/session"
|
||||
"github.com/nspcc-dev/neofs-sdk-go/version"
|
||||
)
|
||||
|
||||
|
@ -35,23 +34,6 @@ func (x statusRes) Status() apistatus.Status {
|
|||
return x.st
|
||||
}
|
||||
|
||||
type prmSession struct {
|
||||
tokenSessionSet bool
|
||||
tokenSession session.Token
|
||||
}
|
||||
|
||||
// SetSessionToken sets token of the session within which request should be sent.
|
||||
func (x *prmSession) SetSessionToken(tok session.Token) {
|
||||
x.tokenSession = tok
|
||||
x.tokenSessionSet = true
|
||||
}
|
||||
|
||||
func (x prmSession) writeToMetaHeader(meta *v2session.RequestMetaHeader) {
|
||||
if x.tokenSessionSet {
|
||||
meta.SetSessionToken(x.tokenSession.ToV2())
|
||||
}
|
||||
}
|
||||
|
||||
// groups meta parameters shared between all Client operations.
|
||||
type prmCommonMeta struct {
|
||||
// NeoFS request X-Headers
|
||||
|
|
|
@ -107,9 +107,15 @@ func (c *Client) ContainerPut(ctx context.Context, prm PrmContainerPut) (*ResCon
|
|||
|
||||
// form meta header
|
||||
var meta v2session.RequestMetaHeader
|
||||
meta.SetSessionToken(prm.cnr.SessionToken().ToV2())
|
||||
prm.prmCommonMeta.writeToMetaHeader(&meta)
|
||||
|
||||
if tok := prm.cnr.SessionToken(); tok != nil {
|
||||
var tokv2 v2session.Token
|
||||
tok.WriteToV2(&tokv2)
|
||||
|
||||
meta.SetSessionToken(&tokv2)
|
||||
}
|
||||
|
||||
// form request
|
||||
var req v2container.PutRequest
|
||||
|
||||
|
@ -240,9 +246,16 @@ func (c *Client) ContainerGet(ctx context.Context, prm PrmContainerGet) (*ResCon
|
|||
|
||||
cnr := container.NewContainerFromV2(body.GetContainer())
|
||||
|
||||
cnr.SetSessionToken(
|
||||
session.NewTokenFromV2(body.GetSessionToken()),
|
||||
)
|
||||
tokv2 := body.GetSessionToken()
|
||||
if tokv2 != nil {
|
||||
var tok session.Container
|
||||
|
||||
// FIXME: need to handle the error
|
||||
err := tok.ReadFromV2(*tokv2)
|
||||
if err == nil {
|
||||
cnr.SetSessionToken(&tok)
|
||||
}
|
||||
}
|
||||
|
||||
var sig *neofscrypto.Signature
|
||||
|
||||
|
@ -368,10 +381,12 @@ func (c *Client) ContainerList(ctx context.Context, prm PrmContainerList) (*ResC
|
|||
// PrmContainerDelete groups parameters of ContainerDelete operation.
|
||||
type PrmContainerDelete struct {
|
||||
prmCommonMeta
|
||||
prmSession
|
||||
|
||||
idSet bool
|
||||
id cid.ID
|
||||
|
||||
tokSet bool
|
||||
tok session.Container
|
||||
}
|
||||
|
||||
// SetContainer sets identifier of the NeoFS container to be removed.
|
||||
|
@ -381,6 +396,17 @@ func (x *PrmContainerDelete) SetContainer(id cid.ID) {
|
|||
x.idSet = true
|
||||
}
|
||||
|
||||
// WithinSession specifies session within which container should be removed.
|
||||
//
|
||||
// Creator of the session acquires the authorship of the request.
|
||||
// This may affect the execution of an operation (e.g. access control).
|
||||
//
|
||||
// Must be signed.
|
||||
func (x *PrmContainerDelete) WithinSession(tok session.Container) {
|
||||
x.tok = tok
|
||||
x.tokSet = true
|
||||
}
|
||||
|
||||
// ResContainerDelete groups resulting values of ContainerDelete operation.
|
||||
type ResContainerDelete struct {
|
||||
statusRes
|
||||
|
@ -456,10 +482,15 @@ func (c *Client) ContainerDelete(ctx context.Context, prm PrmContainerDelete) (*
|
|||
|
||||
// form meta header
|
||||
var meta v2session.RequestMetaHeader
|
||||
|
||||
prm.prmSession.writeToMetaHeader(&meta)
|
||||
prm.prmCommonMeta.writeToMetaHeader(&meta)
|
||||
|
||||
if prm.tokSet {
|
||||
var tokv2 v2session.Token
|
||||
prm.tok.WriteToV2(&tokv2)
|
||||
|
||||
meta.SetSessionToken(&tokv2)
|
||||
}
|
||||
|
||||
// form request
|
||||
var req v2container.DeleteRequest
|
||||
|
||||
|
@ -577,9 +608,16 @@ func (c *Client) ContainerEACL(ctx context.Context, prm PrmContainerEACL) (*ResC
|
|||
|
||||
table := eacl.NewTableFromV2(body.GetEACL())
|
||||
|
||||
table.SetSessionToken(
|
||||
session.NewTokenFromV2(body.GetSessionToken()),
|
||||
)
|
||||
tokv2 := body.GetSessionToken()
|
||||
if tokv2 != nil {
|
||||
var tok session.Container
|
||||
|
||||
// FIXME: need to handle the error
|
||||
err := tok.ReadFromV2(*tokv2)
|
||||
if err == nil {
|
||||
table.SetSessionToken(&tok)
|
||||
}
|
||||
}
|
||||
|
||||
var sig *neofscrypto.Signature
|
||||
|
||||
|
@ -674,9 +712,15 @@ func (c *Client) ContainerSetEACL(ctx context.Context, prm PrmContainerSetEACL)
|
|||
|
||||
// form meta header
|
||||
var meta v2session.RequestMetaHeader
|
||||
meta.SetSessionToken(prm.table.SessionToken().ToV2())
|
||||
prm.prmCommonMeta.writeToMetaHeader(&meta)
|
||||
|
||||
if tok := prm.table.SessionToken(); tok != nil {
|
||||
var tokv2 v2session.Token
|
||||
tok.WriteToV2(&tokv2)
|
||||
|
||||
meta.SetSessionToken(&tokv2)
|
||||
}
|
||||
|
||||
// form request
|
||||
var req v2container.SetExtendedACLRequest
|
||||
|
||||
|
|
|
@ -34,8 +34,11 @@ type PrmObjectDelete struct {
|
|||
// This may affect the execution of an operation (e.g. access control).
|
||||
//
|
||||
// Must be signed.
|
||||
func (x *PrmObjectDelete) WithinSession(t session.Token) {
|
||||
x.meta.SetSessionToken(t.ToV2())
|
||||
func (x *PrmObjectDelete) WithinSession(t session.Object) {
|
||||
var tv2 v2session.Token
|
||||
t.WriteToV2(&tv2)
|
||||
|
||||
x.meta.SetSessionToken(&tv2)
|
||||
}
|
||||
|
||||
// WithBearerToken attaches bearer token to be used for the operation.
|
||||
|
|
|
@ -30,7 +30,7 @@ type prmObjectRead struct {
|
|||
local bool
|
||||
|
||||
sessionSet bool
|
||||
session session.Token
|
||||
session session.Object
|
||||
|
||||
bearerSet bool
|
||||
bearer bearer.Token
|
||||
|
@ -54,7 +54,10 @@ func (x prmObjectRead) writeToMetaHeader(h *v2session.RequestMetaHeader) {
|
|||
}
|
||||
|
||||
if x.sessionSet {
|
||||
h.SetSessionToken(x.session.ToV2())
|
||||
var tokv2 v2session.Token
|
||||
x.session.WriteToV2(&tokv2)
|
||||
|
||||
h.SetSessionToken(&tokv2)
|
||||
}
|
||||
|
||||
x.prmCommonMeta.writeToMetaHeader(h)
|
||||
|
@ -76,7 +79,7 @@ func (x *prmObjectRead) MarkLocal() {
|
|||
// This may affect the execution of an operation (e.g. access control).
|
||||
//
|
||||
// Must be signed.
|
||||
func (x *prmObjectRead) WithinSession(t session.Token) {
|
||||
func (x *prmObjectRead) WithinSession(t session.Object) {
|
||||
x.session = t
|
||||
x.sessionSet = true
|
||||
}
|
||||
|
|
|
@ -37,8 +37,11 @@ func (x *PrmObjectHash) MarkLocal() {
|
|||
// This may affect the execution of an operation (e.g. access control).
|
||||
//
|
||||
// Must be signed.
|
||||
func (x *PrmObjectHash) WithinSession(t session.Token) {
|
||||
x.meta.SetSessionToken(t.ToV2())
|
||||
func (x *PrmObjectHash) WithinSession(t session.Object) {
|
||||
var tv2 v2session.Token
|
||||
t.WriteToV2(&tv2)
|
||||
|
||||
x.meta.SetSessionToken(&tv2)
|
||||
}
|
||||
|
||||
// WithBearerToken attaches bearer token to be used for the operation.
|
||||
|
|
|
@ -80,8 +80,11 @@ func (x *ObjectWriter) WithBearerToken(t bearer.Token) {
|
|||
|
||||
// WithinSession specifies session within which object should be stored.
|
||||
// Should be called once before any writing steps.
|
||||
func (x *ObjectWriter) WithinSession(t session.Token) {
|
||||
x.metaHdr.SetSessionToken(t.ToV2())
|
||||
func (x *ObjectWriter) WithinSession(t session.Object) {
|
||||
var tv2 v2session.Token
|
||||
t.WriteToV2(&tv2)
|
||||
|
||||
x.metaHdr.SetSessionToken(&tv2)
|
||||
}
|
||||
|
||||
// MarkLocal tells the server to execute the operation locally.
|
||||
|
|
|
@ -28,7 +28,7 @@ type PrmObjectSearch struct {
|
|||
local bool
|
||||
|
||||
sessionSet bool
|
||||
session session.Token
|
||||
session session.Object
|
||||
|
||||
bearerSet bool
|
||||
bearer bearer.Token
|
||||
|
@ -50,7 +50,7 @@ func (x *PrmObjectSearch) MarkLocal() {
|
|||
// This may affect the execution of an operation (e.g. access control).
|
||||
//
|
||||
// Must be signed.
|
||||
func (x *PrmObjectSearch) WithinSession(t session.Token) {
|
||||
func (x *PrmObjectSearch) WithinSession(t session.Object) {
|
||||
x.session = t
|
||||
x.sessionSet = true
|
||||
}
|
||||
|
@ -269,7 +269,10 @@ func (c *Client) ObjectSearchInit(ctx context.Context, prm PrmObjectSearch) (*Ob
|
|||
}
|
||||
|
||||
if prm.sessionSet {
|
||||
meta.SetSessionToken(prm.session.ToV2())
|
||||
var tokv2 v2session.Token
|
||||
prm.session.WriteToV2(&tokv2)
|
||||
|
||||
meta.SetSessionToken(&tokv2)
|
||||
}
|
||||
|
||||
prm.prmCommonMeta.writeToMetaHeader(&meta)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue