github.com/grailbio/base@v0.0.11/security/ticket/ticket.vdl.go (about) 1 // This file was auto-generated by the vanadium vdl tool. 2 // Package: ticket 3 4 //nolint:golint 5 package ticket 6 7 import ( 8 "fmt" 9 10 v23 "v.io/v23" 11 "v.io/v23/context" 12 "v.io/v23/rpc" 13 "v.io/v23/security/access" 14 "v.io/v23/vdl" 15 ) 16 17 var _ = initializeVDL() // Must be first; see initializeVDL comments for details. 18 19 // Type definitions 20 // ================ 21 22 // TicketConfig Controls fields 23 type Control int 24 25 const ( 26 ControlPagerDutyId Control = iota 27 ControlRationale 28 ControlTicketId 29 ) 30 31 // ControlAll holds all labels for Control. 32 var ControlAll = [...]Control{ControlPagerDutyId, ControlRationale, ControlTicketId} 33 34 // ControlFromString creates a Control from a string label. 35 //nolint:deadcode,unused 36 func ControlFromString(label string) (x Control, err error) { 37 err = x.Set(label) 38 return 39 } 40 41 // Set assigns label to x. 42 func (x *Control) Set(label string) error { 43 switch label { 44 case "PagerDutyId", "pagerdutyid": 45 *x = ControlPagerDutyId 46 return nil 47 case "Rationale", "rationale": 48 *x = ControlRationale 49 return nil 50 case "TicketId", "ticketid": 51 *x = ControlTicketId 52 return nil 53 } 54 *x = -1 55 return fmt.Errorf("unknown label %q in ticket.Control", label) 56 } 57 58 // String returns the string label of x. 59 func (x Control) String() string { 60 switch x { 61 case ControlPagerDutyId: 62 return "PagerDutyId" 63 case ControlRationale: 64 return "Rationale" 65 case ControlTicketId: 66 return "TicketId" 67 } 68 return "" 69 } 70 71 func (Control) VDLReflect(struct { 72 Name string `vdl:"github.com/grailbio/base/security/ticket.Control"` 73 Enum struct{ PagerDutyId, Rationale, TicketId string } 74 }) { 75 } 76 77 func (x Control) VDLIsZero() bool { //nolint:gocyclo 78 return x == ControlPagerDutyId 79 } 80 81 func (x Control) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 82 if err := enc.WriteValueString(vdlTypeEnum1, x.String()); err != nil { 83 return err 84 } 85 return nil 86 } 87 88 func (x *Control) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 89 switch value, err := dec.ReadValueString(); { 90 case err != nil: 91 return err 92 default: 93 if err := x.Set(value); err != nil { 94 return err 95 } 96 } 97 return nil 98 } 99 100 // AwsCredentials describes a set of (potentially temporary) AWS credentials. 101 type AwsCredentials struct { 102 Region string 103 AccessKeyId string 104 SecretAccessKey string 105 SessionToken string 106 // Expiration indicates the date on which the credentials expire. 107 Expiration string 108 } 109 110 func (AwsCredentials) VDLReflect(struct { 111 Name string `vdl:"github.com/grailbio/base/security/ticket.AwsCredentials"` 112 }) { 113 } 114 115 func (x AwsCredentials) VDLIsZero() bool { //nolint:gocyclo 116 return x == AwsCredentials{} 117 } 118 119 func (x AwsCredentials) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 120 if err := enc.StartValue(vdlTypeStruct2); err != nil { 121 return err 122 } 123 if x.Region != "" { 124 if err := enc.NextFieldValueString(0, vdl.StringType, x.Region); err != nil { 125 return err 126 } 127 } 128 if x.AccessKeyId != "" { 129 if err := enc.NextFieldValueString(1, vdl.StringType, x.AccessKeyId); err != nil { 130 return err 131 } 132 } 133 if x.SecretAccessKey != "" { 134 if err := enc.NextFieldValueString(2, vdl.StringType, x.SecretAccessKey); err != nil { 135 return err 136 } 137 } 138 if x.SessionToken != "" { 139 if err := enc.NextFieldValueString(3, vdl.StringType, x.SessionToken); err != nil { 140 return err 141 } 142 } 143 if x.Expiration != "" { 144 if err := enc.NextFieldValueString(4, vdl.StringType, x.Expiration); err != nil { 145 return err 146 } 147 } 148 if err := enc.NextField(-1); err != nil { 149 return err 150 } 151 return enc.FinishValue() 152 } 153 154 func (x *AwsCredentials) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 155 *x = AwsCredentials{} 156 if err := dec.StartValue(vdlTypeStruct2); err != nil { 157 return err 158 } 159 decType := dec.Type() 160 for { 161 index, err := dec.NextField() 162 switch { 163 case err != nil: 164 return err 165 case index == -1: 166 return dec.FinishValue() 167 } 168 if decType != vdlTypeStruct2 { 169 index = vdlTypeStruct2.FieldIndexByName(decType.Field(index).Name) 170 if index == -1 { 171 if err := dec.SkipValue(); err != nil { 172 return err 173 } 174 continue 175 } 176 } 177 switch index { 178 case 0: 179 switch value, err := dec.ReadValueString(); { 180 case err != nil: 181 return err 182 default: 183 x.Region = value 184 } 185 case 1: 186 switch value, err := dec.ReadValueString(); { 187 case err != nil: 188 return err 189 default: 190 x.AccessKeyId = value 191 } 192 case 2: 193 switch value, err := dec.ReadValueString(); { 194 case err != nil: 195 return err 196 default: 197 x.SecretAccessKey = value 198 } 199 case 3: 200 switch value, err := dec.ReadValueString(); { 201 case err != nil: 202 return err 203 default: 204 x.SessionToken = value 205 } 206 case 4: 207 switch value, err := dec.ReadValueString(); { 208 case err != nil: 209 return err 210 default: 211 x.Expiration = value 212 } 213 } 214 } 215 } 216 217 // AwsAssumeRoleBuilder describes the information required to obtain a temporary 218 // set of AWS credentials (which can be described using AwsCredentials) using 219 // the AssumeRole call from Security Token Service (STS). 220 type AwsAssumeRoleBuilder struct { 221 Region string 222 Role string 223 TtlSec int32 224 } 225 226 func (AwsAssumeRoleBuilder) VDLReflect(struct { 227 Name string `vdl:"github.com/grailbio/base/security/ticket.AwsAssumeRoleBuilder"` 228 }) { 229 } 230 231 func (x AwsAssumeRoleBuilder) VDLIsZero() bool { //nolint:gocyclo 232 return x == AwsAssumeRoleBuilder{} 233 } 234 235 func (x AwsAssumeRoleBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 236 if err := enc.StartValue(vdlTypeStruct3); err != nil { 237 return err 238 } 239 if x.Region != "" { 240 if err := enc.NextFieldValueString(0, vdl.StringType, x.Region); err != nil { 241 return err 242 } 243 } 244 if x.Role != "" { 245 if err := enc.NextFieldValueString(1, vdl.StringType, x.Role); err != nil { 246 return err 247 } 248 } 249 if x.TtlSec != 0 { 250 if err := enc.NextFieldValueInt(2, vdl.Int32Type, int64(x.TtlSec)); err != nil { 251 return err 252 } 253 } 254 if err := enc.NextField(-1); err != nil { 255 return err 256 } 257 return enc.FinishValue() 258 } 259 260 func (x *AwsAssumeRoleBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 261 *x = AwsAssumeRoleBuilder{} 262 if err := dec.StartValue(vdlTypeStruct3); err != nil { 263 return err 264 } 265 decType := dec.Type() 266 for { 267 index, err := dec.NextField() 268 switch { 269 case err != nil: 270 return err 271 case index == -1: 272 return dec.FinishValue() 273 } 274 if decType != vdlTypeStruct3 { 275 index = vdlTypeStruct3.FieldIndexByName(decType.Field(index).Name) 276 if index == -1 { 277 if err := dec.SkipValue(); err != nil { 278 return err 279 } 280 continue 281 } 282 } 283 switch index { 284 case 0: 285 switch value, err := dec.ReadValueString(); { 286 case err != nil: 287 return err 288 default: 289 x.Region = value 290 } 291 case 1: 292 switch value, err := dec.ReadValueString(); { 293 case err != nil: 294 return err 295 default: 296 x.Role = value 297 } 298 case 2: 299 switch value, err := dec.ReadValueInt(32); { 300 case err != nil: 301 return err 302 default: 303 x.TtlSec = int32(value) 304 } 305 } 306 } 307 } 308 309 // AwsSessionBuilder describes the information required to obtain a temporary 310 // set of AWS credentials (described using AwsCredentials) then using 311 // the GetSessionToken call from Security Token Service (STS). 312 type AwsSessionBuilder struct { 313 AwsCredentials AwsCredentials 314 // TTL in seconds for the generated AWS credential from 900-129600. 315 TtlSec int32 316 } 317 318 func (AwsSessionBuilder) VDLReflect(struct { 319 Name string `vdl:"github.com/grailbio/base/security/ticket.AwsSessionBuilder"` 320 }) { 321 } 322 323 func (x AwsSessionBuilder) VDLIsZero() bool { //nolint:gocyclo 324 return x == AwsSessionBuilder{} 325 } 326 327 func (x AwsSessionBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 328 if err := enc.StartValue(vdlTypeStruct4); err != nil { 329 return err 330 } 331 if x.AwsCredentials != (AwsCredentials{}) { 332 if err := enc.NextField(0); err != nil { 333 return err 334 } 335 if err := x.AwsCredentials.VDLWrite(enc); err != nil { 336 return err 337 } 338 } 339 if x.TtlSec != 0 { 340 if err := enc.NextFieldValueInt(1, vdl.Int32Type, int64(x.TtlSec)); err != nil { 341 return err 342 } 343 } 344 if err := enc.NextField(-1); err != nil { 345 return err 346 } 347 return enc.FinishValue() 348 } 349 350 func (x *AwsSessionBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 351 *x = AwsSessionBuilder{} 352 if err := dec.StartValue(vdlTypeStruct4); err != nil { 353 return err 354 } 355 decType := dec.Type() 356 for { 357 index, err := dec.NextField() 358 switch { 359 case err != nil: 360 return err 361 case index == -1: 362 return dec.FinishValue() 363 } 364 if decType != vdlTypeStruct4 { 365 index = vdlTypeStruct4.FieldIndexByName(decType.Field(index).Name) 366 if index == -1 { 367 if err := dec.SkipValue(); err != nil { 368 return err 369 } 370 continue 371 } 372 } 373 switch index { 374 case 0: 375 if err := x.AwsCredentials.VDLRead(dec); err != nil { 376 return err 377 } 378 case 1: 379 switch value, err := dec.ReadValueInt(32); { 380 case err != nil: 381 return err 382 default: 383 x.TtlSec = int32(value) 384 } 385 } 386 } 387 } 388 389 // TlsCertAuthorityBuilder describes a Certification Authority capable to 390 // generate a particular cert. 391 type TlsCertAuthorityBuilder struct { 392 // PEM-encoded certificate and private key of the Certificate Authority. 393 Authority string 394 // TTL for the generated cert. 395 TtlSec int32 396 // Common Name of the generated cert. 397 CommonName string 398 // Subject Alternate Name list. 399 // Note: x509 spec says if SAN is set, CN is usually ignored. 400 // Include CN in SAN list if you want the CN to be verified. 401 San []string 402 } 403 404 func (TlsCertAuthorityBuilder) VDLReflect(struct { 405 Name string `vdl:"github.com/grailbio/base/security/ticket.TlsCertAuthorityBuilder"` 406 }) { 407 } 408 409 func (x TlsCertAuthorityBuilder) VDLIsZero() bool { //nolint:gocyclo 410 if x.Authority != "" { 411 return false 412 } 413 if x.TtlSec != 0 { 414 return false 415 } 416 if x.CommonName != "" { 417 return false 418 } 419 if len(x.San) != 0 { 420 return false 421 } 422 return true 423 } 424 425 func (x TlsCertAuthorityBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 426 if err := enc.StartValue(vdlTypeStruct5); err != nil { 427 return err 428 } 429 if x.Authority != "" { 430 if err := enc.NextFieldValueString(0, vdl.StringType, x.Authority); err != nil { 431 return err 432 } 433 } 434 if x.TtlSec != 0 { 435 if err := enc.NextFieldValueInt(1, vdl.Int32Type, int64(x.TtlSec)); err != nil { 436 return err 437 } 438 } 439 if x.CommonName != "" { 440 if err := enc.NextFieldValueString(2, vdl.StringType, x.CommonName); err != nil { 441 return err 442 } 443 } 444 if len(x.San) != 0 { 445 if err := enc.NextField(3); err != nil { 446 return err 447 } 448 if err := vdlWriteAnonList1(enc, x.San); err != nil { 449 return err 450 } 451 } 452 if err := enc.NextField(-1); err != nil { 453 return err 454 } 455 return enc.FinishValue() 456 } 457 458 func vdlWriteAnonList1(enc vdl.Encoder, x []string) error { 459 if err := enc.StartValue(vdlTypeList6); err != nil { 460 return err 461 } 462 if err := enc.SetLenHint(len(x)); err != nil { 463 return err 464 } 465 for _, elem := range x { 466 if err := enc.NextEntryValueString(vdl.StringType, elem); err != nil { 467 return err 468 } 469 } 470 if err := enc.NextEntry(true); err != nil { 471 return err 472 } 473 return enc.FinishValue() 474 } 475 476 func (x *TlsCertAuthorityBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 477 *x = TlsCertAuthorityBuilder{} 478 if err := dec.StartValue(vdlTypeStruct5); err != nil { 479 return err 480 } 481 decType := dec.Type() 482 for { 483 index, err := dec.NextField() 484 switch { 485 case err != nil: 486 return err 487 case index == -1: 488 return dec.FinishValue() 489 } 490 if decType != vdlTypeStruct5 { 491 index = vdlTypeStruct5.FieldIndexByName(decType.Field(index).Name) 492 if index == -1 { 493 if err := dec.SkipValue(); err != nil { 494 return err 495 } 496 continue 497 } 498 } 499 switch index { 500 case 0: 501 switch value, err := dec.ReadValueString(); { 502 case err != nil: 503 return err 504 default: 505 x.Authority = value 506 } 507 case 1: 508 switch value, err := dec.ReadValueInt(32); { 509 case err != nil: 510 return err 511 default: 512 x.TtlSec = int32(value) 513 } 514 case 2: 515 switch value, err := dec.ReadValueString(); { 516 case err != nil: 517 return err 518 default: 519 x.CommonName = value 520 } 521 case 3: 522 if err := vdlReadAnonList1(dec, &x.San); err != nil { 523 return err 524 } 525 } 526 } 527 } 528 529 func vdlReadAnonList1(dec vdl.Decoder, x *[]string) error { 530 if err := dec.StartValue(vdlTypeList6); err != nil { 531 return err 532 } 533 if len := dec.LenHint(); len > 0 { 534 *x = make([]string, 0, len) 535 } else { 536 *x = nil 537 } 538 for { 539 switch done, elem, err := dec.NextEntryValueString(); { 540 case err != nil: 541 return err 542 case done: 543 return dec.FinishValue() 544 default: 545 *x = append(*x, elem) 546 } 547 } 548 } 549 550 type SshCertAuthorityBuilder struct { 551 // ssh-encoded private key of the Certificate Authority. 552 CaPrivateKey string 553 // ssh-encoded Certificate 554 CaCertificate string 555 // ssh-encoded Public key that will be signed to create the certificate. 556 PublicKey string 557 // Additional SSH Cert options like 558 // permit-X11-forwarding 559 // permit-agent-forwarding 560 // permit-port-forwarding 561 // permit-pty 562 // permit-user-rc 563 ExtensionsOptions []string 564 // Additional SSH Options that are required to be valid/accepted 565 CriticalOptions []string 566 // The Usernames that this key can connect as - defaults as 567 // ubuntu 568 // core 569 // ec2-user 570 Principals []string 571 // TTL for the generated cert - user cert < 60 ; host cert < 2628000 (5 years) 572 TtlMin int32 573 } 574 575 func (SshCertAuthorityBuilder) VDLReflect(struct { 576 Name string `vdl:"github.com/grailbio/base/security/ticket.SshCertAuthorityBuilder"` 577 }) { 578 } 579 580 func (x SshCertAuthorityBuilder) VDLIsZero() bool { //nolint:gocyclo 581 if x.CaPrivateKey != "" { 582 return false 583 } 584 if x.CaCertificate != "" { 585 return false 586 } 587 if x.PublicKey != "" { 588 return false 589 } 590 if len(x.ExtensionsOptions) != 0 { 591 return false 592 } 593 if len(x.CriticalOptions) != 0 { 594 return false 595 } 596 if len(x.Principals) != 0 { 597 return false 598 } 599 if x.TtlMin != 0 { 600 return false 601 } 602 return true 603 } 604 605 func (x SshCertAuthorityBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 606 if err := enc.StartValue(vdlTypeStruct7); err != nil { 607 return err 608 } 609 if x.CaPrivateKey != "" { 610 if err := enc.NextFieldValueString(0, vdl.StringType, x.CaPrivateKey); err != nil { 611 return err 612 } 613 } 614 if x.CaCertificate != "" { 615 if err := enc.NextFieldValueString(1, vdl.StringType, x.CaCertificate); err != nil { 616 return err 617 } 618 } 619 if x.PublicKey != "" { 620 if err := enc.NextFieldValueString(2, vdl.StringType, x.PublicKey); err != nil { 621 return err 622 } 623 } 624 if len(x.ExtensionsOptions) != 0 { 625 if err := enc.NextField(3); err != nil { 626 return err 627 } 628 if err := vdlWriteAnonList1(enc, x.ExtensionsOptions); err != nil { 629 return err 630 } 631 } 632 if len(x.CriticalOptions) != 0 { 633 if err := enc.NextField(4); err != nil { 634 return err 635 } 636 if err := vdlWriteAnonList1(enc, x.CriticalOptions); err != nil { 637 return err 638 } 639 } 640 if len(x.Principals) != 0 { 641 if err := enc.NextField(5); err != nil { 642 return err 643 } 644 if err := vdlWriteAnonList1(enc, x.Principals); err != nil { 645 return err 646 } 647 } 648 if x.TtlMin != 0 { 649 if err := enc.NextFieldValueInt(6, vdl.Int32Type, int64(x.TtlMin)); err != nil { 650 return err 651 } 652 } 653 if err := enc.NextField(-1); err != nil { 654 return err 655 } 656 return enc.FinishValue() 657 } 658 659 func (x *SshCertAuthorityBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 660 *x = SshCertAuthorityBuilder{} 661 if err := dec.StartValue(vdlTypeStruct7); err != nil { 662 return err 663 } 664 decType := dec.Type() 665 for { 666 index, err := dec.NextField() 667 switch { 668 case err != nil: 669 return err 670 case index == -1: 671 return dec.FinishValue() 672 } 673 if decType != vdlTypeStruct7 { 674 index = vdlTypeStruct7.FieldIndexByName(decType.Field(index).Name) 675 if index == -1 { 676 if err := dec.SkipValue(); err != nil { 677 return err 678 } 679 continue 680 } 681 } 682 switch index { 683 case 0: 684 switch value, err := dec.ReadValueString(); { 685 case err != nil: 686 return err 687 default: 688 x.CaPrivateKey = value 689 } 690 case 1: 691 switch value, err := dec.ReadValueString(); { 692 case err != nil: 693 return err 694 default: 695 x.CaCertificate = value 696 } 697 case 2: 698 switch value, err := dec.ReadValueString(); { 699 case err != nil: 700 return err 701 default: 702 x.PublicKey = value 703 } 704 case 3: 705 if err := vdlReadAnonList1(dec, &x.ExtensionsOptions); err != nil { 706 return err 707 } 708 case 4: 709 if err := vdlReadAnonList1(dec, &x.CriticalOptions); err != nil { 710 return err 711 } 712 case 5: 713 if err := vdlReadAnonList1(dec, &x.Principals); err != nil { 714 return err 715 } 716 case 6: 717 switch value, err := dec.ReadValueInt(32); { 718 case err != nil: 719 return err 720 default: 721 x.TtlMin = int32(value) 722 } 723 } 724 } 725 } 726 727 // B2AccountAuthorizationBuilder describes the information required to 728 // obtain a B2 account authorization. 729 type B2AccountAuthorizationBuilder struct { 730 AccountId string 731 ApplicationKey string 732 } 733 734 func (B2AccountAuthorizationBuilder) VDLReflect(struct { 735 Name string `vdl:"github.com/grailbio/base/security/ticket.B2AccountAuthorizationBuilder"` 736 }) { 737 } 738 739 func (x B2AccountAuthorizationBuilder) VDLIsZero() bool { //nolint:gocyclo 740 return x == B2AccountAuthorizationBuilder{} 741 } 742 743 func (x B2AccountAuthorizationBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 744 if err := enc.StartValue(vdlTypeStruct8); err != nil { 745 return err 746 } 747 if x.AccountId != "" { 748 if err := enc.NextFieldValueString(0, vdl.StringType, x.AccountId); err != nil { 749 return err 750 } 751 } 752 if x.ApplicationKey != "" { 753 if err := enc.NextFieldValueString(1, vdl.StringType, x.ApplicationKey); err != nil { 754 return err 755 } 756 } 757 if err := enc.NextField(-1); err != nil { 758 return err 759 } 760 return enc.FinishValue() 761 } 762 763 func (x *B2AccountAuthorizationBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 764 *x = B2AccountAuthorizationBuilder{} 765 if err := dec.StartValue(vdlTypeStruct8); err != nil { 766 return err 767 } 768 decType := dec.Type() 769 for { 770 index, err := dec.NextField() 771 switch { 772 case err != nil: 773 return err 774 case index == -1: 775 return dec.FinishValue() 776 } 777 if decType != vdlTypeStruct8 { 778 index = vdlTypeStruct8.FieldIndexByName(decType.Field(index).Name) 779 if index == -1 { 780 if err := dec.SkipValue(); err != nil { 781 return err 782 } 783 continue 784 } 785 } 786 switch index { 787 case 0: 788 switch value, err := dec.ReadValueString(); { 789 case err != nil: 790 return err 791 default: 792 x.AccountId = value 793 } 794 case 1: 795 switch value, err := dec.ReadValueString(); { 796 case err != nil: 797 return err 798 default: 799 x.ApplicationKey = value 800 } 801 } 802 } 803 } 804 805 // VanadiumBuilder describes the information required to build Vanadium 806 // blessings. 807 type VanadiumBuilder struct { 808 BlessingName string 809 } 810 811 func (VanadiumBuilder) VDLReflect(struct { 812 Name string `vdl:"github.com/grailbio/base/security/ticket.VanadiumBuilder"` 813 }) { 814 } 815 816 func (x VanadiumBuilder) VDLIsZero() bool { //nolint:gocyclo 817 return x == VanadiumBuilder{} 818 } 819 820 func (x VanadiumBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 821 if err := enc.StartValue(vdlTypeStruct9); err != nil { 822 return err 823 } 824 if x.BlessingName != "" { 825 if err := enc.NextFieldValueString(0, vdl.StringType, x.BlessingName); err != nil { 826 return err 827 } 828 } 829 if err := enc.NextField(-1); err != nil { 830 return err 831 } 832 return enc.FinishValue() 833 } 834 835 func (x *VanadiumBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 836 *x = VanadiumBuilder{} 837 if err := dec.StartValue(vdlTypeStruct9); err != nil { 838 return err 839 } 840 decType := dec.Type() 841 for { 842 index, err := dec.NextField() 843 switch { 844 case err != nil: 845 return err 846 case index == -1: 847 return dec.FinishValue() 848 } 849 if decType != vdlTypeStruct9 { 850 index = vdlTypeStruct9.FieldIndexByName(decType.Field(index).Name) 851 if index == -1 { 852 if err := dec.SkipValue(); err != nil { 853 return err 854 } 855 continue 856 } 857 } 858 if index == 0 { 859 860 switch value, err := dec.ReadValueString(); { 861 case err != nil: 862 return err 863 default: 864 x.BlessingName = value 865 } 866 } 867 } 868 } 869 870 // AwsTicket is a ticket that contains a set of (potentially temporary) 871 // AWS credentials. 872 type AwsTicket struct { 873 AwsAssumeRoleBuilder *AwsAssumeRoleBuilder 874 AwsSessionBuilder *AwsSessionBuilder 875 AwsCredentials AwsCredentials 876 } 877 878 func (AwsTicket) VDLReflect(struct { 879 Name string `vdl:"github.com/grailbio/base/security/ticket.AwsTicket"` 880 }) { 881 } 882 883 func (x AwsTicket) VDLIsZero() bool { //nolint:gocyclo 884 return x == AwsTicket{} 885 } 886 887 func (x AwsTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 888 if err := enc.StartValue(vdlTypeStruct10); err != nil { 889 return err 890 } 891 if x.AwsAssumeRoleBuilder != nil { 892 if err := enc.NextField(0); err != nil { 893 return err 894 } 895 enc.SetNextStartValueIsOptional() 896 if err := x.AwsAssumeRoleBuilder.VDLWrite(enc); err != nil { 897 return err 898 } 899 } 900 if x.AwsSessionBuilder != nil { 901 if err := enc.NextField(1); err != nil { 902 return err 903 } 904 enc.SetNextStartValueIsOptional() 905 if err := x.AwsSessionBuilder.VDLWrite(enc); err != nil { 906 return err 907 } 908 } 909 if x.AwsCredentials != (AwsCredentials{}) { 910 if err := enc.NextField(2); err != nil { 911 return err 912 } 913 if err := x.AwsCredentials.VDLWrite(enc); err != nil { 914 return err 915 } 916 } 917 if err := enc.NextField(-1); err != nil { 918 return err 919 } 920 return enc.FinishValue() 921 } 922 923 func (x *AwsTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 924 *x = AwsTicket{} 925 if err := dec.StartValue(vdlTypeStruct10); err != nil { 926 return err 927 } 928 decType := dec.Type() 929 for { 930 index, err := dec.NextField() 931 switch { 932 case err != nil: 933 return err 934 case index == -1: 935 return dec.FinishValue() 936 } 937 if decType != vdlTypeStruct10 { 938 index = vdlTypeStruct10.FieldIndexByName(decType.Field(index).Name) 939 if index == -1 { 940 if err := dec.SkipValue(); err != nil { 941 return err 942 } 943 continue 944 } 945 } 946 switch index { 947 case 0: 948 if err := dec.StartValue(vdlTypeOptional11); err != nil { 949 return err 950 } 951 if dec.IsNil() { 952 x.AwsAssumeRoleBuilder = nil 953 if err := dec.FinishValue(); err != nil { 954 return err 955 } 956 } else { 957 x.AwsAssumeRoleBuilder = new(AwsAssumeRoleBuilder) 958 dec.IgnoreNextStartValue() 959 if err := x.AwsAssumeRoleBuilder.VDLRead(dec); err != nil { 960 return err 961 } 962 } 963 case 1: 964 if err := dec.StartValue(vdlTypeOptional12); err != nil { 965 return err 966 } 967 if dec.IsNil() { 968 x.AwsSessionBuilder = nil 969 if err := dec.FinishValue(); err != nil { 970 return err 971 } 972 } else { 973 x.AwsSessionBuilder = new(AwsSessionBuilder) 974 dec.IgnoreNextStartValue() 975 if err := x.AwsSessionBuilder.VDLRead(dec); err != nil { 976 return err 977 } 978 } 979 case 2: 980 if err := x.AwsCredentials.VDLRead(dec); err != nil { 981 return err 982 } 983 } 984 } 985 } 986 987 // S3Ticket describes an AWS S3 object or prefix. 988 type S3Ticket struct { 989 AwsAssumeRoleBuilder *AwsAssumeRoleBuilder 990 AwsSessionBuilder *AwsSessionBuilder 991 AwsCredentials AwsCredentials 992 Endpoint string 993 Bucket string 994 Prefix string 995 } 996 997 func (S3Ticket) VDLReflect(struct { 998 Name string `vdl:"github.com/grailbio/base/security/ticket.S3Ticket"` 999 }) { 1000 } 1001 1002 func (x S3Ticket) VDLIsZero() bool { //nolint:gocyclo 1003 return x == S3Ticket{} 1004 } 1005 1006 func (x S3Ticket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1007 if err := enc.StartValue(vdlTypeStruct13); err != nil { 1008 return err 1009 } 1010 if x.AwsAssumeRoleBuilder != nil { 1011 if err := enc.NextField(0); err != nil { 1012 return err 1013 } 1014 enc.SetNextStartValueIsOptional() 1015 if err := x.AwsAssumeRoleBuilder.VDLWrite(enc); err != nil { 1016 return err 1017 } 1018 } 1019 if x.AwsSessionBuilder != nil { 1020 if err := enc.NextField(1); err != nil { 1021 return err 1022 } 1023 enc.SetNextStartValueIsOptional() 1024 if err := x.AwsSessionBuilder.VDLWrite(enc); err != nil { 1025 return err 1026 } 1027 } 1028 if x.AwsCredentials != (AwsCredentials{}) { 1029 if err := enc.NextField(2); err != nil { 1030 return err 1031 } 1032 if err := x.AwsCredentials.VDLWrite(enc); err != nil { 1033 return err 1034 } 1035 } 1036 if x.Endpoint != "" { 1037 if err := enc.NextFieldValueString(3, vdl.StringType, x.Endpoint); err != nil { 1038 return err 1039 } 1040 } 1041 if x.Bucket != "" { 1042 if err := enc.NextFieldValueString(4, vdl.StringType, x.Bucket); err != nil { 1043 return err 1044 } 1045 } 1046 if x.Prefix != "" { 1047 if err := enc.NextFieldValueString(5, vdl.StringType, x.Prefix); err != nil { 1048 return err 1049 } 1050 } 1051 if err := enc.NextField(-1); err != nil { 1052 return err 1053 } 1054 return enc.FinishValue() 1055 } 1056 1057 func (x *S3Ticket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1058 *x = S3Ticket{} 1059 if err := dec.StartValue(vdlTypeStruct13); err != nil { 1060 return err 1061 } 1062 decType := dec.Type() 1063 for { 1064 index, err := dec.NextField() 1065 switch { 1066 case err != nil: 1067 return err 1068 case index == -1: 1069 return dec.FinishValue() 1070 } 1071 if decType != vdlTypeStruct13 { 1072 index = vdlTypeStruct13.FieldIndexByName(decType.Field(index).Name) 1073 if index == -1 { 1074 if err := dec.SkipValue(); err != nil { 1075 return err 1076 } 1077 continue 1078 } 1079 } 1080 switch index { 1081 case 0: 1082 if err := dec.StartValue(vdlTypeOptional11); err != nil { 1083 return err 1084 } 1085 if dec.IsNil() { 1086 x.AwsAssumeRoleBuilder = nil 1087 if err := dec.FinishValue(); err != nil { 1088 return err 1089 } 1090 } else { 1091 x.AwsAssumeRoleBuilder = new(AwsAssumeRoleBuilder) 1092 dec.IgnoreNextStartValue() 1093 if err := x.AwsAssumeRoleBuilder.VDLRead(dec); err != nil { 1094 return err 1095 } 1096 } 1097 case 1: 1098 if err := dec.StartValue(vdlTypeOptional12); err != nil { 1099 return err 1100 } 1101 if dec.IsNil() { 1102 x.AwsSessionBuilder = nil 1103 if err := dec.FinishValue(); err != nil { 1104 return err 1105 } 1106 } else { 1107 x.AwsSessionBuilder = new(AwsSessionBuilder) 1108 dec.IgnoreNextStartValue() 1109 if err := x.AwsSessionBuilder.VDLRead(dec); err != nil { 1110 return err 1111 } 1112 } 1113 case 2: 1114 if err := x.AwsCredentials.VDLRead(dec); err != nil { 1115 return err 1116 } 1117 case 3: 1118 switch value, err := dec.ReadValueString(); { 1119 case err != nil: 1120 return err 1121 default: 1122 x.Endpoint = value 1123 } 1124 case 4: 1125 switch value, err := dec.ReadValueString(); { 1126 case err != nil: 1127 return err 1128 default: 1129 x.Bucket = value 1130 } 1131 case 5: 1132 switch value, err := dec.ReadValueString(); { 1133 case err != nil: 1134 return err 1135 default: 1136 x.Prefix = value 1137 } 1138 } 1139 } 1140 } 1141 1142 // EcrTicket describes an AWS EC2 Container Registry. 1143 type EcrTicket struct { 1144 AwsAssumeRoleBuilder *AwsAssumeRoleBuilder 1145 // The base64-encoded authorization token which can be presented directly to 1146 // the Docker registry. 1147 // Reference: https://docs.docker.com/registry/spec/auth/token/ 1148 AuthorizationToken string 1149 // Expiration indicates the date on which the authorization token expire. 1150 Expiration string 1151 // The register URL ("https://${ACCOUNTID}.dkr.ecr.region.amazonaws.com"). 1152 Endpoint string 1153 } 1154 1155 func (EcrTicket) VDLReflect(struct { 1156 Name string `vdl:"github.com/grailbio/base/security/ticket.EcrTicket"` 1157 }) { 1158 } 1159 1160 func (x EcrTicket) VDLIsZero() bool { //nolint:gocyclo 1161 return x == EcrTicket{} 1162 } 1163 1164 func (x EcrTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1165 if err := enc.StartValue(vdlTypeStruct14); err != nil { 1166 return err 1167 } 1168 if x.AwsAssumeRoleBuilder != nil { 1169 if err := enc.NextField(0); err != nil { 1170 return err 1171 } 1172 enc.SetNextStartValueIsOptional() 1173 if err := x.AwsAssumeRoleBuilder.VDLWrite(enc); err != nil { 1174 return err 1175 } 1176 } 1177 if x.AuthorizationToken != "" { 1178 if err := enc.NextFieldValueString(1, vdl.StringType, x.AuthorizationToken); err != nil { 1179 return err 1180 } 1181 } 1182 if x.Expiration != "" { 1183 if err := enc.NextFieldValueString(2, vdl.StringType, x.Expiration); err != nil { 1184 return err 1185 } 1186 } 1187 if x.Endpoint != "" { 1188 if err := enc.NextFieldValueString(3, vdl.StringType, x.Endpoint); err != nil { 1189 return err 1190 } 1191 } 1192 if err := enc.NextField(-1); err != nil { 1193 return err 1194 } 1195 return enc.FinishValue() 1196 } 1197 1198 func (x *EcrTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1199 *x = EcrTicket{} 1200 if err := dec.StartValue(vdlTypeStruct14); err != nil { 1201 return err 1202 } 1203 decType := dec.Type() 1204 for { 1205 index, err := dec.NextField() 1206 switch { 1207 case err != nil: 1208 return err 1209 case index == -1: 1210 return dec.FinishValue() 1211 } 1212 if decType != vdlTypeStruct14 { 1213 index = vdlTypeStruct14.FieldIndexByName(decType.Field(index).Name) 1214 if index == -1 { 1215 if err := dec.SkipValue(); err != nil { 1216 return err 1217 } 1218 continue 1219 } 1220 } 1221 switch index { 1222 case 0: 1223 if err := dec.StartValue(vdlTypeOptional11); err != nil { 1224 return err 1225 } 1226 if dec.IsNil() { 1227 x.AwsAssumeRoleBuilder = nil 1228 if err := dec.FinishValue(); err != nil { 1229 return err 1230 } 1231 } else { 1232 x.AwsAssumeRoleBuilder = new(AwsAssumeRoleBuilder) 1233 dec.IgnoreNextStartValue() 1234 if err := x.AwsAssumeRoleBuilder.VDLRead(dec); err != nil { 1235 return err 1236 } 1237 } 1238 case 1: 1239 switch value, err := dec.ReadValueString(); { 1240 case err != nil: 1241 return err 1242 default: 1243 x.AuthorizationToken = value 1244 } 1245 case 2: 1246 switch value, err := dec.ReadValueString(); { 1247 case err != nil: 1248 return err 1249 default: 1250 x.Expiration = value 1251 } 1252 case 3: 1253 switch value, err := dec.ReadValueString(); { 1254 case err != nil: 1255 return err 1256 default: 1257 x.Endpoint = value 1258 } 1259 } 1260 } 1261 } 1262 1263 // SshCert describes a ssh public Certifcate 1264 type SshCert struct { 1265 // ssh-encoded certificate (host or user). 1266 Cert string 1267 } 1268 1269 func (SshCert) VDLReflect(struct { 1270 Name string `vdl:"github.com/grailbio/base/security/ticket.SshCert"` 1271 }) { 1272 } 1273 1274 func (x SshCert) VDLIsZero() bool { //nolint:gocyclo 1275 return x == SshCert{} 1276 } 1277 1278 func (x SshCert) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1279 if err := enc.StartValue(vdlTypeStruct15); err != nil { 1280 return err 1281 } 1282 if x.Cert != "" { 1283 if err := enc.NextFieldValueString(0, vdl.StringType, x.Cert); err != nil { 1284 return err 1285 } 1286 } 1287 if err := enc.NextField(-1); err != nil { 1288 return err 1289 } 1290 return enc.FinishValue() 1291 } 1292 1293 func (x *SshCert) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1294 *x = SshCert{} 1295 if err := dec.StartValue(vdlTypeStruct15); err != nil { 1296 return err 1297 } 1298 decType := dec.Type() 1299 for { 1300 index, err := dec.NextField() 1301 switch { 1302 case err != nil: 1303 return err 1304 case index == -1: 1305 return dec.FinishValue() 1306 } 1307 if decType != vdlTypeStruct15 { 1308 index = vdlTypeStruct15.FieldIndexByName(decType.Field(index).Name) 1309 if index == -1 { 1310 if err := dec.SkipValue(); err != nil { 1311 return err 1312 } 1313 continue 1314 } 1315 } 1316 if index == 0 { 1317 1318 switch value, err := dec.ReadValueString(); { 1319 case err != nil: 1320 return err 1321 default: 1322 x.Cert = value 1323 } 1324 } 1325 } 1326 } 1327 1328 // TlsCredentials describes a generic set of Tls credentials that include: 1329 // the CA that accepted by the client (only peers that present a certificate 1330 // sign by this CA are accepted), the client certificate and the client 1331 // private key. 1332 type TlsCredentials struct { 1333 // PEM-encoded public certificate of the Certificate Authority. 1334 AuthorityCert string 1335 // PEM-encoded client certificate. 1336 Cert string 1337 // PEM-encoded client private key. 1338 Key string 1339 } 1340 1341 func (TlsCredentials) VDLReflect(struct { 1342 Name string `vdl:"github.com/grailbio/base/security/ticket.TlsCredentials"` 1343 }) { 1344 } 1345 1346 func (x TlsCredentials) VDLIsZero() bool { //nolint:gocyclo 1347 return x == TlsCredentials{} 1348 } 1349 1350 func (x TlsCredentials) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1351 if err := enc.StartValue(vdlTypeStruct16); err != nil { 1352 return err 1353 } 1354 if x.AuthorityCert != "" { 1355 if err := enc.NextFieldValueString(0, vdl.StringType, x.AuthorityCert); err != nil { 1356 return err 1357 } 1358 } 1359 if x.Cert != "" { 1360 if err := enc.NextFieldValueString(1, vdl.StringType, x.Cert); err != nil { 1361 return err 1362 } 1363 } 1364 if x.Key != "" { 1365 if err := enc.NextFieldValueString(2, vdl.StringType, x.Key); err != nil { 1366 return err 1367 } 1368 } 1369 if err := enc.NextField(-1); err != nil { 1370 return err 1371 } 1372 return enc.FinishValue() 1373 } 1374 1375 func (x *TlsCredentials) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1376 *x = TlsCredentials{} 1377 if err := dec.StartValue(vdlTypeStruct16); err != nil { 1378 return err 1379 } 1380 decType := dec.Type() 1381 for { 1382 index, err := dec.NextField() 1383 switch { 1384 case err != nil: 1385 return err 1386 case index == -1: 1387 return dec.FinishValue() 1388 } 1389 if decType != vdlTypeStruct16 { 1390 index = vdlTypeStruct16.FieldIndexByName(decType.Field(index).Name) 1391 if index == -1 { 1392 if err := dec.SkipValue(); err != nil { 1393 return err 1394 } 1395 continue 1396 } 1397 } 1398 switch index { 1399 case 0: 1400 switch value, err := dec.ReadValueString(); { 1401 case err != nil: 1402 return err 1403 default: 1404 x.AuthorityCert = value 1405 } 1406 case 1: 1407 switch value, err := dec.ReadValueString(); { 1408 case err != nil: 1409 return err 1410 default: 1411 x.Cert = value 1412 } 1413 case 2: 1414 switch value, err := dec.ReadValueString(); { 1415 case err != nil: 1416 return err 1417 default: 1418 x.Key = value 1419 } 1420 } 1421 } 1422 } 1423 1424 // TlsServerTicket describes a TLS server. 1425 type TlsServerTicket struct { 1426 TlsCertAuthorityBuilder *TlsCertAuthorityBuilder 1427 Credentials TlsCredentials 1428 } 1429 1430 func (TlsServerTicket) VDLReflect(struct { 1431 Name string `vdl:"github.com/grailbio/base/security/ticket.TlsServerTicket"` 1432 }) { 1433 } 1434 1435 func (x TlsServerTicket) VDLIsZero() bool { //nolint:gocyclo 1436 return x == TlsServerTicket{} 1437 } 1438 1439 func (x TlsServerTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1440 if err := enc.StartValue(vdlTypeStruct17); err != nil { 1441 return err 1442 } 1443 if x.TlsCertAuthorityBuilder != nil { 1444 if err := enc.NextField(0); err != nil { 1445 return err 1446 } 1447 enc.SetNextStartValueIsOptional() 1448 if err := x.TlsCertAuthorityBuilder.VDLWrite(enc); err != nil { 1449 return err 1450 } 1451 } 1452 if x.Credentials != (TlsCredentials{}) { 1453 if err := enc.NextField(1); err != nil { 1454 return err 1455 } 1456 if err := x.Credentials.VDLWrite(enc); err != nil { 1457 return err 1458 } 1459 } 1460 if err := enc.NextField(-1); err != nil { 1461 return err 1462 } 1463 return enc.FinishValue() 1464 } 1465 1466 func (x *TlsServerTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1467 *x = TlsServerTicket{} 1468 if err := dec.StartValue(vdlTypeStruct17); err != nil { 1469 return err 1470 } 1471 decType := dec.Type() 1472 for { 1473 index, err := dec.NextField() 1474 switch { 1475 case err != nil: 1476 return err 1477 case index == -1: 1478 return dec.FinishValue() 1479 } 1480 if decType != vdlTypeStruct17 { 1481 index = vdlTypeStruct17.FieldIndexByName(decType.Field(index).Name) 1482 if index == -1 { 1483 if err := dec.SkipValue(); err != nil { 1484 return err 1485 } 1486 continue 1487 } 1488 } 1489 switch index { 1490 case 0: 1491 if err := dec.StartValue(vdlTypeOptional18); err != nil { 1492 return err 1493 } 1494 if dec.IsNil() { 1495 x.TlsCertAuthorityBuilder = nil 1496 if err := dec.FinishValue(); err != nil { 1497 return err 1498 } 1499 } else { 1500 x.TlsCertAuthorityBuilder = new(TlsCertAuthorityBuilder) 1501 dec.IgnoreNextStartValue() 1502 if err := x.TlsCertAuthorityBuilder.VDLRead(dec); err != nil { 1503 return err 1504 } 1505 } 1506 case 1: 1507 if err := x.Credentials.VDLRead(dec); err != nil { 1508 return err 1509 } 1510 } 1511 } 1512 } 1513 1514 // TlsClientTicket describes a TLS client. 1515 type TlsClientTicket struct { 1516 TlsCertAuthorityBuilder *TlsCertAuthorityBuilder 1517 Credentials TlsCredentials 1518 // Endpoints indicate the servers the client can connect to. 1519 Endpoints []string 1520 } 1521 1522 func (TlsClientTicket) VDLReflect(struct { 1523 Name string `vdl:"github.com/grailbio/base/security/ticket.TlsClientTicket"` 1524 }) { 1525 } 1526 1527 func (x TlsClientTicket) VDLIsZero() bool { //nolint:gocyclo 1528 if x.TlsCertAuthorityBuilder != nil { 1529 return false 1530 } 1531 if x.Credentials != (TlsCredentials{}) { 1532 return false 1533 } 1534 if len(x.Endpoints) != 0 { 1535 return false 1536 } 1537 return true 1538 } 1539 1540 func (x TlsClientTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1541 if err := enc.StartValue(vdlTypeStruct19); err != nil { 1542 return err 1543 } 1544 if x.TlsCertAuthorityBuilder != nil { 1545 if err := enc.NextField(0); err != nil { 1546 return err 1547 } 1548 enc.SetNextStartValueIsOptional() 1549 if err := x.TlsCertAuthorityBuilder.VDLWrite(enc); err != nil { 1550 return err 1551 } 1552 } 1553 if x.Credentials != (TlsCredentials{}) { 1554 if err := enc.NextField(1); err != nil { 1555 return err 1556 } 1557 if err := x.Credentials.VDLWrite(enc); err != nil { 1558 return err 1559 } 1560 } 1561 if len(x.Endpoints) != 0 { 1562 if err := enc.NextField(2); err != nil { 1563 return err 1564 } 1565 if err := vdlWriteAnonList1(enc, x.Endpoints); err != nil { 1566 return err 1567 } 1568 } 1569 if err := enc.NextField(-1); err != nil { 1570 return err 1571 } 1572 return enc.FinishValue() 1573 } 1574 1575 func (x *TlsClientTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1576 *x = TlsClientTicket{} 1577 if err := dec.StartValue(vdlTypeStruct19); err != nil { 1578 return err 1579 } 1580 decType := dec.Type() 1581 for { 1582 index, err := dec.NextField() 1583 switch { 1584 case err != nil: 1585 return err 1586 case index == -1: 1587 return dec.FinishValue() 1588 } 1589 if decType != vdlTypeStruct19 { 1590 index = vdlTypeStruct19.FieldIndexByName(decType.Field(index).Name) 1591 if index == -1 { 1592 if err := dec.SkipValue(); err != nil { 1593 return err 1594 } 1595 continue 1596 } 1597 } 1598 switch index { 1599 case 0: 1600 if err := dec.StartValue(vdlTypeOptional18); err != nil { 1601 return err 1602 } 1603 if dec.IsNil() { 1604 x.TlsCertAuthorityBuilder = nil 1605 if err := dec.FinishValue(); err != nil { 1606 return err 1607 } 1608 } else { 1609 x.TlsCertAuthorityBuilder = new(TlsCertAuthorityBuilder) 1610 dec.IgnoreNextStartValue() 1611 if err := x.TlsCertAuthorityBuilder.VDLRead(dec); err != nil { 1612 return err 1613 } 1614 } 1615 case 1: 1616 if err := x.Credentials.VDLRead(dec); err != nil { 1617 return err 1618 } 1619 case 2: 1620 if err := vdlReadAnonList1(dec, &x.Endpoints); err != nil { 1621 return err 1622 } 1623 } 1624 } 1625 } 1626 1627 // DockerTicket instance represents a Docker repository and the TLS 1628 // certificate material required to verify and authenticate to it. 1629 // TODO(razvanm): Remove DockerTicket and replace with DockerServerTicket 1630 // and DockerClientTicket 1631 type DockerTicket struct { 1632 TlsCertAuthorityBuilder *TlsCertAuthorityBuilder 1633 Credentials TlsCredentials 1634 Url string 1635 } 1636 1637 func (DockerTicket) VDLReflect(struct { 1638 Name string `vdl:"github.com/grailbio/base/security/ticket.DockerTicket"` 1639 }) { 1640 } 1641 1642 func (x DockerTicket) VDLIsZero() bool { //nolint:gocyclo 1643 return x == DockerTicket{} 1644 } 1645 1646 func (x DockerTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1647 if err := enc.StartValue(vdlTypeStruct20); err != nil { 1648 return err 1649 } 1650 if x.TlsCertAuthorityBuilder != nil { 1651 if err := enc.NextField(0); err != nil { 1652 return err 1653 } 1654 enc.SetNextStartValueIsOptional() 1655 if err := x.TlsCertAuthorityBuilder.VDLWrite(enc); err != nil { 1656 return err 1657 } 1658 } 1659 if x.Credentials != (TlsCredentials{}) { 1660 if err := enc.NextField(1); err != nil { 1661 return err 1662 } 1663 if err := x.Credentials.VDLWrite(enc); err != nil { 1664 return err 1665 } 1666 } 1667 if x.Url != "" { 1668 if err := enc.NextFieldValueString(2, vdl.StringType, x.Url); err != nil { 1669 return err 1670 } 1671 } 1672 if err := enc.NextField(-1); err != nil { 1673 return err 1674 } 1675 return enc.FinishValue() 1676 } 1677 1678 func (x *DockerTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1679 *x = DockerTicket{} 1680 if err := dec.StartValue(vdlTypeStruct20); err != nil { 1681 return err 1682 } 1683 decType := dec.Type() 1684 for { 1685 index, err := dec.NextField() 1686 switch { 1687 case err != nil: 1688 return err 1689 case index == -1: 1690 return dec.FinishValue() 1691 } 1692 if decType != vdlTypeStruct20 { 1693 index = vdlTypeStruct20.FieldIndexByName(decType.Field(index).Name) 1694 if index == -1 { 1695 if err := dec.SkipValue(); err != nil { 1696 return err 1697 } 1698 continue 1699 } 1700 } 1701 switch index { 1702 case 0: 1703 if err := dec.StartValue(vdlTypeOptional18); err != nil { 1704 return err 1705 } 1706 if dec.IsNil() { 1707 x.TlsCertAuthorityBuilder = nil 1708 if err := dec.FinishValue(); err != nil { 1709 return err 1710 } 1711 } else { 1712 x.TlsCertAuthorityBuilder = new(TlsCertAuthorityBuilder) 1713 dec.IgnoreNextStartValue() 1714 if err := x.TlsCertAuthorityBuilder.VDLRead(dec); err != nil { 1715 return err 1716 } 1717 } 1718 case 1: 1719 if err := x.Credentials.VDLRead(dec); err != nil { 1720 return err 1721 } 1722 case 2: 1723 switch value, err := dec.ReadValueString(); { 1724 case err != nil: 1725 return err 1726 default: 1727 x.Url = value 1728 } 1729 } 1730 } 1731 } 1732 1733 // DockerServerTicket instance represents a Docker Server and the TLS 1734 // certificate material required for clients to verify and authenticate it. 1735 type DockerServerTicket struct { 1736 TlsCertAuthorityBuilder *TlsCertAuthorityBuilder 1737 Credentials TlsCredentials 1738 } 1739 1740 func (DockerServerTicket) VDLReflect(struct { 1741 Name string `vdl:"github.com/grailbio/base/security/ticket.DockerServerTicket"` 1742 }) { 1743 } 1744 1745 func (x DockerServerTicket) VDLIsZero() bool { //nolint:gocyclo 1746 return x == DockerServerTicket{} 1747 } 1748 1749 func (x DockerServerTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1750 if err := enc.StartValue(vdlTypeStruct21); err != nil { 1751 return err 1752 } 1753 if x.TlsCertAuthorityBuilder != nil { 1754 if err := enc.NextField(0); err != nil { 1755 return err 1756 } 1757 enc.SetNextStartValueIsOptional() 1758 if err := x.TlsCertAuthorityBuilder.VDLWrite(enc); err != nil { 1759 return err 1760 } 1761 } 1762 if x.Credentials != (TlsCredentials{}) { 1763 if err := enc.NextField(1); err != nil { 1764 return err 1765 } 1766 if err := x.Credentials.VDLWrite(enc); err != nil { 1767 return err 1768 } 1769 } 1770 if err := enc.NextField(-1); err != nil { 1771 return err 1772 } 1773 return enc.FinishValue() 1774 } 1775 1776 func (x *DockerServerTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1777 *x = DockerServerTicket{} 1778 if err := dec.StartValue(vdlTypeStruct21); err != nil { 1779 return err 1780 } 1781 decType := dec.Type() 1782 for { 1783 index, err := dec.NextField() 1784 switch { 1785 case err != nil: 1786 return err 1787 case index == -1: 1788 return dec.FinishValue() 1789 } 1790 if decType != vdlTypeStruct21 { 1791 index = vdlTypeStruct21.FieldIndexByName(decType.Field(index).Name) 1792 if index == -1 { 1793 if err := dec.SkipValue(); err != nil { 1794 return err 1795 } 1796 continue 1797 } 1798 } 1799 switch index { 1800 case 0: 1801 if err := dec.StartValue(vdlTypeOptional18); err != nil { 1802 return err 1803 } 1804 if dec.IsNil() { 1805 x.TlsCertAuthorityBuilder = nil 1806 if err := dec.FinishValue(); err != nil { 1807 return err 1808 } 1809 } else { 1810 x.TlsCertAuthorityBuilder = new(TlsCertAuthorityBuilder) 1811 dec.IgnoreNextStartValue() 1812 if err := x.TlsCertAuthorityBuilder.VDLRead(dec); err != nil { 1813 return err 1814 } 1815 } 1816 case 1: 1817 if err := x.Credentials.VDLRead(dec); err != nil { 1818 return err 1819 } 1820 } 1821 } 1822 } 1823 1824 // DockerClientTicket instance represents the TLS certificate material required 1825 // for clients to authenticate against a specific DockerServer. 1826 type DockerClientTicket struct { 1827 TlsCertAuthorityBuilder *TlsCertAuthorityBuilder 1828 Credentials TlsCredentials 1829 // Url indicates the Docker host the client can connect to. 1830 Url string 1831 } 1832 1833 func (DockerClientTicket) VDLReflect(struct { 1834 Name string `vdl:"github.com/grailbio/base/security/ticket.DockerClientTicket"` 1835 }) { 1836 } 1837 1838 func (x DockerClientTicket) VDLIsZero() bool { //nolint:gocyclo 1839 return x == DockerClientTicket{} 1840 } 1841 1842 func (x DockerClientTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1843 if err := enc.StartValue(vdlTypeStruct22); err != nil { 1844 return err 1845 } 1846 if x.TlsCertAuthorityBuilder != nil { 1847 if err := enc.NextField(0); err != nil { 1848 return err 1849 } 1850 enc.SetNextStartValueIsOptional() 1851 if err := x.TlsCertAuthorityBuilder.VDLWrite(enc); err != nil { 1852 return err 1853 } 1854 } 1855 if x.Credentials != (TlsCredentials{}) { 1856 if err := enc.NextField(1); err != nil { 1857 return err 1858 } 1859 if err := x.Credentials.VDLWrite(enc); err != nil { 1860 return err 1861 } 1862 } 1863 if x.Url != "" { 1864 if err := enc.NextFieldValueString(2, vdl.StringType, x.Url); err != nil { 1865 return err 1866 } 1867 } 1868 if err := enc.NextField(-1); err != nil { 1869 return err 1870 } 1871 return enc.FinishValue() 1872 } 1873 1874 func (x *DockerClientTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1875 *x = DockerClientTicket{} 1876 if err := dec.StartValue(vdlTypeStruct22); err != nil { 1877 return err 1878 } 1879 decType := dec.Type() 1880 for { 1881 index, err := dec.NextField() 1882 switch { 1883 case err != nil: 1884 return err 1885 case index == -1: 1886 return dec.FinishValue() 1887 } 1888 if decType != vdlTypeStruct22 { 1889 index = vdlTypeStruct22.FieldIndexByName(decType.Field(index).Name) 1890 if index == -1 { 1891 if err := dec.SkipValue(); err != nil { 1892 return err 1893 } 1894 continue 1895 } 1896 } 1897 switch index { 1898 case 0: 1899 if err := dec.StartValue(vdlTypeOptional18); err != nil { 1900 return err 1901 } 1902 if dec.IsNil() { 1903 x.TlsCertAuthorityBuilder = nil 1904 if err := dec.FinishValue(); err != nil { 1905 return err 1906 } 1907 } else { 1908 x.TlsCertAuthorityBuilder = new(TlsCertAuthorityBuilder) 1909 dec.IgnoreNextStartValue() 1910 if err := x.TlsCertAuthorityBuilder.VDLRead(dec); err != nil { 1911 return err 1912 } 1913 } 1914 case 1: 1915 if err := x.Credentials.VDLRead(dec); err != nil { 1916 return err 1917 } 1918 case 2: 1919 switch value, err := dec.ReadValueString(); { 1920 case err != nil: 1921 return err 1922 default: 1923 x.Url = value 1924 } 1925 } 1926 } 1927 } 1928 1929 // Key/Value pair that can be passed into the GET request. 1930 type Parameter struct { 1931 Key string 1932 Value string 1933 } 1934 1935 func (Parameter) VDLReflect(struct { 1936 Name string `vdl:"github.com/grailbio/base/security/ticket.Parameter"` 1937 }) { 1938 } 1939 1940 func (x Parameter) VDLIsZero() bool { //nolint:gocyclo 1941 return x == Parameter{} 1942 } 1943 1944 func (x Parameter) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 1945 if err := enc.StartValue(vdlTypeStruct23); err != nil { 1946 return err 1947 } 1948 if x.Key != "" { 1949 if err := enc.NextFieldValueString(0, vdl.StringType, x.Key); err != nil { 1950 return err 1951 } 1952 } 1953 if x.Value != "" { 1954 if err := enc.NextFieldValueString(1, vdl.StringType, x.Value); err != nil { 1955 return err 1956 } 1957 } 1958 if err := enc.NextField(-1); err != nil { 1959 return err 1960 } 1961 return enc.FinishValue() 1962 } 1963 1964 func (x *Parameter) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 1965 *x = Parameter{} 1966 if err := dec.StartValue(vdlTypeStruct23); err != nil { 1967 return err 1968 } 1969 decType := dec.Type() 1970 for { 1971 index, err := dec.NextField() 1972 switch { 1973 case err != nil: 1974 return err 1975 case index == -1: 1976 return dec.FinishValue() 1977 } 1978 if decType != vdlTypeStruct23 { 1979 index = vdlTypeStruct23.FieldIndexByName(decType.Field(index).Name) 1980 if index == -1 { 1981 if err := dec.SkipValue(); err != nil { 1982 return err 1983 } 1984 continue 1985 } 1986 } 1987 switch index { 1988 case 0: 1989 switch value, err := dec.ReadValueString(); { 1990 case err != nil: 1991 return err 1992 default: 1993 x.Key = value 1994 } 1995 case 1: 1996 switch value, err := dec.ReadValueString(); { 1997 case err != nil: 1998 return err 1999 default: 2000 x.Value = value 2001 } 2002 } 2003 } 2004 } 2005 2006 type AwsComputeInstancesBuilder struct { 2007 // Instance Filters that will produce a list of instance IDs and related information 2008 // https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html 2009 InstanceFilters []Parameter 2010 // AWS ARN for a role that should be used to perform the instance lookups 2011 AwsAccountLookupRole string 2012 // AWS region to use for the lookup 2013 Region string 2014 } 2015 2016 func (AwsComputeInstancesBuilder) VDLReflect(struct { 2017 Name string `vdl:"github.com/grailbio/base/security/ticket.AwsComputeInstancesBuilder"` 2018 }) { 2019 } 2020 2021 func (x AwsComputeInstancesBuilder) VDLIsZero() bool { //nolint:gocyclo 2022 if len(x.InstanceFilters) != 0 { 2023 return false 2024 } 2025 if x.AwsAccountLookupRole != "" { 2026 return false 2027 } 2028 if x.Region != "" { 2029 return false 2030 } 2031 return true 2032 } 2033 2034 func (x AwsComputeInstancesBuilder) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2035 if err := enc.StartValue(vdlTypeStruct24); err != nil { 2036 return err 2037 } 2038 if len(x.InstanceFilters) != 0 { 2039 if err := enc.NextField(0); err != nil { 2040 return err 2041 } 2042 if err := vdlWriteAnonList2(enc, x.InstanceFilters); err != nil { 2043 return err 2044 } 2045 } 2046 if x.AwsAccountLookupRole != "" { 2047 if err := enc.NextFieldValueString(1, vdl.StringType, x.AwsAccountLookupRole); err != nil { 2048 return err 2049 } 2050 } 2051 if x.Region != "" { 2052 if err := enc.NextFieldValueString(2, vdl.StringType, x.Region); err != nil { 2053 return err 2054 } 2055 } 2056 if err := enc.NextField(-1); err != nil { 2057 return err 2058 } 2059 return enc.FinishValue() 2060 } 2061 2062 func vdlWriteAnonList2(enc vdl.Encoder, x []Parameter) error { 2063 if err := enc.StartValue(vdlTypeList25); err != nil { 2064 return err 2065 } 2066 if err := enc.SetLenHint(len(x)); err != nil { 2067 return err 2068 } 2069 for _, elem := range x { 2070 if err := enc.NextEntry(false); err != nil { 2071 return err 2072 } 2073 if err := elem.VDLWrite(enc); err != nil { 2074 return err 2075 } 2076 } 2077 if err := enc.NextEntry(true); err != nil { 2078 return err 2079 } 2080 return enc.FinishValue() 2081 } 2082 2083 func (x *AwsComputeInstancesBuilder) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 2084 *x = AwsComputeInstancesBuilder{} 2085 if err := dec.StartValue(vdlTypeStruct24); err != nil { 2086 return err 2087 } 2088 decType := dec.Type() 2089 for { 2090 index, err := dec.NextField() 2091 switch { 2092 case err != nil: 2093 return err 2094 case index == -1: 2095 return dec.FinishValue() 2096 } 2097 if decType != vdlTypeStruct24 { 2098 index = vdlTypeStruct24.FieldIndexByName(decType.Field(index).Name) 2099 if index == -1 { 2100 if err := dec.SkipValue(); err != nil { 2101 return err 2102 } 2103 continue 2104 } 2105 } 2106 switch index { 2107 case 0: 2108 if err := vdlReadAnonList2(dec, &x.InstanceFilters); err != nil { 2109 return err 2110 } 2111 case 1: 2112 switch value, err := dec.ReadValueString(); { 2113 case err != nil: 2114 return err 2115 default: 2116 x.AwsAccountLookupRole = value 2117 } 2118 case 2: 2119 switch value, err := dec.ReadValueString(); { 2120 case err != nil: 2121 return err 2122 default: 2123 x.Region = value 2124 } 2125 } 2126 } 2127 } 2128 2129 func vdlReadAnonList2(dec vdl.Decoder, x *[]Parameter) error { 2130 if err := dec.StartValue(vdlTypeList25); err != nil { 2131 return err 2132 } 2133 if len := dec.LenHint(); len > 0 { 2134 *x = make([]Parameter, 0, len) 2135 } else { 2136 *x = nil 2137 } 2138 for { 2139 switch done, err := dec.NextEntry(); { 2140 case err != nil: 2141 return err 2142 case done: 2143 return dec.FinishValue() 2144 default: 2145 var elem Parameter 2146 if err := elem.VDLRead(dec); err != nil { 2147 return err 2148 } 2149 *x = append(*x, elem) 2150 } 2151 } 2152 } 2153 2154 // Simplification of describeInstance data to provide to ticket-server users 2155 type ComputeInstance struct { 2156 PublicIp string 2157 PrivateIp string 2158 InstanceId string 2159 Tags []Parameter 2160 } 2161 2162 func (ComputeInstance) VDLReflect(struct { 2163 Name string `vdl:"github.com/grailbio/base/security/ticket.ComputeInstance"` 2164 }) { 2165 } 2166 2167 func (x ComputeInstance) VDLIsZero() bool { //nolint:gocyclo 2168 if x.PublicIp != "" { 2169 return false 2170 } 2171 if x.PrivateIp != "" { 2172 return false 2173 } 2174 if x.InstanceId != "" { 2175 return false 2176 } 2177 if len(x.Tags) != 0 { 2178 return false 2179 } 2180 return true 2181 } 2182 2183 func (x ComputeInstance) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2184 if err := enc.StartValue(vdlTypeStruct26); err != nil { 2185 return err 2186 } 2187 if x.PublicIp != "" { 2188 if err := enc.NextFieldValueString(0, vdl.StringType, x.PublicIp); err != nil { 2189 return err 2190 } 2191 } 2192 if x.PrivateIp != "" { 2193 if err := enc.NextFieldValueString(1, vdl.StringType, x.PrivateIp); err != nil { 2194 return err 2195 } 2196 } 2197 if x.InstanceId != "" { 2198 if err := enc.NextFieldValueString(2, vdl.StringType, x.InstanceId); err != nil { 2199 return err 2200 } 2201 } 2202 if len(x.Tags) != 0 { 2203 if err := enc.NextField(3); err != nil { 2204 return err 2205 } 2206 if err := vdlWriteAnonList2(enc, x.Tags); err != nil { 2207 return err 2208 } 2209 } 2210 if err := enc.NextField(-1); err != nil { 2211 return err 2212 } 2213 return enc.FinishValue() 2214 } 2215 2216 func (x *ComputeInstance) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 2217 *x = ComputeInstance{} 2218 if err := dec.StartValue(vdlTypeStruct26); err != nil { 2219 return err 2220 } 2221 decType := dec.Type() 2222 for { 2223 index, err := dec.NextField() 2224 switch { 2225 case err != nil: 2226 return err 2227 case index == -1: 2228 return dec.FinishValue() 2229 } 2230 if decType != vdlTypeStruct26 { 2231 index = vdlTypeStruct26.FieldIndexByName(decType.Field(index).Name) 2232 if index == -1 { 2233 if err := dec.SkipValue(); err != nil { 2234 return err 2235 } 2236 continue 2237 } 2238 } 2239 switch index { 2240 case 0: 2241 switch value, err := dec.ReadValueString(); { 2242 case err != nil: 2243 return err 2244 default: 2245 x.PublicIp = value 2246 } 2247 case 1: 2248 switch value, err := dec.ReadValueString(); { 2249 case err != nil: 2250 return err 2251 default: 2252 x.PrivateIp = value 2253 } 2254 case 2: 2255 switch value, err := dec.ReadValueString(); { 2256 case err != nil: 2257 return err 2258 default: 2259 x.InstanceId = value 2260 } 2261 case 3: 2262 if err := vdlReadAnonList2(dec, &x.Tags); err != nil { 2263 return err 2264 } 2265 } 2266 } 2267 } 2268 2269 // SshCertificateTicket describes a SSH Signed Certificate. 2270 // SSH Certificates are essentially a version of TLS certs but they have additional 2271 // optional parameters and can take a public key as part of their signing request. 2272 type SshCertificateTicket struct { 2273 SshCertAuthorityBuilder *SshCertAuthorityBuilder 2274 AwsComputeInstancesBuilder *AwsComputeInstancesBuilder 2275 ComputeInstances []ComputeInstance 2276 Credentials SshCert 2277 // Recommended username to use 2278 Username string 2279 } 2280 2281 func (SshCertificateTicket) VDLReflect(struct { 2282 Name string `vdl:"github.com/grailbio/base/security/ticket.SshCertificateTicket"` 2283 }) { 2284 } 2285 2286 func (x SshCertificateTicket) VDLIsZero() bool { //nolint:gocyclo 2287 if x.SshCertAuthorityBuilder != nil { 2288 return false 2289 } 2290 if x.AwsComputeInstancesBuilder != nil { 2291 return false 2292 } 2293 if len(x.ComputeInstances) != 0 { 2294 return false 2295 } 2296 if x.Credentials != (SshCert{}) { 2297 return false 2298 } 2299 if x.Username != "" { 2300 return false 2301 } 2302 return true 2303 } 2304 2305 func (x SshCertificateTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2306 if err := enc.StartValue(vdlTypeStruct27); err != nil { 2307 return err 2308 } 2309 if x.SshCertAuthorityBuilder != nil { 2310 if err := enc.NextField(0); err != nil { 2311 return err 2312 } 2313 enc.SetNextStartValueIsOptional() 2314 if err := x.SshCertAuthorityBuilder.VDLWrite(enc); err != nil { 2315 return err 2316 } 2317 } 2318 if x.AwsComputeInstancesBuilder != nil { 2319 if err := enc.NextField(1); err != nil { 2320 return err 2321 } 2322 enc.SetNextStartValueIsOptional() 2323 if err := x.AwsComputeInstancesBuilder.VDLWrite(enc); err != nil { 2324 return err 2325 } 2326 } 2327 if len(x.ComputeInstances) != 0 { 2328 if err := enc.NextField(2); err != nil { 2329 return err 2330 } 2331 if err := vdlWriteAnonList3(enc, x.ComputeInstances); err != nil { 2332 return err 2333 } 2334 } 2335 if x.Credentials != (SshCert{}) { 2336 if err := enc.NextField(3); err != nil { 2337 return err 2338 } 2339 if err := x.Credentials.VDLWrite(enc); err != nil { 2340 return err 2341 } 2342 } 2343 if x.Username != "" { 2344 if err := enc.NextFieldValueString(4, vdl.StringType, x.Username); err != nil { 2345 return err 2346 } 2347 } 2348 if err := enc.NextField(-1); err != nil { 2349 return err 2350 } 2351 return enc.FinishValue() 2352 } 2353 2354 func vdlWriteAnonList3(enc vdl.Encoder, x []ComputeInstance) error { 2355 if err := enc.StartValue(vdlTypeList30); err != nil { 2356 return err 2357 } 2358 if err := enc.SetLenHint(len(x)); err != nil { 2359 return err 2360 } 2361 for _, elem := range x { 2362 if err := enc.NextEntry(false); err != nil { 2363 return err 2364 } 2365 if err := elem.VDLWrite(enc); err != nil { 2366 return err 2367 } 2368 } 2369 if err := enc.NextEntry(true); err != nil { 2370 return err 2371 } 2372 return enc.FinishValue() 2373 } 2374 2375 func (x *SshCertificateTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 2376 *x = SshCertificateTicket{} 2377 if err := dec.StartValue(vdlTypeStruct27); err != nil { 2378 return err 2379 } 2380 decType := dec.Type() 2381 for { 2382 index, err := dec.NextField() 2383 switch { 2384 case err != nil: 2385 return err 2386 case index == -1: 2387 return dec.FinishValue() 2388 } 2389 if decType != vdlTypeStruct27 { 2390 index = vdlTypeStruct27.FieldIndexByName(decType.Field(index).Name) 2391 if index == -1 { 2392 if err := dec.SkipValue(); err != nil { 2393 return err 2394 } 2395 continue 2396 } 2397 } 2398 switch index { 2399 case 0: 2400 if err := dec.StartValue(vdlTypeOptional28); err != nil { 2401 return err 2402 } 2403 if dec.IsNil() { 2404 x.SshCertAuthorityBuilder = nil 2405 if err := dec.FinishValue(); err != nil { 2406 return err 2407 } 2408 } else { 2409 x.SshCertAuthorityBuilder = new(SshCertAuthorityBuilder) 2410 dec.IgnoreNextStartValue() 2411 if err := x.SshCertAuthorityBuilder.VDLRead(dec); err != nil { 2412 return err 2413 } 2414 } 2415 case 1: 2416 if err := dec.StartValue(vdlTypeOptional29); err != nil { 2417 return err 2418 } 2419 if dec.IsNil() { 2420 x.AwsComputeInstancesBuilder = nil 2421 if err := dec.FinishValue(); err != nil { 2422 return err 2423 } 2424 } else { 2425 x.AwsComputeInstancesBuilder = new(AwsComputeInstancesBuilder) 2426 dec.IgnoreNextStartValue() 2427 if err := x.AwsComputeInstancesBuilder.VDLRead(dec); err != nil { 2428 return err 2429 } 2430 } 2431 case 2: 2432 if err := vdlReadAnonList3(dec, &x.ComputeInstances); err != nil { 2433 return err 2434 } 2435 case 3: 2436 if err := x.Credentials.VDLRead(dec); err != nil { 2437 return err 2438 } 2439 case 4: 2440 switch value, err := dec.ReadValueString(); { 2441 case err != nil: 2442 return err 2443 default: 2444 x.Username = value 2445 } 2446 } 2447 } 2448 } 2449 2450 func vdlReadAnonList3(dec vdl.Decoder, x *[]ComputeInstance) error { 2451 if err := dec.StartValue(vdlTypeList30); err != nil { 2452 return err 2453 } 2454 if len := dec.LenHint(); len > 0 { 2455 *x = make([]ComputeInstance, 0, len) 2456 } else { 2457 *x = nil 2458 } 2459 for { 2460 switch done, err := dec.NextEntry(); { 2461 case err != nil: 2462 return err 2463 case done: 2464 return dec.FinishValue() 2465 default: 2466 var elem ComputeInstance 2467 if err := elem.VDLRead(dec); err != nil { 2468 return err 2469 } 2470 *x = append(*x, elem) 2471 } 2472 } 2473 } 2474 2475 // B2Ticket instance contains a B2 account level authorization 2476 // token plus URLs and configuration values for the account. 2477 type B2Ticket struct { 2478 B2AccountAuthorizationBuilder *B2AccountAuthorizationBuilder 2479 AccountId string 2480 AuthorizationToken string 2481 ApiUrl string 2482 DownloadUrl string 2483 RecommendedPartSize int64 2484 AbsoluteMinimumPartSize int64 2485 } 2486 2487 func (B2Ticket) VDLReflect(struct { 2488 Name string `vdl:"github.com/grailbio/base/security/ticket.B2Ticket"` 2489 }) { 2490 } 2491 2492 func (x B2Ticket) VDLIsZero() bool { //nolint:gocyclo 2493 return x == B2Ticket{} 2494 } 2495 2496 func (x B2Ticket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2497 if err := enc.StartValue(vdlTypeStruct31); err != nil { 2498 return err 2499 } 2500 if x.B2AccountAuthorizationBuilder != nil { 2501 if err := enc.NextField(0); err != nil { 2502 return err 2503 } 2504 enc.SetNextStartValueIsOptional() 2505 if err := x.B2AccountAuthorizationBuilder.VDLWrite(enc); err != nil { 2506 return err 2507 } 2508 } 2509 if x.AccountId != "" { 2510 if err := enc.NextFieldValueString(1, vdl.StringType, x.AccountId); err != nil { 2511 return err 2512 } 2513 } 2514 if x.AuthorizationToken != "" { 2515 if err := enc.NextFieldValueString(2, vdl.StringType, x.AuthorizationToken); err != nil { 2516 return err 2517 } 2518 } 2519 if x.ApiUrl != "" { 2520 if err := enc.NextFieldValueString(3, vdl.StringType, x.ApiUrl); err != nil { 2521 return err 2522 } 2523 } 2524 if x.DownloadUrl != "" { 2525 if err := enc.NextFieldValueString(4, vdl.StringType, x.DownloadUrl); err != nil { 2526 return err 2527 } 2528 } 2529 if x.RecommendedPartSize != 0 { 2530 if err := enc.NextFieldValueInt(5, vdl.Int64Type, x.RecommendedPartSize); err != nil { 2531 return err 2532 } 2533 } 2534 if x.AbsoluteMinimumPartSize != 0 { 2535 if err := enc.NextFieldValueInt(6, vdl.Int64Type, x.AbsoluteMinimumPartSize); err != nil { 2536 return err 2537 } 2538 } 2539 if err := enc.NextField(-1); err != nil { 2540 return err 2541 } 2542 return enc.FinishValue() 2543 } 2544 2545 func (x *B2Ticket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 2546 *x = B2Ticket{} 2547 if err := dec.StartValue(vdlTypeStruct31); err != nil { 2548 return err 2549 } 2550 decType := dec.Type() 2551 for { 2552 index, err := dec.NextField() 2553 switch { 2554 case err != nil: 2555 return err 2556 case index == -1: 2557 return dec.FinishValue() 2558 } 2559 if decType != vdlTypeStruct31 { 2560 index = vdlTypeStruct31.FieldIndexByName(decType.Field(index).Name) 2561 if index == -1 { 2562 if err := dec.SkipValue(); err != nil { 2563 return err 2564 } 2565 continue 2566 } 2567 } 2568 switch index { 2569 case 0: 2570 if err := dec.StartValue(vdlTypeOptional32); err != nil { 2571 return err 2572 } 2573 if dec.IsNil() { 2574 x.B2AccountAuthorizationBuilder = nil 2575 if err := dec.FinishValue(); err != nil { 2576 return err 2577 } 2578 } else { 2579 x.B2AccountAuthorizationBuilder = new(B2AccountAuthorizationBuilder) 2580 dec.IgnoreNextStartValue() 2581 if err := x.B2AccountAuthorizationBuilder.VDLRead(dec); err != nil { 2582 return err 2583 } 2584 } 2585 case 1: 2586 switch value, err := dec.ReadValueString(); { 2587 case err != nil: 2588 return err 2589 default: 2590 x.AccountId = value 2591 } 2592 case 2: 2593 switch value, err := dec.ReadValueString(); { 2594 case err != nil: 2595 return err 2596 default: 2597 x.AuthorizationToken = value 2598 } 2599 case 3: 2600 switch value, err := dec.ReadValueString(); { 2601 case err != nil: 2602 return err 2603 default: 2604 x.ApiUrl = value 2605 } 2606 case 4: 2607 switch value, err := dec.ReadValueString(); { 2608 case err != nil: 2609 return err 2610 default: 2611 x.DownloadUrl = value 2612 } 2613 case 5: 2614 switch value, err := dec.ReadValueInt(64); { 2615 case err != nil: 2616 return err 2617 default: 2618 x.RecommendedPartSize = value 2619 } 2620 case 6: 2621 switch value, err := dec.ReadValueInt(64); { 2622 case err != nil: 2623 return err 2624 default: 2625 x.AbsoluteMinimumPartSize = value 2626 } 2627 } 2628 } 2629 } 2630 2631 // VanadiumTicket describes a set of Vanadium blessings. This allows 2632 // obtaining a completely new blessings (role blessings) by the owners 2633 // of certain blessings. 2634 type VanadiumTicket struct { 2635 VanadiumBuilder *VanadiumBuilder 2636 // v.io/v23/security.WireBlessings in VOM + Base64 format. 2637 Blessing string 2638 } 2639 2640 func (VanadiumTicket) VDLReflect(struct { 2641 Name string `vdl:"github.com/grailbio/base/security/ticket.VanadiumTicket"` 2642 }) { 2643 } 2644 2645 func (x VanadiumTicket) VDLIsZero() bool { //nolint:gocyclo 2646 return x == VanadiumTicket{} 2647 } 2648 2649 func (x VanadiumTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2650 if err := enc.StartValue(vdlTypeStruct33); err != nil { 2651 return err 2652 } 2653 if x.VanadiumBuilder != nil { 2654 if err := enc.NextField(0); err != nil { 2655 return err 2656 } 2657 enc.SetNextStartValueIsOptional() 2658 if err := x.VanadiumBuilder.VDLWrite(enc); err != nil { 2659 return err 2660 } 2661 } 2662 if x.Blessing != "" { 2663 if err := enc.NextFieldValueString(1, vdl.StringType, x.Blessing); err != nil { 2664 return err 2665 } 2666 } 2667 if err := enc.NextField(-1); err != nil { 2668 return err 2669 } 2670 return enc.FinishValue() 2671 } 2672 2673 func (x *VanadiumTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 2674 *x = VanadiumTicket{} 2675 if err := dec.StartValue(vdlTypeStruct33); err != nil { 2676 return err 2677 } 2678 decType := dec.Type() 2679 for { 2680 index, err := dec.NextField() 2681 switch { 2682 case err != nil: 2683 return err 2684 case index == -1: 2685 return dec.FinishValue() 2686 } 2687 if decType != vdlTypeStruct33 { 2688 index = vdlTypeStruct33.FieldIndexByName(decType.Field(index).Name) 2689 if index == -1 { 2690 if err := dec.SkipValue(); err != nil { 2691 return err 2692 } 2693 continue 2694 } 2695 } 2696 switch index { 2697 case 0: 2698 if err := dec.StartValue(vdlTypeOptional34); err != nil { 2699 return err 2700 } 2701 if dec.IsNil() { 2702 x.VanadiumBuilder = nil 2703 if err := dec.FinishValue(); err != nil { 2704 return err 2705 } 2706 } else { 2707 x.VanadiumBuilder = new(VanadiumBuilder) 2708 dec.IgnoreNextStartValue() 2709 if err := x.VanadiumBuilder.VDLRead(dec); err != nil { 2710 return err 2711 } 2712 } 2713 case 1: 2714 switch value, err := dec.ReadValueString(); { 2715 case err != nil: 2716 return err 2717 default: 2718 x.Blessing = value 2719 } 2720 } 2721 } 2722 } 2723 2724 // GenericTicket describes a generic unstructured piece of data. This 2725 // can be used to store arbitrary secrets for example. 2726 type GenericTicket struct { 2727 Data []byte 2728 } 2729 2730 func (GenericTicket) VDLReflect(struct { 2731 Name string `vdl:"github.com/grailbio/base/security/ticket.GenericTicket"` 2732 }) { 2733 } 2734 2735 func (x GenericTicket) VDLIsZero() bool { //nolint:gocyclo 2736 return len(x.Data) == 0 2737 } 2738 2739 func (x GenericTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2740 if err := enc.StartValue(vdlTypeStruct35); err != nil { 2741 return err 2742 } 2743 if len(x.Data) != 0 { 2744 if err := enc.NextFieldValueBytes(0, vdlTypeList36, x.Data); err != nil { 2745 return err 2746 } 2747 } 2748 if err := enc.NextField(-1); err != nil { 2749 return err 2750 } 2751 return enc.FinishValue() 2752 } 2753 2754 func (x *GenericTicket) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 2755 *x = GenericTicket{} 2756 if err := dec.StartValue(vdlTypeStruct35); err != nil { 2757 return err 2758 } 2759 decType := dec.Type() 2760 for { 2761 index, err := dec.NextField() 2762 switch { 2763 case err != nil: 2764 return err 2765 case index == -1: 2766 return dec.FinishValue() 2767 } 2768 if decType != vdlTypeStruct35 { 2769 index = vdlTypeStruct35.FieldIndexByName(decType.Field(index).Name) 2770 if index == -1 { 2771 if err := dec.SkipValue(); err != nil { 2772 return err 2773 } 2774 continue 2775 } 2776 } 2777 if index == 0 { 2778 2779 if err := dec.ReadValueBytes(-1, &x.Data); err != nil { 2780 return err 2781 } 2782 } 2783 } 2784 } 2785 2786 type ( 2787 // Ticket represents any single field of the Ticket union type. 2788 // 2789 // Ticket is a union of all our tickets. 2790 Ticket interface { 2791 // Index returns the field index. 2792 Index() int 2793 // Interface returns the field value as an interface. 2794 Interface() interface{} 2795 // Name returns the field name. 2796 Name() string 2797 // VDLReflect describes the Ticket union type. 2798 VDLReflect(vdlTicketReflect) 2799 VDLIsZero() bool 2800 VDLWrite(vdl.Encoder) error 2801 } 2802 // TicketAwsTicket represents field AwsTicket of the Ticket union type. 2803 TicketAwsTicket struct{ Value AwsTicket } 2804 // TicketS3Ticket represents field S3Ticket of the Ticket union type. 2805 TicketS3Ticket struct{ Value S3Ticket } 2806 // TicketSshCertificateTicket represents field SshCertificateTicket of the Ticket union type. 2807 TicketSshCertificateTicket struct{ Value SshCertificateTicket } 2808 // TicketEcrTicket represents field EcrTicket of the Ticket union type. 2809 TicketEcrTicket struct{ Value EcrTicket } 2810 // TicketTlsServerTicket represents field TlsServerTicket of the Ticket union type. 2811 TicketTlsServerTicket struct{ Value TlsServerTicket } 2812 // TicketTlsClientTicket represents field TlsClientTicket of the Ticket union type. 2813 TicketTlsClientTicket struct{ Value TlsClientTicket } 2814 // TicketDockerTicket represents field DockerTicket of the Ticket union type. 2815 TicketDockerTicket struct{ Value DockerTicket } 2816 // TicketDockerServerTicket represents field DockerServerTicket of the Ticket union type. 2817 TicketDockerServerTicket struct{ Value DockerServerTicket } 2818 // TicketDockerClientTicket represents field DockerClientTicket of the Ticket union type. 2819 TicketDockerClientTicket struct{ Value DockerClientTicket } 2820 // TicketB2Ticket represents field B2Ticket of the Ticket union type. 2821 TicketB2Ticket struct{ Value B2Ticket } 2822 // TicketVanadiumTicket represents field VanadiumTicket of the Ticket union type. 2823 TicketVanadiumTicket struct{ Value VanadiumTicket } 2824 // TicketGenericTicket represents field GenericTicket of the Ticket union type. 2825 TicketGenericTicket struct{ Value GenericTicket } 2826 // vdlTicketReflect describes the Ticket union type. 2827 vdlTicketReflect struct { 2828 Name string `vdl:"github.com/grailbio/base/security/ticket.Ticket"` 2829 Type Ticket 2830 Union struct { 2831 AwsTicket TicketAwsTicket 2832 S3Ticket TicketS3Ticket 2833 SshCertificateTicket TicketSshCertificateTicket 2834 EcrTicket TicketEcrTicket 2835 TlsServerTicket TicketTlsServerTicket 2836 TlsClientTicket TicketTlsClientTicket 2837 DockerTicket TicketDockerTicket 2838 DockerServerTicket TicketDockerServerTicket 2839 DockerClientTicket TicketDockerClientTicket 2840 B2Ticket TicketB2Ticket 2841 VanadiumTicket TicketVanadiumTicket 2842 GenericTicket TicketGenericTicket 2843 } 2844 } 2845 ) 2846 2847 func (x TicketAwsTicket) Index() int { return 0 } 2848 func (x TicketAwsTicket) Interface() interface{} { return x.Value } 2849 func (x TicketAwsTicket) Name() string { return "AwsTicket" } 2850 func (x TicketAwsTicket) VDLReflect(vdlTicketReflect) {} 2851 2852 func (x TicketS3Ticket) Index() int { return 1 } 2853 func (x TicketS3Ticket) Interface() interface{} { return x.Value } 2854 func (x TicketS3Ticket) Name() string { return "S3Ticket" } 2855 func (x TicketS3Ticket) VDLReflect(vdlTicketReflect) {} 2856 2857 func (x TicketSshCertificateTicket) Index() int { return 2 } 2858 func (x TicketSshCertificateTicket) Interface() interface{} { return x.Value } 2859 func (x TicketSshCertificateTicket) Name() string { return "SshCertificateTicket" } 2860 func (x TicketSshCertificateTicket) VDLReflect(vdlTicketReflect) {} 2861 2862 func (x TicketEcrTicket) Index() int { return 3 } 2863 func (x TicketEcrTicket) Interface() interface{} { return x.Value } 2864 func (x TicketEcrTicket) Name() string { return "EcrTicket" } 2865 func (x TicketEcrTicket) VDLReflect(vdlTicketReflect) {} 2866 2867 func (x TicketTlsServerTicket) Index() int { return 4 } 2868 func (x TicketTlsServerTicket) Interface() interface{} { return x.Value } 2869 func (x TicketTlsServerTicket) Name() string { return "TlsServerTicket" } 2870 func (x TicketTlsServerTicket) VDLReflect(vdlTicketReflect) {} 2871 2872 func (x TicketTlsClientTicket) Index() int { return 5 } 2873 func (x TicketTlsClientTicket) Interface() interface{} { return x.Value } 2874 func (x TicketTlsClientTicket) Name() string { return "TlsClientTicket" } 2875 func (x TicketTlsClientTicket) VDLReflect(vdlTicketReflect) {} 2876 2877 func (x TicketDockerTicket) Index() int { return 6 } 2878 func (x TicketDockerTicket) Interface() interface{} { return x.Value } 2879 func (x TicketDockerTicket) Name() string { return "DockerTicket" } 2880 func (x TicketDockerTicket) VDLReflect(vdlTicketReflect) {} 2881 2882 func (x TicketDockerServerTicket) Index() int { return 7 } 2883 func (x TicketDockerServerTicket) Interface() interface{} { return x.Value } 2884 func (x TicketDockerServerTicket) Name() string { return "DockerServerTicket" } 2885 func (x TicketDockerServerTicket) VDLReflect(vdlTicketReflect) {} 2886 2887 func (x TicketDockerClientTicket) Index() int { return 8 } 2888 func (x TicketDockerClientTicket) Interface() interface{} { return x.Value } 2889 func (x TicketDockerClientTicket) Name() string { return "DockerClientTicket" } 2890 func (x TicketDockerClientTicket) VDLReflect(vdlTicketReflect) {} 2891 2892 func (x TicketB2Ticket) Index() int { return 9 } 2893 func (x TicketB2Ticket) Interface() interface{} { return x.Value } 2894 func (x TicketB2Ticket) Name() string { return "B2Ticket" } 2895 func (x TicketB2Ticket) VDLReflect(vdlTicketReflect) {} 2896 2897 func (x TicketVanadiumTicket) Index() int { return 10 } 2898 func (x TicketVanadiumTicket) Interface() interface{} { return x.Value } 2899 func (x TicketVanadiumTicket) Name() string { return "VanadiumTicket" } 2900 func (x TicketVanadiumTicket) VDLReflect(vdlTicketReflect) {} 2901 2902 func (x TicketGenericTicket) Index() int { return 11 } 2903 func (x TicketGenericTicket) Interface() interface{} { return x.Value } 2904 func (x TicketGenericTicket) Name() string { return "GenericTicket" } 2905 func (x TicketGenericTicket) VDLReflect(vdlTicketReflect) {} 2906 2907 func (x TicketAwsTicket) VDLIsZero() bool { //nolint:gocyclo 2908 return x.Value == AwsTicket{} 2909 } 2910 2911 func (x TicketS3Ticket) VDLIsZero() bool { 2912 return false 2913 } 2914 2915 func (x TicketSshCertificateTicket) VDLIsZero() bool { 2916 return false 2917 } 2918 2919 func (x TicketEcrTicket) VDLIsZero() bool { 2920 return false 2921 } 2922 2923 func (x TicketTlsServerTicket) VDLIsZero() bool { 2924 return false 2925 } 2926 2927 func (x TicketTlsClientTicket) VDLIsZero() bool { 2928 return false 2929 } 2930 2931 func (x TicketDockerTicket) VDLIsZero() bool { 2932 return false 2933 } 2934 2935 func (x TicketDockerServerTicket) VDLIsZero() bool { 2936 return false 2937 } 2938 2939 func (x TicketDockerClientTicket) VDLIsZero() bool { 2940 return false 2941 } 2942 2943 func (x TicketB2Ticket) VDLIsZero() bool { 2944 return false 2945 } 2946 2947 func (x TicketVanadiumTicket) VDLIsZero() bool { 2948 return false 2949 } 2950 2951 func (x TicketGenericTicket) VDLIsZero() bool { 2952 return false 2953 } 2954 2955 func (x TicketAwsTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2956 if err := enc.StartValue(vdlTypeUnion37); err != nil { 2957 return err 2958 } 2959 if err := enc.NextField(0); err != nil { 2960 return err 2961 } 2962 if err := x.Value.VDLWrite(enc); err != nil { 2963 return err 2964 } 2965 if err := enc.NextField(-1); err != nil { 2966 return err 2967 } 2968 return enc.FinishValue() 2969 } 2970 2971 func (x TicketS3Ticket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2972 if err := enc.StartValue(vdlTypeUnion37); err != nil { 2973 return err 2974 } 2975 if err := enc.NextField(1); err != nil { 2976 return err 2977 } 2978 if err := x.Value.VDLWrite(enc); err != nil { 2979 return err 2980 } 2981 if err := enc.NextField(-1); err != nil { 2982 return err 2983 } 2984 return enc.FinishValue() 2985 } 2986 2987 func (x TicketSshCertificateTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 2988 if err := enc.StartValue(vdlTypeUnion37); err != nil { 2989 return err 2990 } 2991 if err := enc.NextField(2); err != nil { 2992 return err 2993 } 2994 if err := x.Value.VDLWrite(enc); err != nil { 2995 return err 2996 } 2997 if err := enc.NextField(-1); err != nil { 2998 return err 2999 } 3000 return enc.FinishValue() 3001 } 3002 3003 func (x TicketEcrTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3004 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3005 return err 3006 } 3007 if err := enc.NextField(3); err != nil { 3008 return err 3009 } 3010 if err := x.Value.VDLWrite(enc); err != nil { 3011 return err 3012 } 3013 if err := enc.NextField(-1); err != nil { 3014 return err 3015 } 3016 return enc.FinishValue() 3017 } 3018 3019 func (x TicketTlsServerTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3020 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3021 return err 3022 } 3023 if err := enc.NextField(4); err != nil { 3024 return err 3025 } 3026 if err := x.Value.VDLWrite(enc); err != nil { 3027 return err 3028 } 3029 if err := enc.NextField(-1); err != nil { 3030 return err 3031 } 3032 return enc.FinishValue() 3033 } 3034 3035 func (x TicketTlsClientTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3036 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3037 return err 3038 } 3039 if err := enc.NextField(5); err != nil { 3040 return err 3041 } 3042 if err := x.Value.VDLWrite(enc); err != nil { 3043 return err 3044 } 3045 if err := enc.NextField(-1); err != nil { 3046 return err 3047 } 3048 return enc.FinishValue() 3049 } 3050 3051 func (x TicketDockerTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3052 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3053 return err 3054 } 3055 if err := enc.NextField(6); err != nil { 3056 return err 3057 } 3058 if err := x.Value.VDLWrite(enc); err != nil { 3059 return err 3060 } 3061 if err := enc.NextField(-1); err != nil { 3062 return err 3063 } 3064 return enc.FinishValue() 3065 } 3066 3067 func (x TicketDockerServerTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3068 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3069 return err 3070 } 3071 if err := enc.NextField(7); err != nil { 3072 return err 3073 } 3074 if err := x.Value.VDLWrite(enc); err != nil { 3075 return err 3076 } 3077 if err := enc.NextField(-1); err != nil { 3078 return err 3079 } 3080 return enc.FinishValue() 3081 } 3082 3083 func (x TicketDockerClientTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3084 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3085 return err 3086 } 3087 if err := enc.NextField(8); err != nil { 3088 return err 3089 } 3090 if err := x.Value.VDLWrite(enc); err != nil { 3091 return err 3092 } 3093 if err := enc.NextField(-1); err != nil { 3094 return err 3095 } 3096 return enc.FinishValue() 3097 } 3098 3099 func (x TicketB2Ticket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3100 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3101 return err 3102 } 3103 if err := enc.NextField(9); err != nil { 3104 return err 3105 } 3106 if err := x.Value.VDLWrite(enc); err != nil { 3107 return err 3108 } 3109 if err := enc.NextField(-1); err != nil { 3110 return err 3111 } 3112 return enc.FinishValue() 3113 } 3114 3115 func (x TicketVanadiumTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3116 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3117 return err 3118 } 3119 if err := enc.NextField(10); err != nil { 3120 return err 3121 } 3122 if err := x.Value.VDLWrite(enc); err != nil { 3123 return err 3124 } 3125 if err := enc.NextField(-1); err != nil { 3126 return err 3127 } 3128 return enc.FinishValue() 3129 } 3130 3131 func (x TicketGenericTicket) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3132 if err := enc.StartValue(vdlTypeUnion37); err != nil { 3133 return err 3134 } 3135 if err := enc.NextField(11); err != nil { 3136 return err 3137 } 3138 if err := x.Value.VDLWrite(enc); err != nil { 3139 return err 3140 } 3141 if err := enc.NextField(-1); err != nil { 3142 return err 3143 } 3144 return enc.FinishValue() 3145 } 3146 3147 func VDLReadTicket(dec vdl.Decoder, x *Ticket) error { //nolint:gocyclo 3148 if err := dec.StartValue(vdlTypeUnion37); err != nil { 3149 return err 3150 } 3151 decType := dec.Type() 3152 index, err := dec.NextField() 3153 switch { 3154 case err != nil: 3155 return err 3156 case index == -1: 3157 return fmt.Errorf("missing field in union %T, from %v", x, decType) 3158 } 3159 if decType != vdlTypeUnion37 { 3160 name := decType.Field(index).Name 3161 index = vdlTypeUnion37.FieldIndexByName(name) 3162 if index == -1 { 3163 return fmt.Errorf("field %q not in union %T, from %v", name, x, decType) 3164 } 3165 } 3166 switch index { 3167 case 0: 3168 var field TicketAwsTicket 3169 if err := field.Value.VDLRead(dec); err != nil { 3170 return err 3171 } 3172 *x = field 3173 case 1: 3174 var field TicketS3Ticket 3175 if err := field.Value.VDLRead(dec); err != nil { 3176 return err 3177 } 3178 *x = field 3179 case 2: 3180 var field TicketSshCertificateTicket 3181 if err := field.Value.VDLRead(dec); err != nil { 3182 return err 3183 } 3184 *x = field 3185 case 3: 3186 var field TicketEcrTicket 3187 if err := field.Value.VDLRead(dec); err != nil { 3188 return err 3189 } 3190 *x = field 3191 case 4: 3192 var field TicketTlsServerTicket 3193 if err := field.Value.VDLRead(dec); err != nil { 3194 return err 3195 } 3196 *x = field 3197 case 5: 3198 var field TicketTlsClientTicket 3199 if err := field.Value.VDLRead(dec); err != nil { 3200 return err 3201 } 3202 *x = field 3203 case 6: 3204 var field TicketDockerTicket 3205 if err := field.Value.VDLRead(dec); err != nil { 3206 return err 3207 } 3208 *x = field 3209 case 7: 3210 var field TicketDockerServerTicket 3211 if err := field.Value.VDLRead(dec); err != nil { 3212 return err 3213 } 3214 *x = field 3215 case 8: 3216 var field TicketDockerClientTicket 3217 if err := field.Value.VDLRead(dec); err != nil { 3218 return err 3219 } 3220 *x = field 3221 case 9: 3222 var field TicketB2Ticket 3223 if err := field.Value.VDLRead(dec); err != nil { 3224 return err 3225 } 3226 *x = field 3227 case 10: 3228 var field TicketVanadiumTicket 3229 if err := field.Value.VDLRead(dec); err != nil { 3230 return err 3231 } 3232 *x = field 3233 case 11: 3234 var field TicketGenericTicket 3235 if err := field.Value.VDLRead(dec); err != nil { 3236 return err 3237 } 3238 *x = field 3239 } 3240 switch index, err := dec.NextField(); { 3241 case err != nil: 3242 return err 3243 case index != -1: 3244 return fmt.Errorf("extra field %d in union %T, from %v", index, x, dec.Type()) 3245 } 3246 return dec.FinishValue() 3247 } 3248 3249 // TicketConfig describes a ticket and its associated permissions. 3250 type TicketConfig struct { 3251 Ticket Ticket 3252 Permissions access.Permissions 3253 Controls map[Control]bool 3254 } 3255 3256 func (TicketConfig) VDLReflect(struct { 3257 Name string `vdl:"github.com/grailbio/base/security/ticket.TicketConfig"` 3258 }) { 3259 } 3260 3261 func (x TicketConfig) VDLIsZero() bool { //nolint:gocyclo 3262 if x.Ticket != nil && !x.Ticket.VDLIsZero() { 3263 return false 3264 } 3265 if len(x.Permissions) != 0 { 3266 return false 3267 } 3268 if len(x.Controls) != 0 { 3269 return false 3270 } 3271 return true 3272 } 3273 3274 func (x TicketConfig) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3275 if err := enc.StartValue(vdlTypeStruct38); err != nil { 3276 return err 3277 } 3278 if x.Ticket != nil && !x.Ticket.VDLIsZero() { 3279 if err := enc.NextField(0); err != nil { 3280 return err 3281 } 3282 if err := x.Ticket.VDLWrite(enc); err != nil { 3283 return err 3284 } 3285 } 3286 if len(x.Permissions) != 0 { 3287 if err := enc.NextField(1); err != nil { 3288 return err 3289 } 3290 if err := x.Permissions.VDLWrite(enc); err != nil { 3291 return err 3292 } 3293 } 3294 if len(x.Controls) != 0 { 3295 if err := enc.NextField(2); err != nil { 3296 return err 3297 } 3298 if err := vdlWriteAnonMap4(enc, x.Controls); err != nil { 3299 return err 3300 } 3301 } 3302 if err := enc.NextField(-1); err != nil { 3303 return err 3304 } 3305 return enc.FinishValue() 3306 } 3307 3308 func vdlWriteAnonMap4(enc vdl.Encoder, x map[Control]bool) error { 3309 if err := enc.StartValue(vdlTypeMap40); err != nil { 3310 return err 3311 } 3312 if err := enc.SetLenHint(len(x)); err != nil { 3313 return err 3314 } 3315 for key, elem := range x { 3316 if err := enc.NextEntryValueString(vdlTypeEnum1, key.String()); err != nil { 3317 return err 3318 } 3319 if err := enc.WriteValueBool(vdl.BoolType, elem); err != nil { 3320 return err 3321 } 3322 } 3323 if err := enc.NextEntry(true); err != nil { 3324 return err 3325 } 3326 return enc.FinishValue() 3327 } 3328 3329 func (x *TicketConfig) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 3330 *x = TicketConfig{ 3331 Ticket: TicketAwsTicket{}, 3332 } 3333 if err := dec.StartValue(vdlTypeStruct38); err != nil { 3334 return err 3335 } 3336 decType := dec.Type() 3337 for { 3338 index, err := dec.NextField() 3339 switch { 3340 case err != nil: 3341 return err 3342 case index == -1: 3343 return dec.FinishValue() 3344 } 3345 if decType != vdlTypeStruct38 { 3346 index = vdlTypeStruct38.FieldIndexByName(decType.Field(index).Name) 3347 if index == -1 { 3348 if err := dec.SkipValue(); err != nil { 3349 return err 3350 } 3351 continue 3352 } 3353 } 3354 switch index { 3355 case 0: 3356 if err := VDLReadTicket(dec, &x.Ticket); err != nil { 3357 return err 3358 } 3359 case 1: 3360 if err := x.Permissions.VDLRead(dec); err != nil { 3361 return err 3362 } 3363 case 2: 3364 if err := vdlReadAnonMap4(dec, &x.Controls); err != nil { 3365 return err 3366 } 3367 } 3368 } 3369 } 3370 3371 func vdlReadAnonMap4(dec vdl.Decoder, x *map[Control]bool) error { 3372 if err := dec.StartValue(vdlTypeMap40); err != nil { 3373 return err 3374 } 3375 var tmpMap map[Control]bool 3376 if len := dec.LenHint(); len > 0 { 3377 tmpMap = make(map[Control]bool, len) 3378 } 3379 for { 3380 switch done, key, err := dec.NextEntryValueString(); { 3381 case err != nil: 3382 return err 3383 case done: 3384 *x = tmpMap 3385 return dec.FinishValue() 3386 default: 3387 var keyEnum Control 3388 if err := keyEnum.Set(key); err != nil { 3389 return err 3390 } 3391 var elem bool 3392 switch value, err := dec.ReadValueBool(); { 3393 case err != nil: 3394 return err 3395 default: 3396 elem = value 3397 } 3398 if tmpMap == nil { 3399 tmpMap = make(map[Control]bool) 3400 } 3401 tmpMap[keyEnum] = elem 3402 } 3403 } 3404 } 3405 3406 type Config struct { 3407 Tickets map[string]TicketConfig 3408 Permissions access.Permissions 3409 } 3410 3411 func (Config) VDLReflect(struct { 3412 Name string `vdl:"github.com/grailbio/base/security/ticket.Config"` 3413 }) { 3414 } 3415 3416 func (x Config) VDLIsZero() bool { //nolint:gocyclo 3417 if len(x.Tickets) != 0 { 3418 return false 3419 } 3420 if len(x.Permissions) != 0 { 3421 return false 3422 } 3423 return true 3424 } 3425 3426 func (x Config) VDLWrite(enc vdl.Encoder) error { //nolint:gocyclo 3427 if err := enc.StartValue(vdlTypeStruct41); err != nil { 3428 return err 3429 } 3430 if len(x.Tickets) != 0 { 3431 if err := enc.NextField(0); err != nil { 3432 return err 3433 } 3434 if err := vdlWriteAnonMap5(enc, x.Tickets); err != nil { 3435 return err 3436 } 3437 } 3438 if len(x.Permissions) != 0 { 3439 if err := enc.NextField(1); err != nil { 3440 return err 3441 } 3442 if err := x.Permissions.VDLWrite(enc); err != nil { 3443 return err 3444 } 3445 } 3446 if err := enc.NextField(-1); err != nil { 3447 return err 3448 } 3449 return enc.FinishValue() 3450 } 3451 3452 func vdlWriteAnonMap5(enc vdl.Encoder, x map[string]TicketConfig) error { 3453 if err := enc.StartValue(vdlTypeMap42); err != nil { 3454 return err 3455 } 3456 if err := enc.SetLenHint(len(x)); err != nil { 3457 return err 3458 } 3459 for key, elem := range x { 3460 if err := enc.NextEntryValueString(vdl.StringType, key); err != nil { 3461 return err 3462 } 3463 if err := elem.VDLWrite(enc); err != nil { 3464 return err 3465 } 3466 } 3467 if err := enc.NextEntry(true); err != nil { 3468 return err 3469 } 3470 return enc.FinishValue() 3471 } 3472 3473 func (x *Config) VDLRead(dec vdl.Decoder) error { //nolint:gocyclo 3474 *x = Config{} 3475 if err := dec.StartValue(vdlTypeStruct41); err != nil { 3476 return err 3477 } 3478 decType := dec.Type() 3479 for { 3480 index, err := dec.NextField() 3481 switch { 3482 case err != nil: 3483 return err 3484 case index == -1: 3485 return dec.FinishValue() 3486 } 3487 if decType != vdlTypeStruct41 { 3488 index = vdlTypeStruct41.FieldIndexByName(decType.Field(index).Name) 3489 if index == -1 { 3490 if err := dec.SkipValue(); err != nil { 3491 return err 3492 } 3493 continue 3494 } 3495 } 3496 switch index { 3497 case 0: 3498 if err := vdlReadAnonMap5(dec, &x.Tickets); err != nil { 3499 return err 3500 } 3501 case 1: 3502 if err := x.Permissions.VDLRead(dec); err != nil { 3503 return err 3504 } 3505 } 3506 } 3507 } 3508 3509 func vdlReadAnonMap5(dec vdl.Decoder, x *map[string]TicketConfig) error { 3510 if err := dec.StartValue(vdlTypeMap42); err != nil { 3511 return err 3512 } 3513 var tmpMap map[string]TicketConfig 3514 if len := dec.LenHint(); len > 0 { 3515 tmpMap = make(map[string]TicketConfig, len) 3516 } 3517 for { 3518 switch done, key, err := dec.NextEntryValueString(); { 3519 case err != nil: 3520 return err 3521 case done: 3522 *x = tmpMap 3523 return dec.FinishValue() 3524 default: 3525 var elem TicketConfig 3526 if err := elem.VDLRead(dec); err != nil { 3527 return err 3528 } 3529 if tmpMap == nil { 3530 tmpMap = make(map[string]TicketConfig) 3531 } 3532 tmpMap[key] = elem 3533 } 3534 } 3535 } 3536 3537 // Interface definitions 3538 // ===================== 3539 3540 // TicketServiceClientMethods is the client interface 3541 // containing TicketService methods. 3542 // 3543 // TicketService provides a way to obtain a ticket. The access can be 3544 // restricted by setting the permissions appropriately. 3545 type TicketServiceClientMethods interface { 3546 GetPermissions(*context.T, ...rpc.CallOpt) (perms access.Permissions, version string, _ error) 3547 SetPermissions(_ *context.T, perms access.Permissions, version string, _ ...rpc.CallOpt) error 3548 Get(*context.T, ...rpc.CallOpt) (Ticket, error) 3549 GetWithParameters(_ *context.T, parameters []Parameter, _ ...rpc.CallOpt) (Ticket, error) 3550 GetWithArgs(_ *context.T, args map[string]string, _ ...rpc.CallOpt) (Ticket, error) 3551 } 3552 3553 // TicketServiceClientStub embeds TicketServiceClientMethods and is a 3554 // placeholder for additional management operations. 3555 type TicketServiceClientStub interface { 3556 TicketServiceClientMethods 3557 } 3558 3559 // TicketServiceClient returns a client stub for TicketService. 3560 func TicketServiceClient(name string) TicketServiceClientStub { 3561 return implTicketServiceClientStub{name} 3562 } 3563 3564 type implTicketServiceClientStub struct { 3565 name string 3566 } 3567 3568 func (c implTicketServiceClientStub) GetPermissions(ctx *context.T, opts ...rpc.CallOpt) (o0 access.Permissions, o1 string, err error) { 3569 err = v23.GetClient(ctx).Call(ctx, c.name, "GetPermissions", nil, []interface{}{&o0, &o1}, opts...) 3570 return 3571 } 3572 3573 func (c implTicketServiceClientStub) SetPermissions(ctx *context.T, i0 access.Permissions, i1 string, opts ...rpc.CallOpt) (err error) { 3574 err = v23.GetClient(ctx).Call(ctx, c.name, "SetPermissions", []interface{}{i0, i1}, nil, opts...) 3575 return 3576 } 3577 3578 func (c implTicketServiceClientStub) Get(ctx *context.T, opts ...rpc.CallOpt) (o0 Ticket, err error) { 3579 err = v23.GetClient(ctx).Call(ctx, c.name, "Get", nil, []interface{}{&o0}, opts...) 3580 return 3581 } 3582 3583 func (c implTicketServiceClientStub) GetWithParameters(ctx *context.T, i0 []Parameter, opts ...rpc.CallOpt) (o0 Ticket, err error) { 3584 err = v23.GetClient(ctx).Call(ctx, c.name, "GetWithParameters", []interface{}{i0}, []interface{}{&o0}, opts...) 3585 return 3586 } 3587 3588 func (c implTicketServiceClientStub) GetWithArgs(ctx *context.T, i0 map[string]string, opts ...rpc.CallOpt) (o0 Ticket, err error) { 3589 err = v23.GetClient(ctx).Call(ctx, c.name, "GetWithArgs", []interface{}{i0}, []interface{}{&o0}, opts...) 3590 return 3591 } 3592 3593 // TicketServiceServerMethods is the interface a server writer 3594 // implements for TicketService. 3595 // 3596 // TicketService provides a way to obtain a ticket. The access can be 3597 // restricted by setting the permissions appropriately. 3598 type TicketServiceServerMethods interface { 3599 GetPermissions(*context.T, rpc.ServerCall) (perms access.Permissions, version string, _ error) 3600 SetPermissions(_ *context.T, _ rpc.ServerCall, perms access.Permissions, version string) error 3601 Get(*context.T, rpc.ServerCall) (Ticket, error) 3602 GetWithParameters(_ *context.T, _ rpc.ServerCall, parameters []Parameter) (Ticket, error) 3603 GetWithArgs(_ *context.T, _ rpc.ServerCall, args map[string]string) (Ticket, error) 3604 } 3605 3606 // TicketServiceServerStubMethods is the server interface containing 3607 // TicketService methods, as expected by rpc.Server. 3608 // There is no difference between this interface and TicketServiceServerMethods 3609 // since there are no streaming methods. 3610 type TicketServiceServerStubMethods TicketServiceServerMethods 3611 3612 // TicketServiceServerStub adds universal methods to TicketServiceServerStubMethods. 3613 type TicketServiceServerStub interface { 3614 TicketServiceServerStubMethods 3615 // DescribeInterfaces the TicketService interfaces. 3616 Describe__() []rpc.InterfaceDesc 3617 } 3618 3619 // TicketServiceServer returns a server stub for TicketService. 3620 // It converts an implementation of TicketServiceServerMethods into 3621 // an object that may be used by rpc.Server. 3622 func TicketServiceServer(impl TicketServiceServerMethods) TicketServiceServerStub { 3623 stub := implTicketServiceServerStub{ 3624 impl: impl, 3625 } 3626 // Initialize GlobState; always check the stub itself first, to handle the 3627 // case where the user has the Glob method defined in their VDL source. 3628 if gs := rpc.NewGlobState(stub); gs != nil { 3629 stub.gs = gs 3630 } else if gs := rpc.NewGlobState(impl); gs != nil { 3631 stub.gs = gs 3632 } 3633 return stub 3634 } 3635 3636 type implTicketServiceServerStub struct { 3637 impl TicketServiceServerMethods 3638 gs *rpc.GlobState 3639 } 3640 3641 func (s implTicketServiceServerStub) GetPermissions(ctx *context.T, call rpc.ServerCall) (access.Permissions, string, error) { 3642 return s.impl.GetPermissions(ctx, call) 3643 } 3644 3645 func (s implTicketServiceServerStub) SetPermissions(ctx *context.T, call rpc.ServerCall, i0 access.Permissions, i1 string) error { 3646 return s.impl.SetPermissions(ctx, call, i0, i1) 3647 } 3648 3649 func (s implTicketServiceServerStub) Get(ctx *context.T, call rpc.ServerCall) (Ticket, error) { 3650 return s.impl.Get(ctx, call) 3651 } 3652 3653 func (s implTicketServiceServerStub) GetWithParameters(ctx *context.T, call rpc.ServerCall, i0 []Parameter) (Ticket, error) { 3654 return s.impl.GetWithParameters(ctx, call, i0) 3655 } 3656 3657 func (s implTicketServiceServerStub) GetWithArgs(ctx *context.T, call rpc.ServerCall, i0 map[string]string) (Ticket, error) { 3658 return s.impl.GetWithArgs(ctx, call, i0) 3659 } 3660 3661 func (s implTicketServiceServerStub) Globber() *rpc.GlobState { 3662 return s.gs 3663 } 3664 3665 func (s implTicketServiceServerStub) Describe__() []rpc.InterfaceDesc { 3666 return []rpc.InterfaceDesc{TicketServiceDesc} 3667 } 3668 3669 // TicketServiceDesc describes the TicketService interface. 3670 var TicketServiceDesc rpc.InterfaceDesc = descTicketService 3671 3672 // descTicketService hides the desc to keep godoc clean. 3673 var descTicketService = rpc.InterfaceDesc{ 3674 Name: "TicketService", 3675 PkgPath: "github.com/grailbio/base/security/ticket", 3676 Doc: "// TicketService provides a way to obtain a ticket. The access can be\n// restricted by setting the permissions appropriately.", 3677 Methods: []rpc.MethodDesc{ 3678 { 3679 Name: "GetPermissions", 3680 OutArgs: []rpc.ArgDesc{ 3681 {Name: "perms", Doc: ``}, // access.Permissions 3682 {Name: "version", Doc: ``}, // string 3683 }, 3684 Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))}, 3685 }, 3686 { 3687 Name: "SetPermissions", 3688 InArgs: []rpc.ArgDesc{ 3689 {Name: "perms", Doc: ``}, // access.Permissions 3690 {Name: "version", Doc: ``}, // string 3691 }, 3692 Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Admin"))}, 3693 }, 3694 { 3695 Name: "Get", 3696 OutArgs: []rpc.ArgDesc{ 3697 {Name: "", Doc: ``}, // Ticket 3698 }, 3699 Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))}, 3700 }, 3701 { 3702 Name: "GetWithParameters", 3703 InArgs: []rpc.ArgDesc{ 3704 {Name: "parameters", Doc: ``}, // []Parameter 3705 }, 3706 OutArgs: []rpc.ArgDesc{ 3707 {Name: "", Doc: ``}, // Ticket 3708 }, 3709 Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))}, 3710 }, 3711 { 3712 Name: "GetWithArgs", 3713 InArgs: []rpc.ArgDesc{ 3714 {Name: "args", Doc: ``}, // map[string]string 3715 }, 3716 OutArgs: []rpc.ArgDesc{ 3717 {Name: "", Doc: ``}, // Ticket 3718 }, 3719 Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))}, 3720 }, 3721 }, 3722 } 3723 3724 // ListServiceClientMethods is the client interface 3725 // containing ListService methods. 3726 type ListServiceClientMethods interface { 3727 List(*context.T, ...rpc.CallOpt) ([]string, error) 3728 } 3729 3730 // ListServiceClientStub embeds ListServiceClientMethods and is a 3731 // placeholder for additional management operations. 3732 type ListServiceClientStub interface { 3733 ListServiceClientMethods 3734 } 3735 3736 // ListServiceClient returns a client stub for ListService. 3737 func ListServiceClient(name string) ListServiceClientStub { 3738 return implListServiceClientStub{name} 3739 } 3740 3741 type implListServiceClientStub struct { 3742 name string 3743 } 3744 3745 func (c implListServiceClientStub) List(ctx *context.T, opts ...rpc.CallOpt) (o0 []string, err error) { 3746 err = v23.GetClient(ctx).Call(ctx, c.name, "List", nil, []interface{}{&o0}, opts...) 3747 return 3748 } 3749 3750 // ListServiceServerMethods is the interface a server writer 3751 // implements for ListService. 3752 type ListServiceServerMethods interface { 3753 List(*context.T, rpc.ServerCall) ([]string, error) 3754 } 3755 3756 // ListServiceServerStubMethods is the server interface containing 3757 // ListService methods, as expected by rpc.Server. 3758 // There is no difference between this interface and ListServiceServerMethods 3759 // since there are no streaming methods. 3760 type ListServiceServerStubMethods ListServiceServerMethods 3761 3762 // ListServiceServerStub adds universal methods to ListServiceServerStubMethods. 3763 type ListServiceServerStub interface { 3764 ListServiceServerStubMethods 3765 // DescribeInterfaces the ListService interfaces. 3766 Describe__() []rpc.InterfaceDesc 3767 } 3768 3769 // ListServiceServer returns a server stub for ListService. 3770 // It converts an implementation of ListServiceServerMethods into 3771 // an object that may be used by rpc.Server. 3772 func ListServiceServer(impl ListServiceServerMethods) ListServiceServerStub { 3773 stub := implListServiceServerStub{ 3774 impl: impl, 3775 } 3776 // Initialize GlobState; always check the stub itself first, to handle the 3777 // case where the user has the Glob method defined in their VDL source. 3778 if gs := rpc.NewGlobState(stub); gs != nil { 3779 stub.gs = gs 3780 } else if gs := rpc.NewGlobState(impl); gs != nil { 3781 stub.gs = gs 3782 } 3783 return stub 3784 } 3785 3786 type implListServiceServerStub struct { 3787 impl ListServiceServerMethods 3788 gs *rpc.GlobState 3789 } 3790 3791 func (s implListServiceServerStub) List(ctx *context.T, call rpc.ServerCall) ([]string, error) { 3792 return s.impl.List(ctx, call) 3793 } 3794 3795 func (s implListServiceServerStub) Globber() *rpc.GlobState { 3796 return s.gs 3797 } 3798 3799 func (s implListServiceServerStub) Describe__() []rpc.InterfaceDesc { 3800 return []rpc.InterfaceDesc{ListServiceDesc} 3801 } 3802 3803 // ListServiceDesc describes the ListService interface. 3804 var ListServiceDesc rpc.InterfaceDesc = descListService 3805 3806 // descListService hides the desc to keep godoc clean. 3807 var descListService = rpc.InterfaceDesc{ 3808 Name: "ListService", 3809 PkgPath: "github.com/grailbio/base/security/ticket", 3810 Methods: []rpc.MethodDesc{ 3811 { 3812 Name: "List", 3813 OutArgs: []rpc.ArgDesc{ 3814 {Name: "", Doc: ``}, // []string 3815 }, 3816 Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))}, 3817 }, 3818 }, 3819 } 3820 3821 // Hold type definitions in package-level variables, for better performance. 3822 //nolint:unused 3823 var ( 3824 vdlTypeEnum1 *vdl.Type 3825 vdlTypeStruct2 *vdl.Type 3826 vdlTypeStruct3 *vdl.Type 3827 vdlTypeStruct4 *vdl.Type 3828 vdlTypeStruct5 *vdl.Type 3829 vdlTypeList6 *vdl.Type 3830 vdlTypeStruct7 *vdl.Type 3831 vdlTypeStruct8 *vdl.Type 3832 vdlTypeStruct9 *vdl.Type 3833 vdlTypeStruct10 *vdl.Type 3834 vdlTypeOptional11 *vdl.Type 3835 vdlTypeOptional12 *vdl.Type 3836 vdlTypeStruct13 *vdl.Type 3837 vdlTypeStruct14 *vdl.Type 3838 vdlTypeStruct15 *vdl.Type 3839 vdlTypeStruct16 *vdl.Type 3840 vdlTypeStruct17 *vdl.Type 3841 vdlTypeOptional18 *vdl.Type 3842 vdlTypeStruct19 *vdl.Type 3843 vdlTypeStruct20 *vdl.Type 3844 vdlTypeStruct21 *vdl.Type 3845 vdlTypeStruct22 *vdl.Type 3846 vdlTypeStruct23 *vdl.Type 3847 vdlTypeStruct24 *vdl.Type 3848 vdlTypeList25 *vdl.Type 3849 vdlTypeStruct26 *vdl.Type 3850 vdlTypeStruct27 *vdl.Type 3851 vdlTypeOptional28 *vdl.Type 3852 vdlTypeOptional29 *vdl.Type 3853 vdlTypeList30 *vdl.Type 3854 vdlTypeStruct31 *vdl.Type 3855 vdlTypeOptional32 *vdl.Type 3856 vdlTypeStruct33 *vdl.Type 3857 vdlTypeOptional34 *vdl.Type 3858 vdlTypeStruct35 *vdl.Type 3859 vdlTypeList36 *vdl.Type 3860 vdlTypeUnion37 *vdl.Type 3861 vdlTypeStruct38 *vdl.Type 3862 vdlTypeMap39 *vdl.Type 3863 vdlTypeMap40 *vdl.Type 3864 vdlTypeStruct41 *vdl.Type 3865 vdlTypeMap42 *vdl.Type 3866 ) 3867 3868 var initializeVDLCalled bool 3869 3870 // initializeVDL performs vdl initialization. It is safe to call multiple times. 3871 // If you have an init ordering issue, just insert the following line verbatim 3872 // into your source files in this package, right after the "package foo" clause: 3873 // 3874 // var _ = initializeVDL() 3875 // 3876 // The purpose of this function is to ensure that vdl initialization occurs in 3877 // the right order, and very early in the init sequence. In particular, vdl 3878 // registration and package variable initialization needs to occur before 3879 // functions like vdl.TypeOf will work properly. 3880 // 3881 // This function returns a dummy value, so that it can be used to initialize the 3882 // first var in the file, to take advantage of Go's defined init order. 3883 func initializeVDL() struct{} { 3884 if initializeVDLCalled { 3885 return struct{}{} 3886 } 3887 initializeVDLCalled = true 3888 3889 // Register types. 3890 vdl.Register((*Control)(nil)) 3891 vdl.Register((*AwsCredentials)(nil)) 3892 vdl.Register((*AwsAssumeRoleBuilder)(nil)) 3893 vdl.Register((*AwsSessionBuilder)(nil)) 3894 vdl.Register((*TlsCertAuthorityBuilder)(nil)) 3895 vdl.Register((*SshCertAuthorityBuilder)(nil)) 3896 vdl.Register((*B2AccountAuthorizationBuilder)(nil)) 3897 vdl.Register((*VanadiumBuilder)(nil)) 3898 vdl.Register((*AwsTicket)(nil)) 3899 vdl.Register((*S3Ticket)(nil)) 3900 vdl.Register((*EcrTicket)(nil)) 3901 vdl.Register((*SshCert)(nil)) 3902 vdl.Register((*TlsCredentials)(nil)) 3903 vdl.Register((*TlsServerTicket)(nil)) 3904 vdl.Register((*TlsClientTicket)(nil)) 3905 vdl.Register((*DockerTicket)(nil)) 3906 vdl.Register((*DockerServerTicket)(nil)) 3907 vdl.Register((*DockerClientTicket)(nil)) 3908 vdl.Register((*Parameter)(nil)) 3909 vdl.Register((*AwsComputeInstancesBuilder)(nil)) 3910 vdl.Register((*ComputeInstance)(nil)) 3911 vdl.Register((*SshCertificateTicket)(nil)) 3912 vdl.Register((*B2Ticket)(nil)) 3913 vdl.Register((*VanadiumTicket)(nil)) 3914 vdl.Register((*GenericTicket)(nil)) 3915 vdl.Register((*Ticket)(nil)) 3916 vdl.Register((*TicketConfig)(nil)) 3917 vdl.Register((*Config)(nil)) 3918 3919 // Initialize type definitions. 3920 vdlTypeEnum1 = vdl.TypeOf((*Control)(nil)) 3921 vdlTypeStruct2 = vdl.TypeOf((*AwsCredentials)(nil)).Elem() 3922 vdlTypeStruct3 = vdl.TypeOf((*AwsAssumeRoleBuilder)(nil)).Elem() 3923 vdlTypeStruct4 = vdl.TypeOf((*AwsSessionBuilder)(nil)).Elem() 3924 vdlTypeStruct5 = vdl.TypeOf((*TlsCertAuthorityBuilder)(nil)).Elem() 3925 vdlTypeList6 = vdl.TypeOf((*[]string)(nil)) 3926 vdlTypeStruct7 = vdl.TypeOf((*SshCertAuthorityBuilder)(nil)).Elem() 3927 vdlTypeStruct8 = vdl.TypeOf((*B2AccountAuthorizationBuilder)(nil)).Elem() 3928 vdlTypeStruct9 = vdl.TypeOf((*VanadiumBuilder)(nil)).Elem() 3929 vdlTypeStruct10 = vdl.TypeOf((*AwsTicket)(nil)).Elem() 3930 vdlTypeOptional11 = vdl.TypeOf((*AwsAssumeRoleBuilder)(nil)) 3931 vdlTypeOptional12 = vdl.TypeOf((*AwsSessionBuilder)(nil)) 3932 vdlTypeStruct13 = vdl.TypeOf((*S3Ticket)(nil)).Elem() 3933 vdlTypeStruct14 = vdl.TypeOf((*EcrTicket)(nil)).Elem() 3934 vdlTypeStruct15 = vdl.TypeOf((*SshCert)(nil)).Elem() 3935 vdlTypeStruct16 = vdl.TypeOf((*TlsCredentials)(nil)).Elem() 3936 vdlTypeStruct17 = vdl.TypeOf((*TlsServerTicket)(nil)).Elem() 3937 vdlTypeOptional18 = vdl.TypeOf((*TlsCertAuthorityBuilder)(nil)) 3938 vdlTypeStruct19 = vdl.TypeOf((*TlsClientTicket)(nil)).Elem() 3939 vdlTypeStruct20 = vdl.TypeOf((*DockerTicket)(nil)).Elem() 3940 vdlTypeStruct21 = vdl.TypeOf((*DockerServerTicket)(nil)).Elem() 3941 vdlTypeStruct22 = vdl.TypeOf((*DockerClientTicket)(nil)).Elem() 3942 vdlTypeStruct23 = vdl.TypeOf((*Parameter)(nil)).Elem() 3943 vdlTypeStruct24 = vdl.TypeOf((*AwsComputeInstancesBuilder)(nil)).Elem() 3944 vdlTypeList25 = vdl.TypeOf((*[]Parameter)(nil)) 3945 vdlTypeStruct26 = vdl.TypeOf((*ComputeInstance)(nil)).Elem() 3946 vdlTypeStruct27 = vdl.TypeOf((*SshCertificateTicket)(nil)).Elem() 3947 vdlTypeOptional28 = vdl.TypeOf((*SshCertAuthorityBuilder)(nil)) 3948 vdlTypeOptional29 = vdl.TypeOf((*AwsComputeInstancesBuilder)(nil)) 3949 vdlTypeList30 = vdl.TypeOf((*[]ComputeInstance)(nil)) 3950 vdlTypeStruct31 = vdl.TypeOf((*B2Ticket)(nil)).Elem() 3951 vdlTypeOptional32 = vdl.TypeOf((*B2AccountAuthorizationBuilder)(nil)) 3952 vdlTypeStruct33 = vdl.TypeOf((*VanadiumTicket)(nil)).Elem() 3953 vdlTypeOptional34 = vdl.TypeOf((*VanadiumBuilder)(nil)) 3954 vdlTypeStruct35 = vdl.TypeOf((*GenericTicket)(nil)).Elem() 3955 vdlTypeList36 = vdl.TypeOf((*[]byte)(nil)) 3956 vdlTypeUnion37 = vdl.TypeOf((*Ticket)(nil)) 3957 vdlTypeStruct38 = vdl.TypeOf((*TicketConfig)(nil)).Elem() 3958 vdlTypeMap39 = vdl.TypeOf((*access.Permissions)(nil)) 3959 vdlTypeMap40 = vdl.TypeOf((*map[Control]bool)(nil)) 3960 vdlTypeStruct41 = vdl.TypeOf((*Config)(nil)).Elem() 3961 vdlTypeMap42 = vdl.TypeOf((*map[string]TicketConfig)(nil)) 3962 3963 return struct{}{} 3964 }