github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/session/types.go (about)

     1  package session
     2  
     3  import (
     4  	"github.com/TrueCloudLab/frostfs-api-go/v2/acl"
     5  	"github.com/TrueCloudLab/frostfs-api-go/v2/refs"
     6  	"github.com/TrueCloudLab/frostfs-api-go/v2/status"
     7  	"github.com/TrueCloudLab/frostfs-api-go/v2/util/proto"
     8  )
     9  
    10  type CreateRequestBody struct {
    11  	ownerID *refs.OwnerID
    12  
    13  	expiration uint64
    14  }
    15  
    16  type CreateRequest struct {
    17  	body *CreateRequestBody
    18  
    19  	RequestHeaders
    20  }
    21  
    22  type CreateResponseBody struct {
    23  	id []byte
    24  
    25  	sessionKey []byte
    26  }
    27  
    28  type CreateResponse struct {
    29  	body *CreateResponseBody
    30  
    31  	ResponseHeaders
    32  }
    33  
    34  type XHeader struct {
    35  	key, val string
    36  }
    37  
    38  type TokenLifetime struct {
    39  	exp, nbf, iat uint64
    40  }
    41  
    42  type ObjectSessionVerb uint32
    43  
    44  type objectSessionContextTarget struct {
    45  	cnr *refs.ContainerID
    46  
    47  	objs []refs.ObjectID
    48  }
    49  
    50  const (
    51  	_ = iota
    52  	fNumObjectTargetContainer
    53  	fNumObjectTargetObjects
    54  )
    55  
    56  func (x objectSessionContextTarget) StableMarshal(buf []byte) []byte {
    57  	if buf == nil {
    58  		buf = make([]byte, x.StableSize())
    59  	}
    60  
    61  	offset := proto.NestedStructureMarshal(fNumObjectTargetContainer, buf, x.cnr)
    62  
    63  	for i := range x.objs {
    64  		offset += proto.NestedStructureMarshal(fNumObjectTargetObjects, buf[offset:], &x.objs[i])
    65  	}
    66  
    67  	return buf
    68  }
    69  
    70  func (x objectSessionContextTarget) StableSize() (size int) {
    71  	size += proto.NestedStructureSize(fNumObjectTargetContainer, x.cnr)
    72  
    73  	for i := range x.objs {
    74  		size += proto.NestedStructureSize(fNumObjectTargetObjects, &x.objs[i])
    75  	}
    76  
    77  	return size
    78  }
    79  
    80  type ObjectSessionContext struct {
    81  	verb ObjectSessionVerb
    82  
    83  	cnr *refs.ContainerID
    84  
    85  	objs []refs.ObjectID
    86  }
    87  
    88  type TokenContext interface {
    89  	sessionTokenContext()
    90  }
    91  
    92  // Deprecated: use TokenContext instead.
    93  //
    94  //nolint:revive
    95  type SessionTokenContext = TokenContext
    96  
    97  type TokenBody struct {
    98  	id []byte
    99  
   100  	ownerID *refs.OwnerID
   101  
   102  	lifetime *TokenLifetime
   103  
   104  	sessionKey []byte
   105  
   106  	ctx TokenContext
   107  }
   108  
   109  // Deprecated: use TokenBody instead.
   110  //
   111  //nolint:revive
   112  type SessionTokenBody = TokenBody
   113  
   114  type Token struct {
   115  	body *TokenBody
   116  
   117  	sig *refs.Signature
   118  }
   119  
   120  // Deprecated: use Token instead.
   121  //
   122  //nolint:revive
   123  type SessionToken = Token
   124  
   125  type RequestVerificationHeader struct {
   126  	bodySig, metaSig, originSig *refs.Signature
   127  
   128  	origin *RequestVerificationHeader
   129  }
   130  
   131  type RequestMetaHeader struct {
   132  	version *refs.Version
   133  
   134  	ttl uint32
   135  
   136  	epoch uint64
   137  
   138  	xHeaders []XHeader
   139  
   140  	sessionToken *Token
   141  
   142  	bearerToken *acl.BearerToken
   143  
   144  	origin *RequestMetaHeader
   145  
   146  	netMagic uint64
   147  }
   148  
   149  type ResponseVerificationHeader struct {
   150  	bodySig, metaSig, originSig *refs.Signature
   151  
   152  	origin *ResponseVerificationHeader
   153  }
   154  
   155  type ResponseMetaHeader struct {
   156  	version *refs.Version
   157  
   158  	ttl uint32
   159  
   160  	epoch uint64
   161  
   162  	xHeaders []XHeader
   163  
   164  	origin *ResponseMetaHeader
   165  
   166  	status *status.Status
   167  }
   168  
   169  const (
   170  	ObjectVerbUnknown ObjectSessionVerb = iota
   171  	ObjectVerbPut
   172  	ObjectVerbGet
   173  	ObjectVerbHead
   174  	ObjectVerbSearch
   175  	ObjectVerbDelete
   176  	ObjectVerbRange
   177  	ObjectVerbRangeHash
   178  )
   179  
   180  func (c *CreateRequestBody) GetOwnerID() *refs.OwnerID {
   181  	if c != nil {
   182  		return c.ownerID
   183  	}
   184  
   185  	return nil
   186  }
   187  
   188  func (c *CreateRequestBody) SetOwnerID(v *refs.OwnerID) {
   189  	c.ownerID = v
   190  }
   191  
   192  func (c *CreateRequestBody) GetExpiration() uint64 {
   193  	if c != nil {
   194  		return c.expiration
   195  	}
   196  
   197  	return 0
   198  }
   199  
   200  func (c *CreateRequestBody) SetExpiration(v uint64) {
   201  	c.expiration = v
   202  }
   203  
   204  func (c *CreateRequest) GetBody() *CreateRequestBody {
   205  	if c != nil {
   206  		return c.body
   207  	}
   208  
   209  	return nil
   210  }
   211  
   212  func (c *CreateRequest) SetBody(v *CreateRequestBody) {
   213  	c.body = v
   214  }
   215  
   216  func (c *CreateRequest) GetMetaHeader() *RequestMetaHeader {
   217  	if c != nil {
   218  		return c.metaHeader
   219  	}
   220  
   221  	return nil
   222  }
   223  
   224  func (c *CreateRequest) SetMetaHeader(v *RequestMetaHeader) {
   225  	c.metaHeader = v
   226  }
   227  
   228  func (c *CreateRequest) GetVerificationHeader() *RequestVerificationHeader {
   229  	if c != nil {
   230  		return c.verifyHeader
   231  	}
   232  
   233  	return nil
   234  }
   235  
   236  func (c *CreateRequest) SetVerificationHeader(v *RequestVerificationHeader) {
   237  	c.verifyHeader = v
   238  }
   239  
   240  func (c *CreateResponseBody) GetID() []byte {
   241  	if c != nil {
   242  		return c.id
   243  	}
   244  
   245  	return nil
   246  }
   247  
   248  func (c *CreateResponseBody) SetID(v []byte) {
   249  	c.id = v
   250  }
   251  
   252  func (c *CreateResponseBody) GetSessionKey() []byte {
   253  	if c != nil {
   254  		return c.sessionKey
   255  	}
   256  
   257  	return nil
   258  }
   259  
   260  func (c *CreateResponseBody) SetSessionKey(v []byte) {
   261  	c.sessionKey = v
   262  }
   263  
   264  func (c *CreateResponse) GetBody() *CreateResponseBody {
   265  	if c != nil {
   266  		return c.body
   267  	}
   268  
   269  	return nil
   270  }
   271  
   272  func (c *CreateResponse) SetBody(v *CreateResponseBody) {
   273  	c.body = v
   274  }
   275  
   276  func (c *CreateResponse) GetMetaHeader() *ResponseMetaHeader {
   277  	if c != nil {
   278  		return c.metaHeader
   279  	}
   280  
   281  	return nil
   282  }
   283  
   284  func (c *CreateResponse) SetMetaHeader(v *ResponseMetaHeader) {
   285  	c.metaHeader = v
   286  }
   287  
   288  func (c *CreateResponse) GetVerificationHeader() *ResponseVerificationHeader {
   289  	if c != nil {
   290  		return c.verifyHeader
   291  	}
   292  
   293  	return nil
   294  }
   295  
   296  func (c *CreateResponse) SetVerificationHeader(v *ResponseVerificationHeader) {
   297  	c.verifyHeader = v
   298  }
   299  
   300  func (x *XHeader) GetKey() string {
   301  	if x != nil {
   302  		return x.key
   303  	}
   304  
   305  	return ""
   306  }
   307  
   308  func (x *XHeader) SetKey(v string) {
   309  	x.key = v
   310  }
   311  
   312  func (x *XHeader) GetValue() string {
   313  	if x != nil {
   314  		return x.val
   315  	}
   316  
   317  	return ""
   318  }
   319  
   320  func (x *XHeader) SetValue(v string) {
   321  	x.val = v
   322  }
   323  
   324  func (r *RequestVerificationHeader) GetBodySignature() *refs.Signature {
   325  	if r != nil {
   326  		return r.bodySig
   327  	}
   328  
   329  	return nil
   330  }
   331  
   332  func (r *RequestVerificationHeader) SetBodySignature(v *refs.Signature) {
   333  	r.bodySig = v
   334  }
   335  
   336  func (r *RequestVerificationHeader) GetMetaSignature() *refs.Signature {
   337  	if r != nil {
   338  		return r.metaSig
   339  	}
   340  
   341  	return nil
   342  }
   343  
   344  func (r *RequestVerificationHeader) SetMetaSignature(v *refs.Signature) {
   345  	r.metaSig = v
   346  }
   347  
   348  func (r *RequestVerificationHeader) GetOriginSignature() *refs.Signature {
   349  	if r != nil {
   350  		return r.originSig
   351  	}
   352  
   353  	return nil
   354  }
   355  
   356  func (r *RequestVerificationHeader) SetOriginSignature(v *refs.Signature) {
   357  	r.originSig = v
   358  }
   359  
   360  func (r *RequestVerificationHeader) GetOrigin() *RequestVerificationHeader {
   361  	if r != nil {
   362  		return r.origin
   363  	}
   364  
   365  	return nil
   366  }
   367  
   368  func (r *RequestVerificationHeader) SetOrigin(v *RequestVerificationHeader) {
   369  	r.origin = v
   370  }
   371  
   372  func (r *RequestMetaHeader) GetVersion() *refs.Version {
   373  	if r != nil {
   374  		return r.version
   375  	}
   376  
   377  	return nil
   378  }
   379  
   380  func (r *RequestMetaHeader) SetVersion(v *refs.Version) {
   381  	r.version = v
   382  }
   383  
   384  func (r *RequestMetaHeader) GetTTL() uint32 {
   385  	if r != nil {
   386  		return r.ttl
   387  	}
   388  
   389  	return 0
   390  }
   391  
   392  func (r *RequestMetaHeader) SetTTL(v uint32) {
   393  	r.ttl = v
   394  }
   395  
   396  func (r *RequestMetaHeader) GetEpoch() uint64 {
   397  	if r != nil {
   398  		return r.epoch
   399  	}
   400  
   401  	return 0
   402  }
   403  
   404  func (r *RequestMetaHeader) SetEpoch(v uint64) {
   405  	r.epoch = v
   406  }
   407  
   408  func (r *RequestMetaHeader) GetXHeaders() []XHeader {
   409  	if r != nil {
   410  		return r.xHeaders
   411  	}
   412  
   413  	return nil
   414  }
   415  
   416  func (r *RequestMetaHeader) SetXHeaders(v []XHeader) {
   417  	r.xHeaders = v
   418  }
   419  
   420  func (r *RequestMetaHeader) GetSessionToken() *Token {
   421  	if r != nil {
   422  		return r.sessionToken
   423  	}
   424  
   425  	return nil
   426  }
   427  
   428  func (r *RequestMetaHeader) SetSessionToken(v *Token) {
   429  	r.sessionToken = v
   430  }
   431  
   432  func (r *RequestMetaHeader) GetBearerToken() *acl.BearerToken {
   433  	if r != nil {
   434  		return r.bearerToken
   435  	}
   436  
   437  	return nil
   438  }
   439  
   440  func (r *RequestMetaHeader) SetBearerToken(v *acl.BearerToken) {
   441  	r.bearerToken = v
   442  }
   443  
   444  func (r *RequestMetaHeader) GetOrigin() *RequestMetaHeader {
   445  	if r != nil {
   446  		return r.origin
   447  	}
   448  
   449  	return nil
   450  }
   451  
   452  func (r *RequestMetaHeader) SetOrigin(v *RequestMetaHeader) {
   453  	r.origin = v
   454  }
   455  
   456  // GetNetworkMagic returns NeoFS network magic.
   457  func (r *RequestMetaHeader) GetNetworkMagic() uint64 {
   458  	if r != nil {
   459  		return r.netMagic
   460  	}
   461  
   462  	return 0
   463  }
   464  
   465  // SetNetworkMagic sets NeoFS network magic.
   466  func (r *RequestMetaHeader) SetNetworkMagic(v uint64) {
   467  	r.netMagic = v
   468  }
   469  
   470  func (l *TokenLifetime) GetExp() uint64 {
   471  	if l != nil {
   472  		return l.exp
   473  	}
   474  
   475  	return 0
   476  }
   477  
   478  func (l *TokenLifetime) SetExp(v uint64) {
   479  	l.exp = v
   480  }
   481  
   482  func (l *TokenLifetime) GetNbf() uint64 {
   483  	if l != nil {
   484  		return l.nbf
   485  	}
   486  
   487  	return 0
   488  }
   489  
   490  func (l *TokenLifetime) SetNbf(v uint64) {
   491  	l.nbf = v
   492  }
   493  
   494  func (l *TokenLifetime) GetIat() uint64 {
   495  	if l != nil {
   496  		return l.iat
   497  	}
   498  
   499  	return 0
   500  }
   501  
   502  func (l *TokenLifetime) SetIat(v uint64) {
   503  	l.iat = v
   504  }
   505  
   506  func (r *ResponseVerificationHeader) GetBodySignature() *refs.Signature {
   507  	if r != nil {
   508  		return r.bodySig
   509  	}
   510  
   511  	return nil
   512  }
   513  
   514  func (r *ResponseVerificationHeader) SetBodySignature(v *refs.Signature) {
   515  	r.bodySig = v
   516  }
   517  
   518  func (r *ResponseVerificationHeader) GetMetaSignature() *refs.Signature {
   519  	if r != nil {
   520  		return r.metaSig
   521  	}
   522  
   523  	return nil
   524  }
   525  
   526  func (r *ResponseVerificationHeader) SetMetaSignature(v *refs.Signature) {
   527  	r.metaSig = v
   528  }
   529  
   530  func (r *ResponseVerificationHeader) GetOriginSignature() *refs.Signature {
   531  	if r != nil {
   532  		return r.originSig
   533  	}
   534  
   535  	return nil
   536  }
   537  
   538  func (r *ResponseVerificationHeader) SetOriginSignature(v *refs.Signature) {
   539  	r.originSig = v
   540  }
   541  
   542  func (r *ResponseVerificationHeader) GetOrigin() *ResponseVerificationHeader {
   543  	if r != nil {
   544  		return r.origin
   545  	}
   546  
   547  	return nil
   548  }
   549  
   550  func (r *ResponseVerificationHeader) SetOrigin(v *ResponseVerificationHeader) {
   551  	r.origin = v
   552  }
   553  
   554  func (r *ResponseMetaHeader) GetVersion() *refs.Version {
   555  	if r != nil {
   556  		return r.version
   557  	}
   558  
   559  	return nil
   560  }
   561  
   562  func (r *ResponseMetaHeader) SetVersion(v *refs.Version) {
   563  	r.version = v
   564  }
   565  
   566  func (r *ResponseMetaHeader) GetTTL() uint32 {
   567  	if r != nil {
   568  		return r.ttl
   569  	}
   570  
   571  	return 0
   572  }
   573  
   574  func (r *ResponseMetaHeader) SetTTL(v uint32) {
   575  	r.ttl = v
   576  }
   577  
   578  func (r *ResponseMetaHeader) GetEpoch() uint64 {
   579  	if r != nil {
   580  		return r.epoch
   581  	}
   582  
   583  	return 0
   584  }
   585  
   586  func (r *ResponseMetaHeader) SetEpoch(v uint64) {
   587  	r.epoch = v
   588  }
   589  
   590  func (r *ResponseMetaHeader) GetXHeaders() []XHeader {
   591  	if r != nil {
   592  		return r.xHeaders
   593  	}
   594  
   595  	return nil
   596  }
   597  
   598  func (r *ResponseMetaHeader) SetXHeaders(v []XHeader) {
   599  	r.xHeaders = v
   600  }
   601  
   602  func (r *ResponseMetaHeader) GetOrigin() *ResponseMetaHeader {
   603  	if r != nil {
   604  		return r.origin
   605  	}
   606  
   607  	return nil
   608  }
   609  
   610  func (r *ResponseMetaHeader) SetOrigin(v *ResponseMetaHeader) {
   611  	r.origin = v
   612  }
   613  
   614  // GetStatus returns response status.
   615  func (r *ResponseMetaHeader) GetStatus() *status.Status {
   616  	if r != nil {
   617  		return r.status
   618  	}
   619  
   620  	return nil
   621  }
   622  
   623  // SetStatus sets response status.
   624  func (r *ResponseMetaHeader) SetStatus(v *status.Status) {
   625  	r.status = v
   626  }
   627  
   628  // SetStatus sets status of the message which can carry ResponseMetaHeader.
   629  //
   630  // Sets status field on the "highest" level of meta headers.
   631  // If meta header is missing in message, it is allocated.
   632  func SetStatus(msg interface {
   633  	GetMetaHeader() *ResponseMetaHeader
   634  	SetMetaHeader(*ResponseMetaHeader)
   635  }, st *status.Status) {
   636  	meta := msg.GetMetaHeader()
   637  	if meta == nil {
   638  		meta = new(ResponseMetaHeader)
   639  		msg.SetMetaHeader(meta)
   640  	}
   641  
   642  	meta.SetStatus(st)
   643  }
   644  
   645  func (c *ObjectSessionContext) sessionTokenContext() {}
   646  
   647  func (c *ObjectSessionContext) GetVerb() ObjectSessionVerb {
   648  	if c != nil {
   649  		return c.verb
   650  	}
   651  
   652  	return ObjectVerbUnknown
   653  }
   654  
   655  func (c *ObjectSessionContext) SetVerb(v ObjectSessionVerb) {
   656  	c.verb = v
   657  }
   658  
   659  func (c *ObjectSessionContext) GetContainer() *refs.ContainerID {
   660  	if c != nil {
   661  		return c.cnr
   662  	}
   663  
   664  	return nil
   665  }
   666  
   667  func (c *ObjectSessionContext) GetObjects() []refs.ObjectID {
   668  	if c != nil {
   669  		return c.objs
   670  	}
   671  
   672  	return nil
   673  }
   674  
   675  func (c *ObjectSessionContext) SetTarget(cnr *refs.ContainerID, objs ...refs.ObjectID) {
   676  	c.cnr = cnr
   677  	c.objs = objs
   678  }
   679  
   680  func (t *TokenBody) GetID() []byte {
   681  	if t != nil {
   682  		return t.id
   683  	}
   684  
   685  	return nil
   686  }
   687  
   688  func (t *TokenBody) SetID(v []byte) {
   689  	t.id = v
   690  }
   691  
   692  func (t *TokenBody) GetOwnerID() *refs.OwnerID {
   693  	if t != nil {
   694  		return t.ownerID
   695  	}
   696  
   697  	return nil
   698  }
   699  
   700  func (t *TokenBody) SetOwnerID(v *refs.OwnerID) {
   701  	t.ownerID = v
   702  }
   703  
   704  func (t *TokenBody) GetLifetime() *TokenLifetime {
   705  	if t != nil {
   706  		return t.lifetime
   707  	}
   708  
   709  	return nil
   710  }
   711  
   712  func (t *TokenBody) SetLifetime(v *TokenLifetime) {
   713  	t.lifetime = v
   714  }
   715  
   716  func (t *TokenBody) GetSessionKey() []byte {
   717  	if t != nil {
   718  		return t.sessionKey
   719  	}
   720  
   721  	return nil
   722  }
   723  
   724  func (t *TokenBody) SetSessionKey(v []byte) {
   725  	t.sessionKey = v
   726  }
   727  
   728  func (t *TokenBody) GetContext() TokenContext {
   729  	if t != nil {
   730  		return t.ctx
   731  	}
   732  
   733  	return nil
   734  }
   735  
   736  func (t *TokenBody) SetContext(v TokenContext) {
   737  	t.ctx = v
   738  }
   739  
   740  func (t *Token) GetBody() *TokenBody {
   741  	if t != nil {
   742  		return t.body
   743  	}
   744  
   745  	return nil
   746  }
   747  
   748  func (t *Token) SetBody(v *TokenBody) {
   749  	t.body = v
   750  }
   751  
   752  func (t *Token) GetSignature() *refs.Signature {
   753  	if t != nil {
   754  		return t.sig
   755  	}
   756  
   757  	return nil
   758  }
   759  
   760  func (t *Token) SetSignature(v *refs.Signature) {
   761  	t.sig = v
   762  }
   763  
   764  // ContainerSessionVerb represents NeoFS API v2
   765  // session.ContainerSessionContext.Verb enumeration.
   766  type ContainerSessionVerb uint32
   767  
   768  const (
   769  	// ContainerVerbUnknown corresponds to VERB_UNSPECIFIED enum value.
   770  	ContainerVerbUnknown ContainerSessionVerb = iota
   771  
   772  	// ContainerVerbPut corresponds to PUT enum value.
   773  	ContainerVerbPut
   774  
   775  	// ContainerVerbDelete corresponds to DELETE enum value.
   776  	ContainerVerbDelete
   777  
   778  	// ContainerVerbSetEACL corresponds to SETEACL enum value.
   779  	ContainerVerbSetEACL
   780  )
   781  
   782  // ContainerSessionContext represents structure of the
   783  // NeoFS API v2 session.ContainerSessionContext message.
   784  type ContainerSessionContext struct {
   785  	verb ContainerSessionVerb
   786  
   787  	wildcard bool
   788  
   789  	cid *refs.ContainerID
   790  }
   791  
   792  func (x *ContainerSessionContext) sessionTokenContext() {}
   793  
   794  // Verb returns type of request for which the token is issued.
   795  func (x *ContainerSessionContext) Verb() ContainerSessionVerb {
   796  	if x != nil {
   797  		return x.verb
   798  	}
   799  
   800  	return ContainerVerbUnknown
   801  }
   802  
   803  // SetVerb sets type of request for which the token is issued.
   804  func (x *ContainerSessionContext) SetVerb(v ContainerSessionVerb) {
   805  	x.verb = v
   806  }
   807  
   808  // Wildcard returns wildcard flag of the container session.
   809  func (x *ContainerSessionContext) Wildcard() bool {
   810  	if x != nil {
   811  		return x.wildcard
   812  	}
   813  
   814  	return false
   815  }
   816  
   817  // SetWildcard sets wildcard flag of the container session.
   818  func (x *ContainerSessionContext) SetWildcard(v bool) {
   819  	x.wildcard = v
   820  }
   821  
   822  // ContainerID returns identifier of the container related to the session.
   823  func (x *ContainerSessionContext) ContainerID() *refs.ContainerID {
   824  	if x != nil {
   825  		return x.cid
   826  	}
   827  
   828  	return nil
   829  }
   830  
   831  // SetContainerID sets identifier of the container related to the session.
   832  func (x *ContainerSessionContext) SetContainerID(v *refs.ContainerID) {
   833  	x.cid = v
   834  }