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

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: Created 3 years, 8 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. 1 // Code generated by protoc-gen-go.
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 // DO NOT EDIT! 3 // DO NOT EDIT!
4 4
5 /* 5 /*
6 Package minter is a generated protocol buffer package. 6 Package minter is a generated protocol buffer package.
7 7
8 It is generated from these files: 8 It is generated from these files:
9 github.com/luci/luci-go/tokenserver/api/minter/v1/token_minter.proto 9 github.com/luci/luci-go/tokenserver/api/minter/v1/token_minter.proto
10 10
11 It has these top-level messages: 11 It has these top-level messages:
12 MintMachineTokenRequest 12 MintMachineTokenRequest
13 MachineTokenRequest 13 MachineTokenRequest
14 MintMachineTokenResponse 14 MintMachineTokenResponse
15 MachineTokenResponse 15 MachineTokenResponse
16 LuciMachineToken 16 LuciMachineToken
17 MintDelegationTokenRequest 17 MintDelegationTokenRequest
18 MintDelegationTokenResponse 18 MintDelegationTokenResponse
19 MintOAuthTokenGrantRequest
20 MintOAuthTokenGrantResponse
21 MintOAuthTokenViaGrantRequest
22 MintOAuthTokenViaGrantResponse
19 */ 23 */
20 package minter 24 package minter
21 25
22 import prpc "github.com/luci/luci-go/grpc/prpc" 26 import prpc "github.com/luci/luci-go/grpc/prpc"
23 27
24 import proto "github.com/golang/protobuf/proto" 28 import proto "github.com/golang/protobuf/proto"
25 import fmt "fmt" 29 import fmt "fmt"
26 import math "math" 30 import math "math"
27 import google_protobuf "github.com/golang/protobuf/ptypes/timestamp" 31 import google_protobuf "github.com/golang/protobuf/ptypes/timestamp"
28 import messages "github.com/luci/luci-go/server/auth/delegation/messages" 32 import messages "github.com/luci/luci-go/server/auth/delegation/messages"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 return nil 194 return nil
191 } 195 }
192 196
193 func (m *MachineTokenRequest) GetTokenType() tokenserver.MachineTokenType { 197 func (m *MachineTokenRequest) GetTokenType() tokenserver.MachineTokenType {
194 if m != nil { 198 if m != nil {
195 return m.TokenType 199 return m.TokenType
196 } 200 }
197 return tokenserver.MachineTokenType_UNKNOWN_TYPE 201 return tokenserver.MachineTokenType_UNKNOWN_TYPE
198 } 202 }
199 203
200 // MintMachineTokenResponse is returned by 'MintMachineToken' if the server 204 // MintMachineTokenResponse is returned by MintMachineToken if the server
201 // processed the request. 205 // processed the request.
202 // 206 //
203 // It's returned even if server refuses to mint a token. It contains the error 207 // It's returned even if server refuses to mint a token. It contains the error
204 // details in that case. 208 // details in that case.
205 type MintMachineTokenResponse struct { 209 type MintMachineTokenResponse struct {
206 // Possible kinds of fatal errors. 210 // Possible kinds of fatal errors.
207 // 211 //
208 // Non fatal errors are returned as grpc.Internal errors instead. 212 // Non fatal errors are returned as grpc.Internal errors instead.
209 ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCo de,enum=tokenserver.minter.ErrorCode" json:"error_code,omitempty"` 213 ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCo de,enum=tokenserver.minter.ErrorCode" json:"error_code,omitempty"`
210 // Optional detailed error message. 214 // Optional detailed error message.
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 return nil 474 return nil
471 } 475 }
472 476
473 func (m *MintDelegationTokenRequest) GetIntent() string { 477 func (m *MintDelegationTokenRequest) GetIntent() string {
474 if m != nil { 478 if m != nil {
475 return m.Intent 479 return m.Intent
476 } 480 }
477 return "" 481 return ""
478 } 482 }
479 483
480 // MintDelegationTokenResponse is returned by 'MintDelegationToken' on success. 484 // MintDelegationTokenResponse is returned by MintDelegationToken on success.
481 // 485 //
482 // Errors are returned via standard gRPC codes. 486 // Errors are returned via standard gRPC codes.
483 type MintDelegationTokenResponse struct { 487 type MintDelegationTokenResponse struct {
484 // The actual base64-encoded signed token. 488 // The actual base64-encoded signed token.
485 Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` 489 Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
486 // Same data as in 'token' in deserialized form, just for convenience. 490 // Same data as in 'token' in deserialized form, just for convenience.
487 // 491 //
488 // Mostly for JSON encoding users, since they may not understand proto-e ncoded 492 // Mostly for JSON encoding users, since they may not understand proto-e ncoded
489 // tokens. 493 // tokens.
490 DelegationSubtoken *messages.Subtoken `protobuf:"bytes,2,opt,name=delega tion_subtoken,json=delegationSubtoken" json:"delegation_subtoken,omitempty"` 494 DelegationSubtoken *messages.Subtoken `protobuf:"bytes,2,opt,name=delega tion_subtoken,json=delegationSubtoken" json:"delegation_subtoken,omitempty"`
491 // Identifier of the service and its version that produced the token. 495 // Identifier of the service and its version that produced the token.
492 // 496 //
493 // Has the form "<app-id>/<module-version>". This is _not_ part of the t oken. 497 // Has the form "<app-id>/<module-version>". This is _not_ part of the t oken.
498 // Used only for logging and monitoring.
494 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"` 499 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"`
495 } 500 }
496 501
497 func (m *MintDelegationTokenResponse) Reset() { *m = MintDele gationTokenResponse{} } 502 func (m *MintDelegationTokenResponse) Reset() { *m = MintDele gationTokenResponse{} }
498 func (m *MintDelegationTokenResponse) String() string { return proto. CompactTextString(m) } 503 func (m *MintDelegationTokenResponse) String() string { return proto. CompactTextString(m) }
499 func (*MintDelegationTokenResponse) ProtoMessage() {} 504 func (*MintDelegationTokenResponse) ProtoMessage() {}
500 func (*MintDelegationTokenResponse) Descriptor() ([]byte, []int) { return fileDe scriptor0, []int{6} } 505 func (*MintDelegationTokenResponse) Descriptor() ([]byte, []int) { return fileDe scriptor0, []int{6} }
501 506
502 func (m *MintDelegationTokenResponse) GetToken() string { 507 func (m *MintDelegationTokenResponse) GetToken() string {
503 if m != nil { 508 if m != nil {
504 return m.Token 509 return m.Token
505 } 510 }
506 return "" 511 return ""
507 } 512 }
508 513
509 func (m *MintDelegationTokenResponse) GetDelegationSubtoken() *messages.Subtoken { 514 func (m *MintDelegationTokenResponse) GetDelegationSubtoken() *messages.Subtoken {
510 if m != nil { 515 if m != nil {
511 return m.DelegationSubtoken 516 return m.DelegationSubtoken
512 } 517 }
513 return nil 518 return nil
514 } 519 }
515 520
516 func (m *MintDelegationTokenResponse) GetServiceVersion() string { 521 func (m *MintDelegationTokenResponse) GetServiceVersion() string {
517 if m != nil { 522 if m != nil {
518 return m.ServiceVersion 523 return m.ServiceVersion
519 } 524 }
520 return "" 525 return ""
521 } 526 }
522 527
528 // MintOAuthTokenGrantRequest is passed to MintOAuthTokenGrant.
529 //
530 // Additional implicit field is the identity of whoever makes this call. It
531 // becomes 'wielder_identity' of the generated token.
532 type MintOAuthTokenGrantRequest struct {
533 // Service account identity the end user wants to act as.
534 //
535 // A string of the form "user:<email>".
536 //
537 // Required.
538 ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=s erviceAccount" json:"service_account,omitempty"`
539 // How long the generated grant should be considered valid (in seconds).
540 //
541 // Default is 3600 sec.
542 ValidityDuration int64 `protobuf:"varint,2,opt,name=validity_duration,js on=validityDuration" json:"validity_duration,omitempty"`
543 // An end user that wants to act as the service account (perhaps indirec tly).
544 //
545 // A string of the form "user:<email>". On Swarming, this is an identity of
546 // a user that posted the task.
547 //
548 // TODO(vadimsh): Verify that this user is present during MintOAuthToken Grant
549 // RPC by requiring the end user's credentials, e.g make Swarming forwar d
550 // user's OAuth token to the token server, where it can be validated.
551 //
552 // Required.
553 EndUserIdentity string `protobuf:"bytes,3,opt,name=end_user_identity,jso n=endUserIdentity" json:"end_user_identity,omitempty"`
554 // Optional reason why the grant is created.
555 //
556 // Used only for logging and auditing purposes. Doesn't become part of t he
557 // grant.
558 Intent string `protobuf:"bytes,4,opt,name=intent" json:"intent,omitempty "`
559 }
560
561 func (m *MintOAuthTokenGrantRequest) Reset() { *m = MintOAuth TokenGrantRequest{} }
562 func (m *MintOAuthTokenGrantRequest) String() string { return proto.C ompactTextString(m) }
563 func (*MintOAuthTokenGrantRequest) ProtoMessage() {}
564 func (*MintOAuthTokenGrantRequest) Descriptor() ([]byte, []int) { return fileDes criptor0, []int{7} }
565
566 func (m *MintOAuthTokenGrantRequest) GetServiceAccount() string {
567 if m != nil {
568 return m.ServiceAccount
569 }
570 return ""
571 }
572
573 func (m *MintOAuthTokenGrantRequest) GetValidityDuration() int64 {
574 if m != nil {
575 return m.ValidityDuration
576 }
577 return 0
578 }
579
580 func (m *MintOAuthTokenGrantRequest) GetEndUserIdentity() string {
581 if m != nil {
582 return m.EndUserIdentity
583 }
584 return ""
585 }
586
587 func (m *MintOAuthTokenGrantRequest) GetIntent() string {
588 if m != nil {
589 return m.Intent
590 }
591 return ""
592 }
593
594 // MintOAuthTokenGrantResponse is returned by MintOAuthTokenGrant.
595 type MintOAuthTokenGrantResponse struct {
596 GrantToken string `protobuf:"bytes,1,opt,name=grant_ token,json=grantToken" json:"grant_token,omitempty"`
597 Expiry *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=expiry " json:"expiry,omitempty"`
598 // Identifier of the service and its version that produced the token.
599 //
600 // Has the form "<app-id>/<module-version>". This is _not_ part of the t oken.
601 // Used only for logging and monitoring.
602 ServiceVersion string `protobuf:"bytes,3,opt,name=service_version,json=s erviceVersion" json:"service_version,omitempty"`
603 }
604
605 func (m *MintOAuthTokenGrantResponse) Reset() { *m = MintOAut hTokenGrantResponse{} }
606 func (m *MintOAuthTokenGrantResponse) String() string { return proto. CompactTextString(m) }
607 func (*MintOAuthTokenGrantResponse) ProtoMessage() {}
608 func (*MintOAuthTokenGrantResponse) Descriptor() ([]byte, []int) { return fileDe scriptor0, []int{8} }
609
610 func (m *MintOAuthTokenGrantResponse) GetGrantToken() string {
611 if m != nil {
612 return m.GrantToken
613 }
614 return ""
615 }
616
617 func (m *MintOAuthTokenGrantResponse) GetExpiry() *google_protobuf.Timestamp {
618 if m != nil {
619 return m.Expiry
620 }
621 return nil
622 }
623
624 func (m *MintOAuthTokenGrantResponse) GetServiceVersion() string {
625 if m != nil {
626 return m.ServiceVersion
627 }
628 return ""
629 }
630
631 // MintOAuthTokenViaGrantRequest is passed to MintOAuthTokenViaGrant.
632 //
633 // Additional implicit field is the identity of whoever makes this call. It is
634 // compared against 'wielder_identity' inside the token.
635 type MintOAuthTokenViaGrantRequest struct {
636 // A previously generated grant, as returned by MintOAuthTokenGrant.
637 GrantToken string `protobuf:"bytes,1,opt,name=grant_token,json=grantToke n" json:"grant_token,omitempty"`
638 // The list of OAuth scopes the access token should have.
639 //
640 // The server may reject the request if some scopes are not allowed.
641 OauthScopes []string `protobuf:"bytes,2,rep,name=oauth_scopes,json=oauth Scopes" json:"oauth_scopes,omitempty"`
642 // Minimally accepted validity duration of the returned OAuth token (sec onds).
643 //
644 // The server may return a token that lives longer than this. The maximu m is
645 // 1h. An attempt to get a token that lives longer will result in a erro r.
646 //
647 // The returned token validity duration doesn't not depend on the lifeti me of
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 3600 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
523 func init() { 718 func init() {
524 proto.RegisterType((*MintMachineTokenRequest)(nil), "tokenserver.minter. MintMachineTokenRequest") 719 proto.RegisterType((*MintMachineTokenRequest)(nil), "tokenserver.minter. MintMachineTokenRequest")
525 proto.RegisterType((*MachineTokenRequest)(nil), "tokenserver.minter.Mach ineTokenRequest") 720 proto.RegisterType((*MachineTokenRequest)(nil), "tokenserver.minter.Mach ineTokenRequest")
526 proto.RegisterType((*MintMachineTokenResponse)(nil), "tokenserver.minter .MintMachineTokenResponse") 721 proto.RegisterType((*MintMachineTokenResponse)(nil), "tokenserver.minter .MintMachineTokenResponse")
527 proto.RegisterType((*MachineTokenResponse)(nil), "tokenserver.minter.Mac hineTokenResponse") 722 proto.RegisterType((*MachineTokenResponse)(nil), "tokenserver.minter.Mac hineTokenResponse")
528 proto.RegisterType((*LuciMachineToken)(nil), "tokenserver.minter.LuciMac hineToken") 723 proto.RegisterType((*LuciMachineToken)(nil), "tokenserver.minter.LuciMac hineToken")
529 proto.RegisterType((*MintDelegationTokenRequest)(nil), "tokenserver.mint er.MintDelegationTokenRequest") 724 proto.RegisterType((*MintDelegationTokenRequest)(nil), "tokenserver.mint er.MintDelegationTokenRequest")
530 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")
531 proto.RegisterEnum("tokenserver.minter.SignatureAlgorithm", SignatureAlg orithm_name, SignatureAlgorithm_value) 730 proto.RegisterEnum("tokenserver.minter.SignatureAlgorithm", SignatureAlg orithm_name, SignatureAlgorithm_value)
532 proto.RegisterEnum("tokenserver.minter.ErrorCode", ErrorCode_name, Error Code_value) 731 proto.RegisterEnum("tokenserver.minter.ErrorCode", ErrorCode_name, Error Code_value)
533 } 732 }
534 733
535 // Reference imports to suppress errors if they are not otherwise used. 734 // Reference imports to suppress errors if they are not otherwise used.
536 var _ context.Context 735 var _ context.Context
537 var _ grpc.ClientConn 736 var _ grpc.ClientConn
538 737
539 // 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
540 // 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
566 // the token): 765 // the token):
567 // * They have expiration time. 766 // * They have expiration time.
568 // * 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
569 // the 'audience' list. 768 // the 'audience' list.
570 // * They are usable only on services specified in the 'services' list . 769 // * They are usable only on services specified in the 'services' list .
571 // 770 //
572 // The token server must be configured in advance with all expected 771 // The token server must be configured in advance with all expected
573 // combinations of (caller identity, delegated identity, audience, servi ce) 772 // combinations of (caller identity, delegated identity, audience, servi ce)
574 // tuples. See DelegationRule in config.proto. 773 // tuples. See DelegationRule in config.proto.
575 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)
576 } 810 }
577 type tokenMinterPRPCClient struct { 811 type tokenMinterPRPCClient struct {
578 client *prpc.Client 812 client *prpc.Client
579 } 813 }
580 814
581 func NewTokenMinterPRPCClient(client *prpc.Client) TokenMinterClient { 815 func NewTokenMinterPRPCClient(client *prpc.Client) TokenMinterClient {
582 return &tokenMinterPRPCClient{client} 816 return &tokenMinterPRPCClient{client}
583 } 817 }
584 818
585 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) {
586 out := new(MintMachineTokenResponse) 820 out := new(MintMachineTokenResponse)
587 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...)
588 if err != nil { 822 if err != nil {
589 return nil, err 823 return nil, err
590 } 824 }
591 return out, nil 825 return out, nil
592 } 826 }
593 827
594 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) {
595 out := new(MintDelegationTokenResponse) 829 out := new(MintDelegationTokenResponse)
596 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...)
597 if err != nil { 831 if err != nil {
598 return nil, err 832 return nil, err
599 } 833 }
600 return out, nil 834 return out, nil
601 } 835 }
602 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
603 type tokenMinterClient struct { 855 type tokenMinterClient struct {
604 cc *grpc.ClientConn 856 cc *grpc.ClientConn
605 } 857 }
606 858
607 func NewTokenMinterClient(cc *grpc.ClientConn) TokenMinterClient { 859 func NewTokenMinterClient(cc *grpc.ClientConn) TokenMinterClient {
608 return &tokenMinterClient{cc} 860 return &tokenMinterClient{cc}
609 } 861 }
610 862
611 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) {
612 out := new(MintMachineTokenResponse) 864 out := new(MintMachineTokenResponse)
613 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...)
614 if err != nil { 866 if err != nil {
615 return nil, err 867 return nil, err
616 } 868 }
617 return out, nil 869 return out, nil
618 } 870 }
619 871
620 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) {
621 out := new(MintDelegationTokenResponse) 873 out := new(MintDelegationTokenResponse)
622 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...)
623 if err != nil { 875 if err != nil {
624 return nil, err 876 return nil, err
625 } 877 }
626 return out, nil 878 return out, nil
627 } 879 }
628 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
629 // Server API for TokenMinter service 899 // Server API for TokenMinter service
630 900
631 type TokenMinterServer interface { 901 type TokenMinterServer interface {
632 // MintMachineToken generates a new token for an authenticated machine. 902 // MintMachineToken generates a new token for an authenticated machine.
633 // 903 //
634 // 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
635 // 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
636 // 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
637 // that the caller is authorized to generate requested kind of token. 907 // that the caller is authorized to generate requested kind of token.
638 // 908 //
(...skipping 13 matching lines...) Expand all
652 // the token): 922 // the token):
653 // * They have expiration time. 923 // * They have expiration time.
654 // * 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
655 // the 'audience' list. 925 // the 'audience' list.
656 // * They are usable only on services specified in the 'services' list . 926 // * They are usable only on services specified in the 'services' list .
657 // 927 //
658 // The token server must be configured in advance with all expected 928 // The token server must be configured in advance with all expected
659 // combinations of (caller identity, delegated identity, audience, servi ce) 929 // combinations of (caller identity, delegated identity, audience, servi ce)
660 // tuples. See DelegationRule in config.proto. 930 // tuples. See DelegationRule in config.proto.
661 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)
662 } 967 }
663 968
664 func RegisterTokenMinterServer(s prpc.Registrar, srv TokenMinterServer) { 969 func RegisterTokenMinterServer(s prpc.Registrar, srv TokenMinterServer) {
665 s.RegisterService(&_TokenMinter_serviceDesc, srv) 970 s.RegisterService(&_TokenMinter_serviceDesc, srv)
666 } 971 }
667 972
668 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) {
669 in := new(MintMachineTokenRequest) 974 in := new(MintMachineTokenRequest)
670 if err := dec(in); err != nil { 975 if err := dec(in); err != nil {
671 return nil, err 976 return nil, err
(...skipping 22 matching lines...) Expand all
694 info := &grpc.UnaryServerInfo{ 999 info := &grpc.UnaryServerInfo{
695 Server: srv, 1000 Server: srv,
696 FullMethod: "/tokenserver.minter.TokenMinter/MintDelegationToken ", 1001 FullMethod: "/tokenserver.minter.TokenMinter/MintDelegationToken ",
697 } 1002 }
698 handler := func(ctx context.Context, req interface{}) (interface{}, erro r) { 1003 handler := func(ctx context.Context, req interface{}) (interface{}, erro r) {
699 return srv.(TokenMinterServer).MintDelegationToken(ctx, req.(*Mi ntDelegationTokenRequest)) 1004 return srv.(TokenMinterServer).MintDelegationToken(ctx, req.(*Mi ntDelegationTokenRequest))
700 } 1005 }
701 return interceptor(ctx, in, info, handler) 1006 return interceptor(ctx, in, info, handler)
702 } 1007 }
703 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
704 var _TokenMinter_serviceDesc = grpc.ServiceDesc{ 1045 var _TokenMinter_serviceDesc = grpc.ServiceDesc{
705 ServiceName: "tokenserver.minter.TokenMinter", 1046 ServiceName: "tokenserver.minter.TokenMinter",
706 HandlerType: (*TokenMinterServer)(nil), 1047 HandlerType: (*TokenMinterServer)(nil),
707 Methods: []grpc.MethodDesc{ 1048 Methods: []grpc.MethodDesc{
708 { 1049 {
709 MethodName: "MintMachineToken", 1050 MethodName: "MintMachineToken",
710 Handler: _TokenMinter_MintMachineToken_Handler, 1051 Handler: _TokenMinter_MintMachineToken_Handler,
711 }, 1052 },
712 { 1053 {
713 MethodName: "MintDelegationToken", 1054 MethodName: "MintDelegationToken",
714 Handler: _TokenMinter_MintDelegationToken_Handler, 1055 Handler: _TokenMinter_MintDelegationToken_Handler,
715 }, 1056 },
1057 {
1058 MethodName: "MintOAuthTokenGrant",
1059 Handler: _TokenMinter_MintOAuthTokenGrant_Handler,
1060 },
1061 {
1062 MethodName: "MintOAuthTokenViaGrant",
1063 Handler: _TokenMinter_MintOAuthTokenViaGrant_Handler,
1064 },
716 }, 1065 },
717 Streams: []grpc.StreamDesc{}, 1066 Streams: []grpc.StreamDesc{},
718 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",
719 } 1068 }
720 1069
721 func init() { 1070 func init() {
722 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)
723 } 1072 }
724 1073
725 var fileDescriptor0 = []byte{ 1074 var fileDescriptor0 = []byte{
726 // 919 bytes of a gzipped FileDescriptorProto 1075 // 1117 bytes of a gzipped FileDescriptorProto
727 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,
728 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,
729 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,
730 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,
731 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,
732 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,
733 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,
734 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,
735 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,
736 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,
737 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,
738 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,
739 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,
740 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,
741 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,
742 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,
743 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,
744 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,
745 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,
746 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,
747 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,
748 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,
749 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,
750 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,
751 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,
752 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,
753 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,
754 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,
755 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,
756 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,
757 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,
758 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,
759 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,
760 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,
761 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,
762 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,
763 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,
764 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,
765 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,
766 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,
767 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,
768 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,
769 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,
770 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,
771 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,
772 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,
773 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,
774 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,
775 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,
776 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,
777 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,
778 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,
779 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,
780 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,
781 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,
782 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,
783 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,
784 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,
785 } 1146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698