forked from TrueCloudLab/frostfs-api-go
[#283] pkg/token: Replace SessionToken into a session package
There is a need to add session token to `eacl.Table` structure. To do this, we need to replace `token.SessionToken` type to another package since `eacl` package imports `token` one (potential cross-import). Create `pkg/session` package and replace session token implementation to it. Related API in `container` package is deprecated from now. Additionally implement test generator of random session tokens. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
fcbe0bbd2e
commit
37b415347d
5 changed files with 246 additions and 118 deletions
125
pkg/session/session.go
Normal file
125
pkg/session/session.go
Normal file
|
@ -0,0 +1,125 @@
|
|||
package session
|
||||
|
||||
import (
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg"
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
|
||||
"github.com/nspcc-dev/neofs-api-go/v2/session"
|
||||
)
|
||||
|
||||
// Token represents NeoFS API v2-compatible
|
||||
// session token.
|
||||
type Token session.SessionToken
|
||||
|
||||
// NewTokenFromV2 wraps session.SessionToken message structure
|
||||
// into Token.
|
||||
func NewTokenFromV2(tV2 *session.SessionToken) *Token {
|
||||
return (*Token)(tV2)
|
||||
}
|
||||
|
||||
// NewToken creates and returns blank Token.
|
||||
func NewToken() *Token {
|
||||
return NewTokenFromV2(new(session.SessionToken))
|
||||
}
|
||||
|
||||
// ToV2 converts Token to session.SessionToken message structure.
|
||||
func (t *Token) ToV2() *session.SessionToken {
|
||||
return (*session.SessionToken)(t)
|
||||
}
|
||||
|
||||
func (t *Token) setBodyField(setter func(*session.SessionTokenBody)) {
|
||||
token := (*session.SessionToken)(t)
|
||||
body := token.GetBody()
|
||||
|
||||
if body == nil {
|
||||
body = new(session.SessionTokenBody)
|
||||
token.SetBody(body)
|
||||
}
|
||||
|
||||
setter(body)
|
||||
}
|
||||
|
||||
// ID returns Token identifier.
|
||||
func (t *Token) ID() []byte {
|
||||
return (*session.SessionToken)(t).
|
||||
GetBody().
|
||||
GetID()
|
||||
}
|
||||
|
||||
// SetID sets Token identifier.
|
||||
func (t *Token) SetID(v []byte) {
|
||||
t.setBodyField(func(body *session.SessionTokenBody) {
|
||||
body.SetID(v)
|
||||
})
|
||||
}
|
||||
|
||||
// OwnerID returns Token's owner identifier.
|
||||
func (t *Token) OwnerID() *owner.ID {
|
||||
return owner.NewIDFromV2(
|
||||
(*session.SessionToken)(t).
|
||||
GetBody().
|
||||
GetOwnerID(),
|
||||
)
|
||||
}
|
||||
|
||||
// SetOwnerID sets Token's owner identifier.
|
||||
func (t *Token) SetOwnerID(v *owner.ID) {
|
||||
t.setBodyField(func(body *session.SessionTokenBody) {
|
||||
body.SetOwnerID(v.ToV2())
|
||||
})
|
||||
}
|
||||
|
||||
// SessionKey returns public key of the session
|
||||
// in a binary format.
|
||||
func (t *Token) SessionKey() []byte {
|
||||
return (*session.SessionToken)(t).
|
||||
GetBody().
|
||||
GetSessionKey()
|
||||
}
|
||||
|
||||
// SetSessionKey sets public key of the session
|
||||
// // in a binary format.
|
||||
func (t *Token) SetSessionKey(v []byte) {
|
||||
t.setBodyField(func(body *session.SessionTokenBody) {
|
||||
body.SetSessionKey(v)
|
||||
})
|
||||
}
|
||||
|
||||
// Signature returns Token signature.
|
||||
func (t *Token) Signature() *pkg.Signature {
|
||||
return pkg.NewSignatureFromV2(
|
||||
(*session.SessionToken)(t).
|
||||
GetSignature(),
|
||||
)
|
||||
}
|
||||
|
||||
// Marshal marshals Token into a protobuf binary form.
|
||||
//
|
||||
// Buffer is allocated when the argument is empty.
|
||||
// Otherwise, the first buffer is used.
|
||||
func (t *Token) Marshal(bs ...[]byte) ([]byte, error) {
|
||||
var buf []byte
|
||||
if len(bs) > 0 {
|
||||
buf = bs[0]
|
||||
}
|
||||
|
||||
return (*session.SessionToken)(t).
|
||||
StableMarshal(buf)
|
||||
}
|
||||
|
||||
// Unmarshal unmarshals protobuf binary representation of Token.
|
||||
func (t *Token) Unmarshal(data []byte) error {
|
||||
return (*session.SessionToken)(t).
|
||||
Unmarshal(data)
|
||||
}
|
||||
|
||||
// MarshalJSON encodes Token to protobuf JSON format.
|
||||
func (t *Token) MarshalJSON() ([]byte, error) {
|
||||
return (*session.SessionToken)(t).
|
||||
MarshalJSON()
|
||||
}
|
||||
|
||||
// UnmarshalJSON decodes Token from protobuf JSON format.
|
||||
func (t *Token) UnmarshalJSON(data []byte) error {
|
||||
return (*session.SessionToken)(t).
|
||||
UnmarshalJSON(data)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue