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 }