Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: tokenserver/api/minter/v1/token_minter.pb.go

Issue 2785973002: token-server: Add protos for new API for generating service account tokens. (Closed)
Patch Set: more nits Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Code generated by protoc-gen-go. DO NOT EDIT. 1 // Code generated by protoc-gen-go. DO NOT EDIT.
2 // source: github.com/luci/luci-go/tokenserver/api/minter/v1/token_minter.proto 2 // source: github.com/luci/luci-go/tokenserver/api/minter/v1/token_minter.proto
3 3
4 /* 4 /*
5 Package minter is a generated protocol buffer package. 5 Package minter is a generated protocol buffer package.
6 6
7 It is generated from these files: 7 It is generated from these files:
8 github.com/luci/luci-go/tokenserver/api/minter/v1/token_minter.proto 8 github.com/luci/luci-go/tokenserver/api/minter/v1/token_minter.proto
9 9
10 It has these top-level messages: 10 It has these top-level messages:
11 MintMachineTokenRequest 11 MintMachineTokenRequest
12 MachineTokenRequest 12 MachineTokenRequest
13 MintMachineTokenResponse 13 MintMachineTokenResponse
14 MachineTokenResponse 14 MachineTokenResponse
15 LuciMachineToken 15 LuciMachineToken
16 MintDelegationTokenRequest 16 MintDelegationTokenRequest
17 MintDelegationTokenResponse 17 MintDelegationTokenResponse
18 MintOAuthTokenGrantRequest
19 MintOAuthTokenGrantResponse
20 MintOAuthTokenViaGrantRequest
21 MintOAuthTokenViaGrantResponse
18 */ 22 */
19 package minter 23 package minter
20 24
21 import prpc "github.com/luci/luci-go/grpc/prpc" 25 import prpc "github.com/luci/luci-go/grpc/prpc"
22 26
23 import proto "github.com/golang/protobuf/proto" 27 import proto "github.com/golang/protobuf/proto"
24 import fmt "fmt" 28 import fmt "fmt"
25 import math "math" 29 import math "math"
26 import google_protobuf "github.com/golang/protobuf/ptypes/timestamp" 30 import google_protobuf "github.com/golang/protobuf/ptypes/timestamp"
27 import messages "github.com/luci/luci-go/server/auth/delegation/messages" 31 import messages "github.com/luci/luci-go/server/auth/delegation/messages"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 return nil 193 return nil
190 } 194 }
191 195
192 func (m *MachineTokenRequest) GetTokenType() tokenserver.MachineTokenType { 196 func (m *MachineTokenRequest) GetTokenType() tokenserver.MachineTokenType {
193 if m != nil { 197 if m != nil {
194 return m.TokenType 198 return m.TokenType
195 } 199 }
196 return tokenserver.MachineTokenType_UNKNOWN_TYPE 200 return tokenserver.MachineTokenType_UNKNOWN_TYPE
197 } 201 }
198 202
199 // MintMachineTokenResponse is returned by 'MintMachineToken' if the server 203 // MintMachineTokenResponse is returned by MintMachineToken if the server
200 // processed the request. 204 // processed the request.
201 // 205 //
202 // It's returned even if server refuses to mint a token. It contains the error 206 // It's returned even if server refuses to mint a token. It contains the error
203 // details in that case. 207 // details in that case.
204 type MintMachineTokenResponse struct { 208 type MintMachineTokenResponse struct {
205 // Possible kinds of fatal errors. 209 // Possible kinds of fatal errors.
206 // 210 //
207 // Non fatal errors are returned as grpc.Internal errors instead. 211 // Non fatal errors are returned as grpc.Internal errors instead.
208 ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCo de,enum=tokenserver.minter.ErrorCode" json:"error_code,omitempty"` 212 ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCo de,enum=tokenserver.minter.ErrorCode" json:"error_code,omitempty"`
209 // Optional detailed error message. 213 // Optional detailed error message.
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 return nil 473 return nil
470 } 474 }
471 475
472 func (m *MintDelegationTokenRequest) GetIntent() string { 476 func (m *MintDelegationTokenRequest) GetIntent() string {
473 if m != nil { 477 if m != nil {
474 return m.Intent 478 return m.Intent
475 } 479 }
476 return "" 480 return ""
477 } 481 }
478 482
479 // MintDelegationTokenResponse is returned by 'MintDelegationToken' on success. 483 // MintDelegationTokenResponse is returned by MintDelegationToken on success.
480 // 484 //
481 // Errors are returned via standard gRPC codes. 485 // Errors are returned via standard gRPC codes.
482 type MintDelegationTokenResponse struct { 486 type MintDelegationTokenResponse struct {
483 // The actual base64-encoded signed token. 487 // The actual base64-encoded signed token.
484 Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` 488 Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
485 // Same data as in 'token' in deserialized form, just for convenience. 489 // Same data as in 'token' in deserialized form, just for convenience.
486 // 490 //
487 // Mostly for JSON encoding users, since they may not understand proto-e ncoded 491 // Mostly for JSON encoding users, since they may not understand proto-e ncoded
488 // tokens. 492 // tokens.
489 DelegationSubtoken *messages.Subtoken `protobuf:"bytes,2,opt,name=delega tion_subtoken,json=delegationSubtoken" json:"delegation_subtoken,omitempty"` 493 DelegationSubtoken *messages.Subtoken `protobuf:"bytes,2,opt,name=delega tion_subtoken,json=delegationSubtoken" json:"delegation_subtoken,omitempty"`
490 // Identifier of the service and its version that produced the token. 494 // Identifier of the service and its version that produced the token.
491 // 495 //
492 // Has the form "<app-id>/<module-version>". This is _not_ part of the t oken. 496 // Has the form "<app-id>/<module-version>". This is _not_ part of the t oken.
497 // Used only for logging and monitoring.
493 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"` 498 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"`
494 } 499 }
495 500
496 func (m *MintDelegationTokenResponse) Reset() { *m = MintDele gationTokenResponse{} } 501 func (m *MintDelegationTokenResponse) Reset() { *m = MintDele gationTokenResponse{} }
497 func (m *MintDelegationTokenResponse) String() string { return proto. CompactTextString(m) } 502 func (m *MintDelegationTokenResponse) String() string { return proto. CompactTextString(m) }
498 func (*MintDelegationTokenResponse) ProtoMessage() {} 503 func (*MintDelegationTokenResponse) ProtoMessage() {}
499 func (*MintDelegationTokenResponse) Descriptor() ([]byte, []int) { return fileDe scriptor0, []int{6} } 504 func (*MintDelegationTokenResponse) Descriptor() ([]byte, []int) { return fileDe scriptor0, []int{6} }
500 505
501 func (m *MintDelegationTokenResponse) GetToken() string { 506 func (m *MintDelegationTokenResponse) GetToken() string {
502 if m != nil { 507 if m != nil {
503 return m.Token 508 return m.Token
504 } 509 }
505 return "" 510 return ""
506 } 511 }
507 512
508 func (m *MintDelegationTokenResponse) GetDelegationSubtoken() *messages.Subtoken { 513 func (m *MintDelegationTokenResponse) GetDelegationSubtoken() *messages.Subtoken {
509 if m != nil { 514 if m != nil {
510 return m.DelegationSubtoken 515 return m.DelegationSubtoken
511 } 516 }
512 return nil 517 return nil
513 } 518 }
514 519
515 func (m *MintDelegationTokenResponse) GetServiceVersion() string { 520 func (m *MintDelegationTokenResponse) GetServiceVersion() string {
516 if m != nil { 521 if m != nil {
517 return m.ServiceVersion 522 return m.ServiceVersion
518 } 523 }
519 return "" 524 return ""
520 } 525 }
521 526
527 // MintOAuthTokenGrantRequest is passed to MintOAuthTokenGrant.
528 //
529 // Additional implicit field is the identity of whoever makes this call. It
530 // becomes 'wielder_identity' of the generated token.
531 type MintOAuthTokenGrantRequest struct {
532 // Service account identity the end user wants to act as.
533 //
534 // A string of the form "user:<email>".
535 //
536 // Required.
537 ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=s erviceAccount" json:"service_account,omitempty"`
538 // How long the generated grant should be considered valid (in seconds).
539 //
540 // Default is 3600 sec.
541 ValidityDuration int64 `protobuf:"varint,2,opt,name=validity_duration,js on=validityDuration" json:"validity_duration,omitempty"`
542 // An end user that wants to act as the service account (perhaps indirec tly).
543 //
544 // A string of the form "user:<email>". On Swarming, this is an identity of
545 // a user that posted the task.
546 //
547 // TODO(vadimsh): Verify that this user is present during MintOAuthToken Grant
548 // RPC by requiring the end user's credentials, e.g make Swarming forwar d
549 // user's OAuth token to the token server, where it can be validated.
550 //
551 // Required.
552 EndUserIdentity string `protobuf:"bytes,3,opt,name=end_user_identity,jso n=endUserIdentity" json:"end_user_identity,omitempty"`
553 // Optional reason why the grant is created.
554 //
555 // Used only for logging and auditing purposes. Doesn't become part of t he
556 // grant.
557 Intent string `protobuf:"bytes,4,opt,name=intent" json:"intent,omitempty "`
558 }
559
560 func (m *MintOAuthTokenGrantRequest) Reset() { *m = MintOAuth TokenGrantRequest{} }
561 func (m *MintOAuthTokenGrantRequest) String() string { return proto.C ompactTextString(m) }
562 func (*MintOAuthTokenGrantRequest) ProtoMessage() {}
563 func (*MintOAuthTokenGrantRequest) Descriptor() ([]byte, []int) { return fileDes criptor0, []int{7} }
564
565 func (m *MintOAuthTokenGrantRequest) GetServiceAccount() string {
566 if m != nil {
567 return m.ServiceAccount
568 }
569 return ""
570 }
571
572 func (m *MintOAuthTokenGrantRequest) GetValidityDuration() int64 {
573 if m != nil {
574 return m.ValidityDuration
575 }
576 return 0
577 }
578
579 func (m *MintOAuthTokenGrantRequest) GetEndUserIdentity() string {
580 if m != nil {
581 return m.EndUserIdentity
582 }
583 return ""
584 }
585
586 func (m *MintOAuthTokenGrantRequest) GetIntent() string {
587 if m != nil {
588 return m.Intent
589 }
590 return ""
591 }
592
593 // MintOAuthTokenGrantResponse is returned by MintOAuthTokenGrant.
594 type MintOAuthTokenGrantResponse struct {
595 GrantToken string `protobuf:"bytes,1,opt,name=grant_ token,json=grantToken" json:"grant_token,omitempty"`
596 Expiry *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=expiry " json:"expiry,omitempty"`
597 // Identifier of the service and its version that produced the token.
598 //
599 // Has the form "<app-id>/<module-version>". This is _not_ part of the t oken.
600 // Used only for logging and monitoring.
601 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"`
602 }
603
604 func (m *MintOAuthTokenGrantResponse) Reset() { *m = MintOAut hTokenGrantResponse{} }
605 func (m *MintOAuthTokenGrantResponse) String() string { return proto. CompactTextString(m) }
606 func (*MintOAuthTokenGrantResponse) ProtoMessage() {}
607 func (*MintOAuthTokenGrantResponse) Descriptor() ([]byte, []int) { return fileDe scriptor0, []int{8} }
608
609 func (m *MintOAuthTokenGrantResponse) GetGrantToken() string {
610 if m != nil {
611 return m.GrantToken
612 }
613 return ""
614 }
615
616 func (m *MintOAuthTokenGrantResponse) GetExpiry() *google_protobuf.Timestamp {
617 if m != nil {
618 return m.Expiry
619 }
620 return nil
621 }
622
623 func (m *MintOAuthTokenGrantResponse) GetServiceVersion() string {
624 if m != nil {
625 return m.ServiceVersion
626 }
627 return ""
628 }
629
630 // MintOAuthTokenViaGrantRequest is passed to MintOAuthTokenViaGrant.
631 //
632 // Additional implicit field is the identity of whoever makes this call. It is
633 // compared against 'wielder_identity' inside the token.
634 type MintOAuthTokenViaGrantRequest struct {
635 // A previously generated grant, as returned by MintOAuthTokenGrant.
636 GrantToken string `protobuf:"bytes,1,opt,name=grant_token,json=grantToke n" json:"grant_token,omitempty"`
637 // The list of OAuth scopes the access token should have.
638 //
639 // The server may reject the request if some scopes are not allowed.
640 OauthScopes []string `protobuf:"bytes,2,rep,name=oauth_scopes,json=oauth Scopes" json:"oauth_scopes,omitempty"`
641 // Minimally accepted validity duration of the returned OAuth token (sec onds).
642 //
643 // The server may return a token that lives longer than this. The maximu m is
644 // 1h. An attempt to get a token that lives longer than 1h will result i n
645 // an error.
646 //
647 // The returned token validity duration doesn't depend on the lifetime o f
648 // the grant: it's possible to use a grant that expires in 1 sec to get an
649 // access token that lives for 1h.
650 //
651 // Default is 300 sec.
652 MinValidityDuration int64 `protobuf:"varint,3,opt,name=min_validity_dura tion,json=minValidityDuration" json:"min_validity_duration,omitempty"`
653 }
654
655 func (m *MintOAuthTokenViaGrantRequest) Reset() { *m = MintOA uthTokenViaGrantRequest{} }
656 func (m *MintOAuthTokenViaGrantRequest) String() string { return prot o.CompactTextString(m) }
657 func (*MintOAuthTokenViaGrantRequest) ProtoMessage() {}
658 func (*MintOAuthTokenViaGrantRequest) Descriptor() ([]byte, []int) { return file Descriptor0, []int{9} }
659
660 func (m *MintOAuthTokenViaGrantRequest) GetGrantToken() string {
661 if m != nil {
662 return m.GrantToken
663 }
664 return ""
665 }
666
667 func (m *MintOAuthTokenViaGrantRequest) GetOauthScopes() []string {
668 if m != nil {
669 return m.OauthScopes
670 }
671 return nil
672 }
673
674 func (m *MintOAuthTokenViaGrantRequest) GetMinValidityDuration() int64 {
675 if m != nil {
676 return m.MinValidityDuration
677 }
678 return 0
679 }
680
681 // MintOAuthTokenViaGrantResponse is returned by MintOAuthTokenViaGrant.
682 type MintOAuthTokenViaGrantResponse struct {
683 AccessToken string `protobuf:"bytes,1,opt,name=acces s_token,json=accessToken" json:"access_token,omitempty"`
684 Expiry *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=expir y" json:"expiry,omitempty"`
685 // Identifier of the service and its version that produced the token.
686 //
687 // Has the form "<app-id>/<module-version>". Used only for logging and
688 // monitoring.
689 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"`
690 }
691
692 func (m *MintOAuthTokenViaGrantResponse) Reset() { *m = MintO AuthTokenViaGrantResponse{} }
693 func (m *MintOAuthTokenViaGrantResponse) String() string { return pro to.CompactTextString(m) }
694 func (*MintOAuthTokenViaGrantResponse) ProtoMessage() {}
695 func (*MintOAuthTokenViaGrantResponse) Descriptor() ([]byte, []int) { return fil eDescriptor0, []int{10} }
696
697 func (m *MintOAuthTokenViaGrantResponse) GetAccessToken() string {
698 if m != nil {
699 return m.AccessToken
700 }
701 return ""
702 }
703
704 func (m *MintOAuthTokenViaGrantResponse) GetExpiry() *google_protobuf.Timestamp {
705 if m != nil {
706 return m.Expiry
707 }
708 return nil
709 }
710
711 func (m *MintOAuthTokenViaGrantResponse) GetServiceVersion() string {
712 if m != nil {
713 return m.ServiceVersion
714 }
715 return ""
716 }
717
522 func init() { 718 func init() {
523 proto.RegisterType((*MintMachineTokenRequest)(nil), "tokenserver.minter. MintMachineTokenRequest") 719 proto.RegisterType((*MintMachineTokenRequest)(nil), "tokenserver.minter. MintMachineTokenRequest")
524 proto.RegisterType((*MachineTokenRequest)(nil), "tokenserver.minter.Mach ineTokenRequest") 720 proto.RegisterType((*MachineTokenRequest)(nil), "tokenserver.minter.Mach ineTokenRequest")
525 proto.RegisterType((*MintMachineTokenResponse)(nil), "tokenserver.minter .MintMachineTokenResponse") 721 proto.RegisterType((*MintMachineTokenResponse)(nil), "tokenserver.minter .MintMachineTokenResponse")
526 proto.RegisterType((*MachineTokenResponse)(nil), "tokenserver.minter.Mac hineTokenResponse") 722 proto.RegisterType((*MachineTokenResponse)(nil), "tokenserver.minter.Mac hineTokenResponse")
527 proto.RegisterType((*LuciMachineToken)(nil), "tokenserver.minter.LuciMac hineToken") 723 proto.RegisterType((*LuciMachineToken)(nil), "tokenserver.minter.LuciMac hineToken")
528 proto.RegisterType((*MintDelegationTokenRequest)(nil), "tokenserver.mint er.MintDelegationTokenRequest") 724 proto.RegisterType((*MintDelegationTokenRequest)(nil), "tokenserver.mint er.MintDelegationTokenRequest")
529 proto.RegisterType((*MintDelegationTokenResponse)(nil), "tokenserver.min ter.MintDelegationTokenResponse") 725 proto.RegisterType((*MintDelegationTokenResponse)(nil), "tokenserver.min ter.MintDelegationTokenResponse")
726 proto.RegisterType((*MintOAuthTokenGrantRequest)(nil), "tokenserver.mint er.MintOAuthTokenGrantRequest")
727 proto.RegisterType((*MintOAuthTokenGrantResponse)(nil), "tokenserver.min ter.MintOAuthTokenGrantResponse")
728 proto.RegisterType((*MintOAuthTokenViaGrantRequest)(nil), "tokenserver.m inter.MintOAuthTokenViaGrantRequest")
729 proto.RegisterType((*MintOAuthTokenViaGrantResponse)(nil), "tokenserver. minter.MintOAuthTokenViaGrantResponse")
530 proto.RegisterEnum("tokenserver.minter.SignatureAlgorithm", SignatureAlg orithm_name, SignatureAlgorithm_value) 730 proto.RegisterEnum("tokenserver.minter.SignatureAlgorithm", SignatureAlg orithm_name, SignatureAlgorithm_value)
531 proto.RegisterEnum("tokenserver.minter.ErrorCode", ErrorCode_name, Error Code_value) 731 proto.RegisterEnum("tokenserver.minter.ErrorCode", ErrorCode_name, Error Code_value)
532 } 732 }
533 733
534 // Reference imports to suppress errors if they are not otherwise used. 734 // Reference imports to suppress errors if they are not otherwise used.
535 var _ context.Context 735 var _ context.Context
536 var _ grpc.ClientConn 736 var _ grpc.ClientConn
537 737
538 // This is a compile-time assertion to ensure that this generated file 738 // This is a compile-time assertion to ensure that this generated file
539 // is compatible with the grpc package it is being compiled against. 739 // is compatible with the grpc package it is being compiled against.
(...skipping 25 matching lines...) Expand all
565 // the token): 765 // the token):
566 // * They have expiration time. 766 // * They have expiration time.
567 // * They are usable only if presented with a credential of someone fr om 767 // * They are usable only if presented with a credential of someone fr om
568 // the 'audience' list. 768 // the 'audience' list.
569 // * They are usable only on services specified in the 'services' list . 769 // * They are usable only on services specified in the 'services' list .
570 // 770 //
571 // The token server must be configured in advance with all expected 771 // The token server must be configured in advance with all expected
572 // combinations of (caller identity, delegated identity, audience, servi ce) 772 // combinations of (caller identity, delegated identity, audience, servi ce)
573 // tuples. See DelegationRule in config.proto. 773 // tuples. See DelegationRule in config.proto.
574 MintDelegationToken(ctx context.Context, in *MintDelegationTokenRequest, opts ...grpc.CallOption) (*MintDelegationTokenResponse, error) 774 MintDelegationToken(ctx context.Context, in *MintDelegationTokenRequest, opts ...grpc.CallOption) (*MintDelegationTokenResponse, error)
775 // MintOAuthTokenGrant generates a new grant for getting an OAuth2 token .
776 //
777 // This is a special (opaque for clients) token that asserts that the ca ller
778 // at the time of the call was allowed to act as a particular service ac count
779 // to perform a task authorized by an end-user.
780 //
781 // The returned grant can be used later (when the end-user is no longer
782 // present) to get a real OAuth2 access token via MintOAuthTokenViaGrant call.
783 //
784 // This pair of RPCs is used to "delay" generation of service account OA uth
785 // token until some later time, when it is actually needed. This is used by
786 // Swarming:
787 // 1. When the task is posted, Swarming calls MintOAuthTokenGrant to v erify
788 // that the end-user is allowed to act as the requested service acc ount
789 // on Swarming. On success, Swarming stores the grant in the task
790 // metadata.
791 // 2. At a later time, when the task is executing and it needs an acce ss
792 // token, Swarming calls MintOAuthTokenViaGrant to convert the gran t into
793 // a real OAuth2 token.
794 //
795 // The returned grant can be used multiple times (as long as its validit y
796 // duration and the token server policy allows).
797 //
798 // The token server must be configured in advance with all expected
799 // combinations of (caller identity, service account name, end users) tu ples.
800 // See ServiceAccountRule in config.proto.
801 //
802 // MintOAuthTokenGrant will check that the requested usage is allowed by the
803 // rules. Later, MintOAuthTokenViaGrant will recheck this too.
804 MintOAuthTokenGrant(ctx context.Context, in *MintOAuthTokenGrantRequest, opts ...grpc.CallOption) (*MintOAuthTokenGrantResponse, error)
805 // MintOAuthTokenViaGrant converts an OAuth2 token grant into an access token.
806 //
807 // The grant must be previously generated by MintOAuthTokenGrant functio n, see
808 // its docs for more details.
809 MintOAuthTokenViaGrant(ctx context.Context, in *MintOAuthTokenViaGrantRe quest, opts ...grpc.CallOption) (*MintOAuthTokenViaGrantResponse, error)
575 } 810 }
576 type tokenMinterPRPCClient struct { 811 type tokenMinterPRPCClient struct {
577 client *prpc.Client 812 client *prpc.Client
578 } 813 }
579 814
580 func NewTokenMinterPRPCClient(client *prpc.Client) TokenMinterClient { 815 func NewTokenMinterPRPCClient(client *prpc.Client) TokenMinterClient {
581 return &tokenMinterPRPCClient{client} 816 return &tokenMinterPRPCClient{client}
582 } 817 }
583 818
584 func (c *tokenMinterPRPCClient) MintMachineToken(ctx context.Context, in *MintMa chineTokenRequest, opts ...grpc.CallOption) (*MintMachineTokenResponse, error) { 819 func (c *tokenMinterPRPCClient) MintMachineToken(ctx context.Context, in *MintMa chineTokenRequest, opts ...grpc.CallOption) (*MintMachineTokenResponse, error) {
585 out := new(MintMachineTokenResponse) 820 out := new(MintMachineTokenResponse)
586 err := c.client.Call(ctx, "tokenserver.minter.TokenMinter", "MintMachine Token", in, out, opts...) 821 err := c.client.Call(ctx, "tokenserver.minter.TokenMinter", "MintMachine Token", in, out, opts...)
587 if err != nil { 822 if err != nil {
588 return nil, err 823 return nil, err
589 } 824 }
590 return out, nil 825 return out, nil
591 } 826 }
592 827
593 func (c *tokenMinterPRPCClient) MintDelegationToken(ctx context.Context, in *Min tDelegationTokenRequest, opts ...grpc.CallOption) (*MintDelegationTokenResponse, error) { 828 func (c *tokenMinterPRPCClient) MintDelegationToken(ctx context.Context, in *Min tDelegationTokenRequest, opts ...grpc.CallOption) (*MintDelegationTokenResponse, error) {
594 out := new(MintDelegationTokenResponse) 829 out := new(MintDelegationTokenResponse)
595 err := c.client.Call(ctx, "tokenserver.minter.TokenMinter", "MintDelegat ionToken", in, out, opts...) 830 err := c.client.Call(ctx, "tokenserver.minter.TokenMinter", "MintDelegat ionToken", in, out, opts...)
596 if err != nil { 831 if err != nil {
597 return nil, err 832 return nil, err
598 } 833 }
599 return out, nil 834 return out, nil
600 } 835 }
601 836
837 func (c *tokenMinterPRPCClient) MintOAuthTokenGrant(ctx context.Context, in *Min tOAuthTokenGrantRequest, opts ...grpc.CallOption) (*MintOAuthTokenGrantResponse, error) {
838 out := new(MintOAuthTokenGrantResponse)
839 err := c.client.Call(ctx, "tokenserver.minter.TokenMinter", "MintOAuthTo kenGrant", in, out, opts...)
840 if err != nil {
841 return nil, err
842 }
843 return out, nil
844 }
845
846 func (c *tokenMinterPRPCClient) MintOAuthTokenViaGrant(ctx context.Context, in * MintOAuthTokenViaGrantRequest, opts ...grpc.CallOption) (*MintOAuthTokenViaGrant Response, error) {
847 out := new(MintOAuthTokenViaGrantResponse)
848 err := c.client.Call(ctx, "tokenserver.minter.TokenMinter", "MintOAuthTo kenViaGrant", in, out, opts...)
849 if err != nil {
850 return nil, err
851 }
852 return out, nil
853 }
854
602 type tokenMinterClient struct { 855 type tokenMinterClient struct {
603 cc *grpc.ClientConn 856 cc *grpc.ClientConn
604 } 857 }
605 858
606 func NewTokenMinterClient(cc *grpc.ClientConn) TokenMinterClient { 859 func NewTokenMinterClient(cc *grpc.ClientConn) TokenMinterClient {
607 return &tokenMinterClient{cc} 860 return &tokenMinterClient{cc}
608 } 861 }
609 862
610 func (c *tokenMinterClient) MintMachineToken(ctx context.Context, in *MintMachin eTokenRequest, opts ...grpc.CallOption) (*MintMachineTokenResponse, error) { 863 func (c *tokenMinterClient) MintMachineToken(ctx context.Context, in *MintMachin eTokenRequest, opts ...grpc.CallOption) (*MintMachineTokenResponse, error) {
611 out := new(MintMachineTokenResponse) 864 out := new(MintMachineTokenResponse)
612 err := grpc.Invoke(ctx, "/tokenserver.minter.TokenMinter/MintMachineToke n", in, out, c.cc, opts...) 865 err := grpc.Invoke(ctx, "/tokenserver.minter.TokenMinter/MintMachineToke n", in, out, c.cc, opts...)
613 if err != nil { 866 if err != nil {
614 return nil, err 867 return nil, err
615 } 868 }
616 return out, nil 869 return out, nil
617 } 870 }
618 871
619 func (c *tokenMinterClient) MintDelegationToken(ctx context.Context, in *MintDel egationTokenRequest, opts ...grpc.CallOption) (*MintDelegationTokenResponse, err or) { 872 func (c *tokenMinterClient) MintDelegationToken(ctx context.Context, in *MintDel egationTokenRequest, opts ...grpc.CallOption) (*MintDelegationTokenResponse, err or) {
620 out := new(MintDelegationTokenResponse) 873 out := new(MintDelegationTokenResponse)
621 err := grpc.Invoke(ctx, "/tokenserver.minter.TokenMinter/MintDelegationT oken", in, out, c.cc, opts...) 874 err := grpc.Invoke(ctx, "/tokenserver.minter.TokenMinter/MintDelegationT oken", in, out, c.cc, opts...)
622 if err != nil { 875 if err != nil {
623 return nil, err 876 return nil, err
624 } 877 }
625 return out, nil 878 return out, nil
626 } 879 }
627 880
881 func (c *tokenMinterClient) MintOAuthTokenGrant(ctx context.Context, in *MintOAu thTokenGrantRequest, opts ...grpc.CallOption) (*MintOAuthTokenGrantResponse, err or) {
882 out := new(MintOAuthTokenGrantResponse)
883 err := grpc.Invoke(ctx, "/tokenserver.minter.TokenMinter/MintOAuthTokenG rant", in, out, c.cc, opts...)
884 if err != nil {
885 return nil, err
886 }
887 return out, nil
888 }
889
890 func (c *tokenMinterClient) MintOAuthTokenViaGrant(ctx context.Context, in *Mint OAuthTokenViaGrantRequest, opts ...grpc.CallOption) (*MintOAuthTokenViaGrantResp onse, error) {
891 out := new(MintOAuthTokenViaGrantResponse)
892 err := grpc.Invoke(ctx, "/tokenserver.minter.TokenMinter/MintOAuthTokenV iaGrant", in, out, c.cc, opts...)
893 if err != nil {
894 return nil, err
895 }
896 return out, nil
897 }
898
628 // Server API for TokenMinter service 899 // Server API for TokenMinter service
629 900
630 type TokenMinterServer interface { 901 type TokenMinterServer interface {
631 // MintMachineToken generates a new token for an authenticated machine. 902 // MintMachineToken generates a new token for an authenticated machine.
632 // 903 //
633 // It checks that provided certificate was signed by some trusted CA, an d it 904 // It checks that provided certificate was signed by some trusted CA, an d it
634 // is still valid (non-expired and hasn't been revoked). It then checks that 905 // is still valid (non-expired and hasn't been revoked). It then checks that
635 // the request was signed by the corresponding private key. Finally it c hecks 906 // the request was signed by the corresponding private key. Finally it c hecks
636 // that the caller is authorized to generate requested kind of token. 907 // that the caller is authorized to generate requested kind of token.
637 // 908 //
(...skipping 13 matching lines...) Expand all
651 // the token): 922 // the token):
652 // * They have expiration time. 923 // * They have expiration time.
653 // * They are usable only if presented with a credential of someone fr om 924 // * They are usable only if presented with a credential of someone fr om
654 // the 'audience' list. 925 // the 'audience' list.
655 // * They are usable only on services specified in the 'services' list . 926 // * They are usable only on services specified in the 'services' list .
656 // 927 //
657 // The token server must be configured in advance with all expected 928 // The token server must be configured in advance with all expected
658 // combinations of (caller identity, delegated identity, audience, servi ce) 929 // combinations of (caller identity, delegated identity, audience, servi ce)
659 // tuples. See DelegationRule in config.proto. 930 // tuples. See DelegationRule in config.proto.
660 MintDelegationToken(context.Context, *MintDelegationTokenRequest) (*Mint DelegationTokenResponse, error) 931 MintDelegationToken(context.Context, *MintDelegationTokenRequest) (*Mint DelegationTokenResponse, error)
932 // MintOAuthTokenGrant generates a new grant for getting an OAuth2 token .
933 //
934 // This is a special (opaque for clients) token that asserts that the ca ller
935 // at the time of the call was allowed to act as a particular service ac count
936 // to perform a task authorized by an end-user.
937 //
938 // The returned grant can be used later (when the end-user is no longer
939 // present) to get a real OAuth2 access token via MintOAuthTokenViaGrant call.
940 //
941 // This pair of RPCs is used to "delay" generation of service account OA uth
942 // token until some later time, when it is actually needed. This is used by
943 // Swarming:
944 // 1. When the task is posted, Swarming calls MintOAuthTokenGrant to v erify
945 // that the end-user is allowed to act as the requested service acc ount
946 // on Swarming. On success, Swarming stores the grant in the task
947 // metadata.
948 // 2. At a later time, when the task is executing and it needs an acce ss
949 // token, Swarming calls MintOAuthTokenViaGrant to convert the gran t into
950 // a real OAuth2 token.
951 //
952 // The returned grant can be used multiple times (as long as its validit y
953 // duration and the token server policy allows).
954 //
955 // The token server must be configured in advance with all expected
956 // combinations of (caller identity, service account name, end users) tu ples.
957 // See ServiceAccountRule in config.proto.
958 //
959 // MintOAuthTokenGrant will check that the requested usage is allowed by the
960 // rules. Later, MintOAuthTokenViaGrant will recheck this too.
961 MintOAuthTokenGrant(context.Context, *MintOAuthTokenGrantRequest) (*Mint OAuthTokenGrantResponse, error)
962 // MintOAuthTokenViaGrant converts an OAuth2 token grant into an access token.
963 //
964 // The grant must be previously generated by MintOAuthTokenGrant functio n, see
965 // its docs for more details.
966 MintOAuthTokenViaGrant(context.Context, *MintOAuthTokenViaGrantRequest) (*MintOAuthTokenViaGrantResponse, error)
661 } 967 }
662 968
663 func RegisterTokenMinterServer(s prpc.Registrar, srv TokenMinterServer) { 969 func RegisterTokenMinterServer(s prpc.Registrar, srv TokenMinterServer) {
664 s.RegisterService(&_TokenMinter_serviceDesc, srv) 970 s.RegisterService(&_TokenMinter_serviceDesc, srv)
665 } 971 }
666 972
667 func _TokenMinter_MintMachineToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interfac e{}, error) { 973 func _TokenMinter_MintMachineToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interfac e{}, error) {
668 in := new(MintMachineTokenRequest) 974 in := new(MintMachineTokenRequest)
669 if err := dec(in); err != nil { 975 if err := dec(in); err != nil {
670 return nil, err 976 return nil, err
(...skipping 22 matching lines...) Expand all
693 info := &grpc.UnaryServerInfo{ 999 info := &grpc.UnaryServerInfo{
694 Server: srv, 1000 Server: srv,
695 FullMethod: "/tokenserver.minter.TokenMinter/MintDelegationToken ", 1001 FullMethod: "/tokenserver.minter.TokenMinter/MintDelegationToken ",
696 } 1002 }
697 handler := func(ctx context.Context, req interface{}) (interface{}, erro r) { 1003 handler := func(ctx context.Context, req interface{}) (interface{}, erro r) {
698 return srv.(TokenMinterServer).MintDelegationToken(ctx, req.(*Mi ntDelegationTokenRequest)) 1004 return srv.(TokenMinterServer).MintDelegationToken(ctx, req.(*Mi ntDelegationTokenRequest))
699 } 1005 }
700 return interceptor(ctx, in, info, handler) 1006 return interceptor(ctx, in, info, handler)
701 } 1007 }
702 1008
1009 func _TokenMinter_MintOAuthTokenGrant_Handler(srv interface{}, ctx context.Conte xt, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (inter face{}, error) {
1010 in := new(MintOAuthTokenGrantRequest)
1011 if err := dec(in); err != nil {
1012 return nil, err
1013 }
1014 if interceptor == nil {
1015 return srv.(TokenMinterServer).MintOAuthTokenGrant(ctx, in)
1016 }
1017 info := &grpc.UnaryServerInfo{
1018 Server: srv,
1019 FullMethod: "/tokenserver.minter.TokenMinter/MintOAuthTokenGrant ",
1020 }
1021 handler := func(ctx context.Context, req interface{}) (interface{}, erro r) {
1022 return srv.(TokenMinterServer).MintOAuthTokenGrant(ctx, req.(*Mi ntOAuthTokenGrantRequest))
1023 }
1024 return interceptor(ctx, in, info, handler)
1025 }
1026
1027 func _TokenMinter_MintOAuthTokenViaGrant_Handler(srv interface{}, ctx context.Co ntext, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (in terface{}, error) {
1028 in := new(MintOAuthTokenViaGrantRequest)
1029 if err := dec(in); err != nil {
1030 return nil, err
1031 }
1032 if interceptor == nil {
1033 return srv.(TokenMinterServer).MintOAuthTokenViaGrant(ctx, in)
1034 }
1035 info := &grpc.UnaryServerInfo{
1036 Server: srv,
1037 FullMethod: "/tokenserver.minter.TokenMinter/MintOAuthTokenViaGr ant",
1038 }
1039 handler := func(ctx context.Context, req interface{}) (interface{}, erro r) {
1040 return srv.(TokenMinterServer).MintOAuthTokenViaGrant(ctx, req.( *MintOAuthTokenViaGrantRequest))
1041 }
1042 return interceptor(ctx, in, info, handler)
1043 }
1044
703 var _TokenMinter_serviceDesc = grpc.ServiceDesc{ 1045 var _TokenMinter_serviceDesc = grpc.ServiceDesc{
704 ServiceName: "tokenserver.minter.TokenMinter", 1046 ServiceName: "tokenserver.minter.TokenMinter",
705 HandlerType: (*TokenMinterServer)(nil), 1047 HandlerType: (*TokenMinterServer)(nil),
706 Methods: []grpc.MethodDesc{ 1048 Methods: []grpc.MethodDesc{
707 { 1049 {
708 MethodName: "MintMachineToken", 1050 MethodName: "MintMachineToken",
709 Handler: _TokenMinter_MintMachineToken_Handler, 1051 Handler: _TokenMinter_MintMachineToken_Handler,
710 }, 1052 },
711 { 1053 {
712 MethodName: "MintDelegationToken", 1054 MethodName: "MintDelegationToken",
713 Handler: _TokenMinter_MintDelegationToken_Handler, 1055 Handler: _TokenMinter_MintDelegationToken_Handler,
714 }, 1056 },
1057 {
1058 MethodName: "MintOAuthTokenGrant",
1059 Handler: _TokenMinter_MintOAuthTokenGrant_Handler,
1060 },
1061 {
1062 MethodName: "MintOAuthTokenViaGrant",
1063 Handler: _TokenMinter_MintOAuthTokenViaGrant_Handler,
1064 },
715 }, 1065 },
716 Streams: []grpc.StreamDesc{}, 1066 Streams: []grpc.StreamDesc{},
717 Metadata: "github.com/luci/luci-go/tokenserver/api/minter/v1/token_minte r.proto", 1067 Metadata: "github.com/luci/luci-go/tokenserver/api/minter/v1/token_minte r.proto",
718 } 1068 }
719 1069
720 func init() { 1070 func init() {
721 proto.RegisterFile("github.com/luci/luci-go/tokenserver/api/minter/v1/to ken_minter.proto", fileDescriptor0) 1071 proto.RegisterFile("github.com/luci/luci-go/tokenserver/api/minter/v1/to ken_minter.proto", fileDescriptor0)
722 } 1072 }
723 1073
724 var fileDescriptor0 = []byte{ 1074 var fileDescriptor0 = []byte{
725 // 919 bytes of a gzipped FileDescriptorProto 1075 // 1117 bytes of a gzipped FileDescriptorProto
726 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x6e, 0xdb, 0x36, 1076 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6e, 0xdb, 0x46,
727 0x14, 0x8e, 0x62, 0xc7, 0xb5, 0x4f, 0x7e, 0xaa, 0xd0, 0x49, 0xea, 0xb9, 0x1b, 0x1a, 0x78, 0xc3, 1077 0x17, 0x0d, 0x25, 0xd9, 0x91, 0xae, 0x64, 0x9b, 0x1e, 0xd9, 0x8e, 0x3e, 0xe5, 0x4b, 0xed, 0xa8,
728 0x16, 0xb4, 0xab, 0x84, 0x79, 0xd8, 0x0f, 0xd0, 0xdd, 0xa8, 0xb6, 0x9a, 0x38, 0xad, 0xe4, 0x80, 1078 0x45, 0x6b, 0x38, 0x8d, 0x84, 0xa8, 0xe8, 0x0f, 0x90, 0x6e, 0x18, 0x99, 0xb1, 0xe5, 0x44, 0x92,
729 0x92, 0x57, 0xec, 0x8a, 0x50, 0x2c, 0xd6, 0x21, 0x6a, 0x4b, 0xae, 0x44, 0x19, 0xf3, 0xde, 0x61, 1079 0x31, 0xa4, 0x1c, 0x74, 0x45, 0xd0, 0xe4, 0x44, 0x1e, 0x44, 0x22, 0x15, 0x72, 0x68, 0xd4, 0xdd,
730 0x0f, 0xb1, 0x27, 0xd8, 0x6b, 0xec, 0x49, 0xf6, 0x04, 0x03, 0x76, 0x3b, 0x88, 0x94, 0x6c, 0x39, 1080 0xf4, 0x09, 0xba, 0xee, 0xa2, 0x9b, 0xf6, 0x09, 0xba, 0xeb, 0x33, 0xf4, 0x49, 0xba, 0xeb, 0xba,
731 0x51, 0x87, 0xdc, 0x18, 0xe2, 0xf7, 0x7d, 0x3c, 0xdf, 0xe1, 0x39, 0x87, 0x34, 0xf4, 0x27, 0x8c, 1081 0xdb, 0x82, 0x33, 0xa4, 0x44, 0x4a, 0x54, 0xe3, 0x14, 0xe8, 0xc6, 0x10, 0xcf, 0xbd, 0x73, 0xcf,
732 0xdf, 0x24, 0xd7, 0xda, 0x38, 0x9c, 0xe9, 0xd3, 0x64, 0xcc, 0xc4, 0xcf, 0xf3, 0x49, 0xa8, 0xf3, 1082 0x99, 0x73, 0xef, 0xcc, 0x18, 0x8e, 0x47, 0x94, 0x5d, 0x05, 0x97, 0x4d, 0xcb, 0x9d, 0xb4, 0xc6,
733 0xf0, 0x3d, 0x0d, 0x62, 0x1a, 0x2d, 0x68, 0xa4, 0x7b, 0x73, 0xa6, 0xcf, 0x58, 0xc0, 0x69, 0xa4, 1083 0x81, 0x45, 0xf9, 0x9f, 0xc7, 0x23, 0xb7, 0xc5, 0xdc, 0x37, 0xc4, 0xf1, 0x89, 0x77, 0x4d, 0xbc,
734 0x2f, 0xbe, 0x91, 0x0c, 0x91, 0x6b, 0x6d, 0x1e, 0x85, 0x3c, 0x44, 0xa8, 0xa0, 0xd6, 0x24, 0xd3, 1084 0x96, 0x39, 0xa5, 0xad, 0x09, 0x75, 0x18, 0xf1, 0x5a, 0xd7, 0x4f, 0x44, 0xc4, 0x10, 0xdf, 0xcd,
735 0x7e, 0x32, 0x09, 0xc3, 0xc9, 0x94, 0xea, 0x42, 0x71, 0x9d, 0xbc, 0xd3, 0x39, 0x9b, 0xd1, 0x98, 1085 0xa9, 0xe7, 0x32, 0x17, 0xa1, 0x44, 0x76, 0x53, 0x44, 0xea, 0xfb, 0x23, 0xd7, 0x1d, 0x8d, 0x49,
736 0x7b, 0xb3, 0xb9, 0xdc, 0xd4, 0xbe, 0xf8, 0x98, 0x75, 0xee, 0x9a, 0xf0, 0x1b, 0xdd, 0xa7, 0x53, 1086 0x8b, 0x67, 0x5c, 0x06, 0xaf, 0x5b, 0x8c, 0x4e, 0x88, 0xcf, 0xcc, 0xc9, 0x54, 0x2c, 0xaa, 0x9f,
737 0x3a, 0xf1, 0x38, 0x0b, 0x03, 0x7d, 0x46, 0xe3, 0xd8, 0x9b, 0xd0, 0xb8, 0x80, 0x65, 0x91, 0x5e, 1087 0xae, 0xa2, 0x8e, 0x59, 0x03, 0x76, 0xd5, 0xb2, 0xc9, 0x98, 0x8c, 0x4c, 0x46, 0x5d, 0xa7, 0x35,
738 0xdc, 0xfb, 0x10, 0xde, 0xf8, 0x86, 0x05, 0x94, 0x08, 0x5c, 0x6e, 0xee, 0x7c, 0x80, 0x47, 0x16, 1088 0x21, 0xbe, 0x6f, 0x8e, 0x88, 0x9f, 0xc0, 0xa2, 0x4a, 0x4f, 0x6f, 0xbd, 0x09, 0xd3, 0xba, 0xa2,
739 0x0b, 0xb8, 0x25, 0x29, 0x37, 0x65, 0x30, 0xfd, 0x90, 0xd0, 0x98, 0xa3, 0x1f, 0xa1, 0x15, 0xd3, 1089 0x0e, 0x31, 0x38, 0x2e, 0x16, 0x37, 0xde, 0xc2, 0xbd, 0x1e, 0x75, 0x58, 0x4f, 0x84, 0xf4, 0x30,
740 0x88, 0x79, 0x53, 0xf6, 0x1b, 0xf5, 0xe5, 0x26, 0x12, 0x49, 0xae, 0xa5, 0x9c, 0x2a, 0x67, 0x7b, 1090 0x82, 0xc9, 0xdb, 0x80, 0xf8, 0x0c, 0x7d, 0x05, 0x35, 0x9f, 0x78, 0xd4, 0x1c, 0xd3, 0xef, 0x88,
741 0xf8, 0x64, 0xcd, 0x6f, 0xec, 0xfc, 0x14, 0x1a, 0x31, 0x9b, 0x04, 0x1e, 0x4f, 0x22, 0xda, 0xda, 1091 0x2d, 0x16, 0x19, 0x9e, 0x88, 0xd5, 0xa4, 0x03, 0xe9, 0xb0, 0x82, 0xf7, 0xe6, 0xf1, 0xd4, 0xca,
742 0x16, 0xd2, 0x35, 0xd0, 0xf9, 0x7d, 0x1b, 0x9a, 0x65, 0x7e, 0xa7, 0xb0, 0x3b, 0xa6, 0x11, 0x67, 1092 0xff, 0x43, 0xc9, 0xa7, 0x23, 0xc7, 0x64, 0x81, 0x47, 0x6a, 0x39, 0x9e, 0x3a, 0x07, 0x1a, 0x3f,
743 0xef, 0xd8, 0xd8, 0xe3, 0x34, 0xb3, 0x28, 0x42, 0xe8, 0x2d, 0x34, 0x57, 0x61, 0x88, 0x37, 0x9d, 1093 0xe4, 0xa0, 0x9a, 0xc5, 0x77, 0x00, 0x65, 0x8b, 0x78, 0x8c, 0xbe, 0xa6, 0x96, 0xc9, 0x48, 0x44,
744 0x84, 0x11, 0xe3, 0x37, 0x33, 0xe1, 0x70, 0xd0, 0xfd, 0x52, 0xbb, 0xdb, 0x06, 0xcd, 0xc9, 0xe5, 1094 0x91, 0x84, 0xd0, 0x2b, 0xa8, 0xce, 0xca, 0x18, 0xe6, 0x78, 0xe4, 0x7a, 0x94, 0x5d, 0x4d, 0x38,
745 0x46, 0xae, 0xc6, 0x28, 0xbe, 0x83, 0xa1, 0x1f, 0xa0, 0xc1, 0xe2, 0x38, 0xa1, 0x3e, 0xf1, 0x78, 1095 0xc3, 0x66, 0xfb, 0xe3, 0xe6, 0x72, 0x1b, 0x9a, 0x5a, 0x9c, 0xae, 0xc4, 0xd9, 0x18, 0xf9, 0x4b,
746 0xab, 0x72, 0xaa, 0x9c, 0xed, 0x76, 0xdb, 0x9a, 0xec, 0xa0, 0x96, 0x77, 0x50, 0x73, 0xf3, 0x0e, 1096 0x18, 0xfa, 0x12, 0x4a, 0xd4, 0xf7, 0x03, 0x62, 0x1b, 0x26, 0xab, 0xe5, 0x0f, 0xa4, 0xc3, 0x72,
747 0xe2, 0xba, 0x14, 0x1b, 0x1c, 0xfd, 0x04, 0x20, 0x0b, 0xc3, 0x97, 0x73, 0xda, 0xaa, 0x8a, 0x44, 1097 0xbb, 0xde, 0x14, 0x1d, 0x6c, 0xc6, 0x1d, 0x6c, 0xea, 0x71, 0x07, 0x71, 0x51, 0x24, 0x2b, 0x0c,
748 0x3e, 0xdb, 0x48, 0xa4, 0x78, 0x52, 0x77, 0x39, 0xa7, 0xb8, 0xc1, 0xf3, 0xcf, 0xcb, 0x6a, 0x7d, 1098 0x7d, 0x0d, 0x20, 0x8c, 0x61, 0x37, 0x53, 0x52, 0x2b, 0x70, 0x21, 0x0f, 0x52, 0x42, 0x92, 0x3b,
749 0x47, 0xad, 0x75, 0xfe, 0x55, 0xa0, 0x75, 0xb7, 0x07, 0xf1, 0x3c, 0x0c, 0x62, 0x9a, 0x1a, 0xd0, 1099 0xd5, 0x6f, 0xa6, 0x04, 0x97, 0x58, 0xfc, 0xf3, 0xac, 0x50, 0x5c, 0x93, 0xd7, 0x1b, 0x7f, 0x49,
750 0x28, 0x0a, 0x23, 0x32, 0x0e, 0x7d, 0x59, 0x93, 0xdb, 0x06, 0xd9, 0x49, 0xcd, 0x54, 0xd5, 0x0b, 1100 0x50, 0x5b, 0xee, 0x81, 0x3f, 0x75, 0x1d, 0x9f, 0x84, 0x04, 0xc4, 0xf3, 0x5c, 0xcf, 0xb0, 0x5c,
751 0x7d, 0x8a, 0x1b, 0x34, 0xff, 0x44, 0x9f, 0xc3, 0xbe, 0xdc, 0x9d, 0x4d, 0x8f, 0x28, 0x55, 0x03, 1101 0x5b, 0x78, 0xb2, 0x48, 0x10, 0xed, 0x54, 0x0d, 0xb3, 0x3a, 0xae, 0x4d, 0x70, 0x89, 0xc4, 0x3f,
752 0xef, 0x09, 0xd0, 0x92, 0x18, 0x1a, 0xc2, 0x41, 0xde, 0x5c, 0x69, 0x9a, 0x55, 0xe0, 0xac, 0xcc, 1102 0xd1, 0x87, 0xb0, 0x21, 0x56, 0x47, 0xd3, 0xc3, 0xad, 0x2a, 0xe1, 0x0a, 0x07, 0x7b, 0x02, 0x43,
753 0xa6, 0x2c, 0x49, 0xbc, 0xcf, 0x37, 0x72, 0xfe, 0x0a, 0x1e, 0xa6, 0x9b, 0xd8, 0x98, 0x92, 0x05, 1103 0x03, 0xd8, 0x8c, 0x9b, 0x2b, 0x48, 0x23, 0x07, 0x0e, 0xb3, 0x68, 0xb2, 0x44, 0xe2, 0x0d, 0x96,
754 0x8d, 0x62, 0x16, 0x06, 0xa2, 0x32, 0x0d, 0x7c, 0x90, 0xc1, 0x3f, 0x4b, 0xb4, 0xf3, 0xa7, 0x02, 1104 0xd2, 0xfc, 0x09, 0x6c, 0x85, 0x8b, 0xa8, 0x45, 0x8c, 0x6b, 0xe2, 0xf9, 0xd4, 0x75, 0xb8, 0x33,
755 0x47, 0xa5, 0xa7, 0x2e, 0x89, 0xb0, 0x5d, 0x16, 0x01, 0xb9, 0x80, 0xd2, 0x69, 0x27, 0x1b, 0xa3, 1105 0x25, 0xbc, 0x19, 0xc1, 0x17, 0x02, 0x6d, 0xfc, 0x2a, 0xc1, 0x4e, 0xe6, 0xae, 0x33, 0x2a, 0xe4,
756 0xdd, 0x3a, 0x16, 0xf9, 0x7f, 0x51, 0x96, 0xff, 0x9b, 0x64, 0xcc, 0x8a, 0x96, 0x17, 0x5b, 0x58, 1106 0xb2, 0x2a, 0x20, 0x1d, 0x50, 0x38, 0xed, 0x46, 0x6a, 0xb4, 0x6b, 0xbb, 0x5c, 0xff, 0x47, 0x59,
757 0x9d, 0xde, 0xc2, 0x5e, 0xee, 0x15, 0xbb, 0x7a, 0x59, 0xad, 0x2b, 0xea, 0xf6, 0x65, 0xb5, 0x7e, 1107 0xfa, 0x5f, 0x06, 0x16, 0x4d, 0x52, 0x9e, 0xde, 0xc1, 0xf2, 0x78, 0x01, 0x7b, 0x56, 0x49, 0x76,
758 0xa4, 0x1e, 0x77, 0xde, 0x83, 0x7a, 0x3b, 0x42, 0x5a, 0xe4, 0x4d, 0x7b, 0x45, 0x16, 0x79, 0x56, 1108 0xf5, 0xac, 0x50, 0x94, 0xe4, 0xdc, 0x59, 0xa1, 0xb8, 0x23, 0xef, 0x36, 0xde, 0x80, 0xbc, 0x58,
759 0x14, 0x75, 0xa1, 0x46, 0x7f, 0x9d, 0xb3, 0x68, 0x29, 0x0e, 0xf2, 0xff, 0xe3, 0x95, 0x29, 0x3b, 1109 0x21, 0x34, 0x39, 0x4d, 0x2f, 0x09, 0x93, 0x27, 0xc9, 0xa4, 0x36, 0xac, 0x93, 0x6f, 0xa7, 0xd4,
760 0x7f, 0x29, 0xd0, 0x4e, 0x07, 0xa3, 0xbf, 0xba, 0xf1, 0x1b, 0xf7, 0xe5, 0x39, 0xa0, 0xec, 0x2d, 1110 0xbb, 0xe1, 0x1b, 0xf9, 0xe7, 0xf1, 0x8a, 0x32, 0x1b, 0xbf, 0x4b, 0x50, 0x0f, 0x07, 0xe3, 0x78,
761 0xa0, 0x3e, 0x61, 0x3e, 0x0d, 0x38, 0xe3, 0xcb, 0xcc, 0xfc, 0x70, 0xc5, 0x0c, 0x32, 0x02, 0x3d, 1111 0x76, 0xe2, 0x53, 0xe7, 0xe5, 0x31, 0xa0, 0xe8, 0x2e, 0x20, 0xb6, 0x41, 0x6d, 0xe2, 0x30, 0xca,
762 0x83, 0xc3, 0x85, 0x37, 0x65, 0x3e, 0xe3, 0x4b, 0xe2, 0x27, 0x91, 0x88, 0x27, 0x92, 0xa9, 0x60, 1112 0x6e, 0x22, 0xf2, 0xed, 0x59, 0xa4, 0x1b, 0x05, 0xd0, 0x23, 0xd8, 0xbe, 0x36, 0xc7, 0xd4, 0xa6,
763 0x35, 0x27, 0xfa, 0x19, 0x8e, 0xda, 0x50, 0xf7, 0x12, 0x9f, 0xd1, 0x60, 0x9c, 0x4e, 0x43, 0xe5, 1113 0xec, 0xc6, 0xb0, 0x03, 0x8f, 0xd7, 0xe3, 0x62, 0xf2, 0x58, 0x8e, 0x03, 0xc7, 0x11, 0x8e, 0xea,
764 0xac, 0x81, 0x57, 0xeb, 0x94, 0xcb, 0xba, 0x10, 0xb7, 0xaa, 0x92, 0xcb, 0xd7, 0xe8, 0x04, 0x6a, 1114 0x50, 0x34, 0x03, 0x9b, 0x12, 0xc7, 0x0a, 0xa7, 0x21, 0x7f, 0x58, 0xc2, 0xb3, 0xef, 0x30, 0x16,
765 0x69, 0x9d, 0x03, 0xde, 0xda, 0x11, 0x79, 0x64, 0xab, 0xce, 0x1f, 0x0a, 0x3c, 0x2e, 0x3d, 0x4a, 1115 0x75, 0xc1, 0xaf, 0x15, 0x44, 0x2c, 0xfe, 0x46, 0x7b, 0xb0, 0x1e, 0xfa, 0xec, 0xb0, 0xda, 0x1a,
766 0xd6, 0xf0, 0x23, 0xd8, 0x29, 0xd6, 0x4e, 0x2e, 0x50, 0x0f, 0x9a, 0xeb, 0xd7, 0x8e, 0xc4, 0xc9, 1116 0xd7, 0x11, 0x7d, 0x35, 0x7e, 0x91, 0xe0, 0x7e, 0xe6, 0x56, 0xa2, 0x86, 0xef, 0xc0, 0x5a, 0xd2,
767 0xb5, 0xd4, 0xc8, 0x0a, 0x22, 0x2d, 0x7f, 0x12, 0x35, 0x27, 0x63, 0x30, 0x5a, 0xcb, 0x73, 0xac, 1117 0x3b, 0xf1, 0x81, 0x3a, 0x50, 0x9d, 0xdf, 0x76, 0x86, 0x1f, 0x5c, 0x8a, 0x1c, 0xe1, 0x20, 0x6a,
768 0x6c, 0x96, 0x2a, 0x65, 0xb3, 0xf4, 0xf4, 0x05, 0xa0, 0xbb, 0xcf, 0x05, 0x52, 0x61, 0x6f, 0x64, 1118 0xc6, 0x57, 0x62, 0x53, 0x8b, 0x22, 0x18, 0xcd, 0xd3, 0x63, 0x2c, 0x6b, 0x96, 0xf2, 0x99, 0xd3,
769 0xbf, 0xb6, 0x87, 0x6f, 0x6d, 0x62, 0xbc, 0x39, 0x1f, 0xaa, 0x5b, 0xa8, 0x09, 0x0f, 0x9d, 0x0b, 1119 0xf8, 0x5b, 0x64, 0xf7, 0x40, 0x09, 0xd8, 0x15, 0x97, 0x77, 0xe2, 0x99, 0x0e, 0x8b, 0xed, 0x4e,
770 0xa3, 0xfb, 0xdd, 0xf7, 0x04, 0x3b, 0x86, 0x04, 0x95, 0xa7, 0x7f, 0x2b, 0xd0, 0x58, 0x5d, 0x41, 1120 0xd4, 0x31, 0x2d, 0xcb, 0x0d, 0x1c, 0x16, 0x89, 0x8d, 0xeb, 0x28, 0x02, 0x7d, 0x3f, 0xa3, 0x8f,
771 0xb4, 0x0b, 0x0f, 0x9c, 0x51, 0xaf, 0x67, 0x3a, 0x8e, 0xba, 0x85, 0x3e, 0x81, 0xe3, 0x91, 0xed, 1121 0x60, 0x9b, 0x38, 0xb6, 0x11, 0xf8, 0xc4, 0x9b, 0xf7, 0x50, 0xe8, 0xdb, 0x22, 0x8e, 0x3d, 0xf4,
772 0x8c, 0xae, 0xae, 0x86, 0xd8, 0x35, 0xfb, 0xc4, 0x19, 0x9c, 0xdb, 0x86, 0x3b, 0xc2, 0xa6, 0xaa, 1122 0x89, 0x37, 0xeb, 0xe0, 0xdc, 0xdc, 0x42, 0xca, 0xdc, 0x9f, 0x22, 0x73, 0x97, 0x84, 0x47, 0xe6,
773 0xa0, 0x36, 0x9c, 0x14, 0x29, 0x77, 0xf8, 0xda, 0xb4, 0x89, 0xfb, 0xcb, 0x95, 0xa9, 0x6e, 0xa3, 1123 0xee, 0x43, 0x79, 0x14, 0x02, 0xa9, 0xf1, 0x04, 0x0e, 0xfd, 0xeb, 0xe1, 0xbc, 0xbd, 0xad, 0x3f,
774 0x43, 0xd8, 0x7f, 0x69, 0xf4, 0x89, 0x3b, 0xb0, 0x4c, 0xc7, 0x35, 0xac, 0x2b, 0xb5, 0x92, 0xca, 1124 0x4a, 0xf0, 0x20, 0xad, 0xee, 0x82, 0x9a, 0x29, 0x67, 0xdf, 0xa9, 0xef, 0x21, 0x54, 0xdc, 0xf0,
775 0x53, 0xa8, 0x67, 0x62, 0x77, 0xf0, 0x6a, 0xd0, 0x33, 0x5c, 0x93, 0xbc, 0x1a, 0x62, 0xcb, 0x70, 1125 0x3d, 0x34, 0x7c, 0xcb, 0x9d, 0x12, 0xbf, 0x96, 0xe3, 0x53, 0x57, 0xe6, 0x98, 0xc6, 0x21, 0xd4,
776 0xd5, 0x6a, 0x2e, 0x5f, 0x47, 0xdf, 0x91, 0xc6, 0x2e, 0x1e, 0x39, 0x69, 0xec, 0xc2, 0x26, 0xb5, 1126 0x86, 0xdd, 0x09, 0x75, 0x8c, 0x65, 0xe3, 0xf3, 0xdc, 0xf8, 0xea, 0x84, 0x3a, 0x17, 0x0b, 0xde,
777 0x86, 0x1e, 0x41, 0x53, 0x04, 0x17, 0x86, 0x06, 0x3e, 0x1f, 0x59, 0xa6, 0xed, 0x3a, 0xea, 0x03, 1127 0x37, 0x7e, 0x96, 0xe0, 0x83, 0x55, 0xca, 0x22, 0xeb, 0x1e, 0x42, 0xc5, 0xb4, 0x2c, 0xe2, 0xfb,
778 0xf4, 0x04, 0x1e, 0x5b, 0x46, 0xef, 0x62, 0x60, 0x9b, 0x19, 0x69, 0x0d, 0x6c, 0x77, 0x60, 0x9f, 1128 0x29, 0x6d, 0x65, 0x81, 0xfd, 0xf7, 0xe6, 0x1d, 0x3d, 0x05, 0xb4, 0xfc, 0x84, 0x21, 0x19, 0x2a,
779 0x13, 0x13, 0xe3, 0x21, 0x56, 0xeb, 0xdd, 0x7f, 0x14, 0xd8, 0x15, 0xbd, 0xb3, 0xc4, 0x85, 0x42, 1129 0xc3, 0xfe, 0x8b, 0xfe, 0xe0, 0x55, 0xdf, 0x50, 0x5e, 0x9e, 0x0c, 0xe4, 0x3b, 0xa8, 0x0a, 0x5b,
780 0x33, 0x50, 0x6f, 0x3f, 0x5e, 0xe8, 0x59, 0xe9, 0xcb, 0x51, 0xfe, 0x37, 0xd3, 0xfe, 0xfa, 0x7e, 1130 0xda, 0xa9, 0xd2, 0xfe, 0xfc, 0x0b, 0x03, 0x6b, 0x8a, 0x00, 0xa5, 0xa3, 0x3f, 0x24, 0x28, 0xcd,
781 0xe2, 0x6c, 0x50, 0x16, 0xd0, 0x2c, 0x99, 0x23, 0xa4, 0x7d, 0x2c, 0x48, 0xf9, 0xdd, 0x69, 0xeb, 1131 0x9e, 0x05, 0x54, 0x86, 0xbb, 0xda, 0xb0, 0xd3, 0x51, 0x35, 0x4d, 0xbe, 0x83, 0xfe, 0x07, 0xbb,
782 0xf7, 0xd6, 0x4b, 0xdf, 0xeb, 0x9a, 0xb8, 0xa7, 0xdf, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x24, 1132 0xc3, 0xbe, 0x36, 0x3c, 0x3f, 0x1f, 0x60, 0x5d, 0x3d, 0x36, 0xb4, 0xee, 0x49, 0x5f, 0xd1, 0x87,
783 0xdc, 0xe5, 0x43, 0x32, 0x08, 0x00, 0x00, 1133 0x58, 0x95, 0x25, 0x54, 0x87, 0xbd, 0x64, 0x48, 0x1f, 0xbc, 0x50, 0xfb, 0x86, 0xfe, 0xcd, 0xb9,
1134 0x2a, 0xe7, 0xd0, 0x36, 0x6c, 0x3c, 0x53, 0x8e, 0x0d, 0xbd, 0xdb, 0x53, 0x35, 0x5d, 0xe9, 0x9d,
1135 0xcb, 0xf9, 0x30, 0x3d, 0x84, 0x3a, 0x2a, 0xd6, 0xbb, 0xcf, 0xbb, 0x1d, 0x45, 0x57, 0x8d, 0xe7,
1136 0x03, 0xdc, 0x53, 0x74, 0xb9, 0x10, 0xa7, 0xcf, 0xab, 0xaf, 0x09, 0x62, 0x1d, 0x0f, 0xb5, 0xb0,
1137 0x76, 0x62, 0x91, 0xbc, 0x8e, 0xee, 0x41, 0x95, 0x17, 0xe7, 0x84, 0x0a, 0x3e, 0x19, 0xf6, 0xd4,
1138 0xbe, 0xae, 0xc9, 0x77, 0xd1, 0x3e, 0xdc, 0xef, 0x29, 0x9d, 0xd3, 0x6e, 0x5f, 0x8d, 0x82, 0xbd,
1139 0x6e, 0x5f, 0xef, 0xf6, 0x4f, 0x0c, 0x15, 0xe3, 0x01, 0x96, 0x8b, 0xed, 0x3f, 0xf3, 0x50, 0xe6,
1140 0xcd, 0xe8, 0xf1, 0x4b, 0x1e, 0x4d, 0x40, 0x5e, 0x7c, 0x50, 0xd1, 0xa3, 0xcc, 0xd7, 0x2c, 0xfb,
1141 0x5f, 0x9f, 0xfa, 0xa7, 0xb7, 0x4b, 0x8e, 0x86, 0xe4, 0x1a, 0xaa, 0x19, 0x77, 0x1b, 0x6a, 0xae,
1142 0x2a, 0x92, 0x7d, 0x9f, 0xd7, 0x5b, 0xb7, 0xce, 0x4f, 0xf3, 0x2e, 0x1c, 0xfb, 0xd5, 0xbc, 0xd9,
1143 0x17, 0xdb, 0x6a, 0xde, 0x55, 0xf7, 0xc9, 0xf7, 0xb0, 0x97, 0x7d, 0x6c, 0xd0, 0x93, 0x77, 0x97,
1144 0x5a, 0x38, 0xfc, 0xf5, 0xf6, 0xfb, 0x2c, 0x11, 0x02, 0x2e, 0xd7, 0xf9, 0xd1, 0xfa, 0xec, 0xef,
1145 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x07, 0xeb, 0xf4, 0xbf, 0x0b, 0x00, 0x00,
784 } 1146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698