frostfs-node/pkg/network/transport/session/grpc/create.go
Stanislav Bogatyrev b7b5079934 Add Inner Ring code
2020-07-24 17:07:37 +03:00

53 lines
1.1 KiB
Go

package session
import (
"context"
"errors"
"github.com/nspcc-dev/neofs-api-go/refs"
"github.com/nspcc-dev/neofs-api-go/session"
)
var errExpiredSession = errors.New("expired session")
func (s sessionService) Create(ctx context.Context, req *CreateRequest) (*CreateResponse, error) {
// check lifetime
expired := req.ExpirationEpoch()
if s.epochReceiver.Epoch() > expired {
return nil, errExpiredSession
}
// generate private token for session
pToken, err := session.NewPrivateToken(expired)
if err != nil {
return nil, err
}
pkBytes, err := session.PublicSessionToken(pToken)
if err != nil {
return nil, err
}
// generate token ID
tokenID, err := refs.NewUUID()
if err != nil {
return nil, err
}
// create private token storage key
pTokenKey := session.PrivateTokenKey{}
pTokenKey.SetOwnerID(req.GetOwnerID())
pTokenKey.SetTokenID(tokenID)
// store private token
if err := s.ts.Store(pTokenKey, pToken); err != nil {
return nil, err
}
// construct response
resp := new(session.CreateResponse)
resp.SetID(tokenID)
resp.SetSessionKey(pkBytes)
return resp, nil
}