[#150] sdk/token: Add owner ID

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2020-09-17 18:04:04 +03:00 committed by Stanislav Bogatyrev
parent 73220620c5
commit 0259a06783
4 changed files with 104 additions and 34 deletions

View file

@ -1,40 +1,70 @@
package token
import (
"github.com/google/uuid"
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
"github.com/nspcc-dev/neofs-api-go/v2/session"
)
type SessionToken struct {
id uuid.UUID
pubKey []byte
type SessionToken session.SessionToken
func NewSessionTokenFromV2(tV2 *session.SessionToken) *SessionToken {
return (*SessionToken)(tV2)
}
func CreateSessionToken(id, pub []byte) (*SessionToken, error) {
var tokenID uuid.UUID
func NewSessionToken() *SessionToken {
return NewSessionTokenFromV2(new(session.SessionToken))
}
err := tokenID.UnmarshalBinary(id)
if err != nil {
return nil, err
func (t *SessionToken) ToV2() *session.SessionToken {
return (*session.SessionToken)(t)
}
func (t *SessionToken) setBodyField(setter func(*session.SessionTokenBody)) {
token := (*session.SessionToken)(t)
body := token.GetBody()
if body == nil {
body = new(session.SessionTokenBody)
token.SetBody(body)
}
key := make([]byte, len(pub))
copy(key[:], pub)
return &SessionToken{
id: tokenID,
pubKey: key,
}, nil
setter(body)
}
func (s SessionToken) SessionKey() []byte {
return s.pubKey
func (t *SessionToken) ID() []byte {
return (*session.SessionToken)(t).
GetBody().
GetID()
}
func (s SessionToken) ID() []byte {
data, err := s.id.MarshalBinary()
if err != nil {
panic(err) // must never panic
}
return data
func (t *SessionToken) SetID(v []byte) {
t.setBodyField(func(body *session.SessionTokenBody) {
body.SetID(v)
})
}
func (t *SessionToken) OwnerID() *owner.ID {
return owner.NewIDFromV2(
(*session.SessionToken)(t).
GetBody().
GetOwnerID(),
)
}
func (t *SessionToken) SetOwnerID(v *owner.ID) {
t.setBodyField(func(body *session.SessionTokenBody) {
body.SetOwnerID(v.ToV2())
})
}
func (t *SessionToken) SessionKey() []byte {
return (*session.SessionToken)(t).
GetBody().
GetSessionKey()
}
func (t *SessionToken) SetSessionKey(v []byte) {
t.setBodyField(func(body *session.SessionTokenBody) {
body.SetSessionKey(v)
})
}