chore(deps): bump google.golang.org/api from 0.138.0 to 0.139.0 (#2741)
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.138.0 to 0.139.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.138.0...v0.139.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
parent
0097615ec7
commit
cc38a0a6e6
6
go.mod
6
go.mod
|
|
@ -149,7 +149,7 @@ require (
|
||||||
golang.org/x/text v0.13.0 // indirect
|
golang.org/x/text v0.13.0 // indirect
|
||||||
golang.org/x/time v0.1.0 // indirect
|
golang.org/x/time v0.1.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||||
google.golang.org/api v0.138.0
|
google.golang.org/api v0.139.0
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
|
google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
|
||||||
google.golang.org/grpc v1.57.0 // indirect
|
google.golang.org/grpc v1.57.0 // indirect
|
||||||
|
|
@ -165,7 +165,7 @@ require (
|
||||||
github.com/cloudflare/circl v1.3.3 // indirect
|
github.com/cloudflare/circl v1.3.3 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/google/s2a-go v0.1.5 // indirect
|
github.com/google/s2a-go v0.1.7 // indirect
|
||||||
github.com/google/subcommands v1.2.0 // indirect
|
github.com/google/subcommands v1.2.0 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/magiconair/properties v1.8.5 // indirect
|
github.com/magiconair/properties v1.8.5 // indirect
|
||||||
|
|
@ -180,7 +180,7 @@ require (
|
||||||
github.com/subosito/gotenv v1.2.0 // indirect
|
github.com/subosito/gotenv v1.2.0 // indirect
|
||||||
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230807174057-1744710a1577 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
|
||||||
gopkg.in/ini.v1 v1.62.0 // indirect
|
gopkg.in/ini.v1 v1.62.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
21
go.sum
21
go.sum
|
|
@ -193,10 +193,6 @@ github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUK
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
|
|
||||||
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
|
||||||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
|
||||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
|
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
|
||||||
github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
|
github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
|
||||||
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
|
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
|
||||||
|
|
@ -256,7 +252,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
|
||||||
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
|
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||||
|
|
@ -375,8 +370,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe
|
||||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/s2a-go v0.1.5 h1:8IYp3w9nysqv3JH+NJgXJzGbDHzLOTj43BmSkp+O7qg=
|
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
||||||
github.com/google/s2a-go v0.1.5/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
|
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||||
github.com/google/slowjam v1.0.1 h1:RrR0qrKELIC1iv7r1FgbtohxDl6QytIj67B9brpgrdg=
|
github.com/google/slowjam v1.0.1 h1:RrR0qrKELIC1iv7r1FgbtohxDl6QytIj67B9brpgrdg=
|
||||||
github.com/google/slowjam v1.0.1/go.mod h1:13Ws7TkS56WroVpQFout67W7EjTn+VUVhKxJqPgopWg=
|
github.com/google/slowjam v1.0.1/go.mod h1:13Ws7TkS56WroVpQFout67W7EjTn+VUVhKxJqPgopWg=
|
||||||
github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=
|
github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=
|
||||||
|
|
@ -674,7 +669,6 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
|
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
|
||||||
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
|
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
|
||||||
|
|
@ -692,7 +686,6 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh
|
||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||||
|
|
@ -915,7 +908,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
|
|
@ -1012,8 +1004,8 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
|
||||||
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
|
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
|
||||||
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
|
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
|
||||||
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
|
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
|
||||||
google.golang.org/api v0.138.0 h1:K/tVp05MxNVbHShRw9m7e9VJGdagNeTdMzqPH7AUqr0=
|
google.golang.org/api v0.139.0 h1:A1TrCPgMmOiYu0AiNkvQIpIx+D8blHTDcJ5EogkP7LI=
|
||||||
google.golang.org/api v0.138.0/go.mod h1:4xyob8CxC+0GChNBvEUAk8VBKNvYOTWM9T3v3UfRxuY=
|
google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
|
@ -1069,8 +1061,8 @@ google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWof
|
||||||
google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
|
google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 h1:nIgk/EEq3/YlnmVVXVnm14rC2oxgs1o0ong4sD/rd44=
|
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 h1:nIgk/EEq3/YlnmVVXVnm14rC2oxgs1o0ong4sD/rd44=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
|
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230807174057-1744710a1577 h1:wukfNtZmZUurLN/atp2hiIeTKn7QJWIQdHzqmsOnAOk=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230807174057-1744710a1577/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
|
@ -1091,7 +1083,6 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
|
||||||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||||
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||||
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||||
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
|
|
||||||
google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
|
google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
|
||||||
google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
|
google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,5 @@ Session Agent during the TLS handshake, and to encrypt traffic to the peer
|
||||||
after the TLS handshake is complete.
|
after the TLS handshake is complete.
|
||||||
|
|
||||||
This repository contains the source code for the Secure Session Agent's Go
|
This repository contains the source code for the Secure Session Agent's Go
|
||||||
client libraries, which allow gRPC-Go applications to use the Secure Session
|
client libraries, which allow gRPC and HTTP Go applications to use the Secure Session
|
||||||
Agent. This repository supports the Bazel and Golang build systems.
|
Agent.
|
||||||
|
|
||||||
All code in this repository is experimental and subject to change. We do not
|
|
||||||
guarantee API stability at this time.
|
|
||||||
|
|
|
||||||
|
|
@ -21,50 +21,27 @@ package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
|
||||||
|
|
||||||
"google.golang.org/appengine"
|
|
||||||
"google.golang.org/appengine/socket"
|
|
||||||
grpc "google.golang.org/grpc"
|
grpc "google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/credentials"
|
||||||
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
)
|
)
|
||||||
|
|
||||||
// An environment variable, if true, opportunistically use AppEngine-specific dialer to call S2A.
|
|
||||||
const enableAppEngineDialerEnv = "S2A_ENABLE_APP_ENGINE_DIALER"
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// appEngineDialerHook is an AppEngine-specific dial option that is set
|
|
||||||
// during init time. If nil, then the application is not running on Google
|
|
||||||
// AppEngine.
|
|
||||||
appEngineDialerHook func(context.Context) grpc.DialOption
|
|
||||||
// mu guards hsConnMap and hsDialer.
|
// mu guards hsConnMap and hsDialer.
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
// hsConnMap represents a mapping from an S2A handshaker service address
|
// hsConnMap represents a mapping from an S2A handshaker service address
|
||||||
// to a corresponding connection to an S2A handshaker service instance.
|
// to a corresponding connection to an S2A handshaker service instance.
|
||||||
hsConnMap = make(map[string]*grpc.ClientConn)
|
hsConnMap = make(map[string]*grpc.ClientConn)
|
||||||
// hsDialer will be reassigned in tests.
|
// hsDialer will be reassigned in tests.
|
||||||
hsDialer = grpc.Dial
|
hsDialer = grpc.DialContext
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
|
||||||
if !appengine.IsAppEngine() && !appengine.IsDevAppServer() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
appEngineDialerHook = func(ctx context.Context) grpc.DialOption {
|
|
||||||
return grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
|
|
||||||
return socket.DialTimeout(ctx, "tcp", addr, timeout)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dial dials the S2A handshaker service. If a connection has already been
|
// Dial dials the S2A handshaker service. If a connection has already been
|
||||||
// established, this function returns it. Otherwise, a new connection is
|
// established, this function returns it. Otherwise, a new connection is
|
||||||
// created.
|
// created.
|
||||||
func Dial(handshakerServiceAddress string) (*grpc.ClientConn, error) {
|
func Dial(ctx context.Context, handshakerServiceAddress string, transportCreds credentials.TransportCredentials) (*grpc.ClientConn, error) {
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
|
|
||||||
|
|
@ -72,17 +49,14 @@ func Dial(handshakerServiceAddress string) (*grpc.ClientConn, error) {
|
||||||
if !ok {
|
if !ok {
|
||||||
// Create a new connection to the S2A handshaker service. Note that
|
// Create a new connection to the S2A handshaker service. Note that
|
||||||
// this connection stays open until the application is closed.
|
// this connection stays open until the application is closed.
|
||||||
grpcOpts := []grpc.DialOption{
|
var grpcOpts []grpc.DialOption
|
||||||
grpc.WithInsecure(),
|
if transportCreds != nil {
|
||||||
}
|
grpcOpts = append(grpcOpts, grpc.WithTransportCredentials(transportCreds))
|
||||||
if enableAppEngineDialer() && appEngineDialerHook != nil {
|
} else {
|
||||||
if grpclog.V(1) {
|
grpcOpts = append(grpcOpts, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||||
grpclog.Info("Using AppEngine-specific dialer to talk to S2A.")
|
|
||||||
}
|
|
||||||
grpcOpts = append(grpcOpts, appEngineDialerHook(context.Background()))
|
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
hsConn, err = hsDialer(handshakerServiceAddress, grpcOpts...)
|
hsConn, err = hsDialer(ctx, handshakerServiceAddress, grpcOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -90,10 +64,3 @@ func Dial(handshakerServiceAddress string) (*grpc.ClientConn, error) {
|
||||||
}
|
}
|
||||||
return hsConn, nil
|
return hsConn, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func enableAppEngineDialer() bool {
|
|
||||||
if strings.ToLower(os.Getenv(enableAppEngineDialerEnv)) == "true" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -83,13 +83,15 @@ func (t *ticketSender) sendTicketsToS2A(sessionTickets [][]byte, callComplete ch
|
||||||
t.ensureProcessSessionTickets.Done()
|
t.ensureProcessSessionTickets.Done()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
hsConn, err := service.Dial(t.hsAddr)
|
ctx, cancel := context.WithTimeout(context.Background(), sessionTimeout)
|
||||||
|
defer cancel()
|
||||||
|
// The transportCreds only needs to be set when talking to S2AV2 and also
|
||||||
|
// if mTLS is required.
|
||||||
|
hsConn, err := service.Dial(ctx, t.hsAddr, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
client := s2apb.NewS2AServiceClient(hsConn)
|
client := s2apb.NewS2AServiceClient(hsConn)
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), sessionTimeout)
|
|
||||||
defer cancel()
|
|
||||||
session, err := client.SetUpSession(ctx)
|
session, err := client.SetUpSession(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ type s2av2TransportCreds struct {
|
||||||
isClient bool
|
isClient bool
|
||||||
serverName string
|
serverName string
|
||||||
s2av2Address string
|
s2av2Address string
|
||||||
|
transportCreds credentials.TransportCredentials
|
||||||
tokenManager *tokenmanager.AccessTokenManager
|
tokenManager *tokenmanager.AccessTokenManager
|
||||||
// localIdentity should only be used by the client.
|
// localIdentity should only be used by the client.
|
||||||
localIdentity *commonpbv1.Identity
|
localIdentity *commonpbv1.Identity
|
||||||
|
|
@ -69,7 +70,7 @@ type s2av2TransportCreds struct {
|
||||||
|
|
||||||
// NewClientCreds returns a client-side transport credentials object that uses
|
// NewClientCreds returns a client-side transport credentials object that uses
|
||||||
// the S2Av2 to establish a secure connection with a server.
|
// the S2Av2 to establish a secure connection with a server.
|
||||||
func NewClientCreds(s2av2Address string, localIdentity *commonpbv1.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, fallbackClientHandshakeFunc fallback.ClientHandshake, getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error), serverAuthorizationPolicy []byte) (credentials.TransportCredentials, error) {
|
func NewClientCreds(s2av2Address string, transportCreds credentials.TransportCredentials, localIdentity *commonpbv1.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, fallbackClientHandshakeFunc fallback.ClientHandshake, getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error), serverAuthorizationPolicy []byte) (credentials.TransportCredentials, error) {
|
||||||
// Create an AccessTokenManager instance to use to authenticate to S2Av2.
|
// Create an AccessTokenManager instance to use to authenticate to S2Av2.
|
||||||
accessTokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager()
|
accessTokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager()
|
||||||
|
|
||||||
|
|
@ -80,6 +81,7 @@ func NewClientCreds(s2av2Address string, localIdentity *commonpbv1.Identity, ver
|
||||||
isClient: true,
|
isClient: true,
|
||||||
serverName: "",
|
serverName: "",
|
||||||
s2av2Address: s2av2Address,
|
s2av2Address: s2av2Address,
|
||||||
|
transportCreds: transportCreds,
|
||||||
localIdentity: localIdentity,
|
localIdentity: localIdentity,
|
||||||
verificationMode: verificationMode,
|
verificationMode: verificationMode,
|
||||||
fallbackClientHandshake: fallbackClientHandshakeFunc,
|
fallbackClientHandshake: fallbackClientHandshakeFunc,
|
||||||
|
|
@ -99,7 +101,7 @@ func NewClientCreds(s2av2Address string, localIdentity *commonpbv1.Identity, ver
|
||||||
|
|
||||||
// NewServerCreds returns a server-side transport credentials object that uses
|
// NewServerCreds returns a server-side transport credentials object that uses
|
||||||
// the S2Av2 to establish a secure connection with a client.
|
// the S2Av2 to establish a secure connection with a client.
|
||||||
func NewServerCreds(s2av2Address string, localIdentities []*commonpbv1.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error)) (credentials.TransportCredentials, error) {
|
func NewServerCreds(s2av2Address string, transportCreds credentials.TransportCredentials, localIdentities []*commonpbv1.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error)) (credentials.TransportCredentials, error) {
|
||||||
// Create an AccessTokenManager instance to use to authenticate to S2Av2.
|
// Create an AccessTokenManager instance to use to authenticate to S2Av2.
|
||||||
accessTokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager()
|
accessTokenManager, err := tokenmanager.NewSingleTokenAccessTokenManager()
|
||||||
creds := &s2av2TransportCreds{
|
creds := &s2av2TransportCreds{
|
||||||
|
|
@ -108,6 +110,7 @@ func NewServerCreds(s2av2Address string, localIdentities []*commonpbv1.Identity,
|
||||||
},
|
},
|
||||||
isClient: false,
|
isClient: false,
|
||||||
s2av2Address: s2av2Address,
|
s2av2Address: s2av2Address,
|
||||||
|
transportCreds: transportCreds,
|
||||||
localIdentities: localIdentities,
|
localIdentities: localIdentities,
|
||||||
verificationMode: verificationMode,
|
verificationMode: verificationMode,
|
||||||
getS2AStream: getS2AStream,
|
getS2AStream: getS2AStream,
|
||||||
|
|
@ -136,7 +139,7 @@ func (c *s2av2TransportCreds) ClientHandshake(ctx context.Context, serverAuthori
|
||||||
var err error
|
var err error
|
||||||
retry.Run(timeoutCtx,
|
retry.Run(timeoutCtx,
|
||||||
func() error {
|
func() error {
|
||||||
s2AStream, err = createStream(timeoutCtx, c.s2av2Address, c.getS2AStream)
|
s2AStream, err = createStream(timeoutCtx, c.s2av2Address, c.transportCreds, c.getS2AStream)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -210,7 +213,7 @@ func (c *s2av2TransportCreds) ServerHandshake(rawConn net.Conn) (net.Conn, crede
|
||||||
var err error
|
var err error
|
||||||
retry.Run(ctx,
|
retry.Run(ctx,
|
||||||
func() error {
|
func() error {
|
||||||
s2AStream, err = createStream(ctx, c.s2av2Address, c.getS2AStream)
|
s2AStream, err = createStream(ctx, c.s2av2Address, c.transportCreds, c.getS2AStream)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -311,11 +314,12 @@ func (c *s2av2TransportCreds) Clone() credentials.TransportCredentials {
|
||||||
func NewClientTLSConfig(
|
func NewClientTLSConfig(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
s2av2Address string,
|
s2av2Address string,
|
||||||
|
transportCreds credentials.TransportCredentials,
|
||||||
tokenManager tokenmanager.AccessTokenManager,
|
tokenManager tokenmanager.AccessTokenManager,
|
||||||
verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode,
|
verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode,
|
||||||
serverName string,
|
serverName string,
|
||||||
serverAuthorizationPolicy []byte) (*tls.Config, error) {
|
serverAuthorizationPolicy []byte) (*tls.Config, error) {
|
||||||
s2AStream, err := createStream(ctx, s2av2Address, nil)
|
s2AStream, err := createStream(ctx, s2av2Address, transportCreds, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclog.Infof("Failed to connect to S2Av2: %v", err)
|
grpclog.Infof("Failed to connect to S2Av2: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -358,12 +362,12 @@ func (x s2AGrpcStream) CloseSend() error {
|
||||||
return x.stream.CloseSend()
|
return x.stream.CloseSend()
|
||||||
}
|
}
|
||||||
|
|
||||||
func createStream(ctx context.Context, s2av2Address string, getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error)) (stream.S2AStream, error) {
|
func createStream(ctx context.Context, s2av2Address string, transportCreds credentials.TransportCredentials, getS2AStream func(ctx context.Context, s2av2Address string) (stream.S2AStream, error)) (stream.S2AStream, error) {
|
||||||
if getS2AStream != nil {
|
if getS2AStream != nil {
|
||||||
return getS2AStream(ctx, s2av2Address)
|
return getS2AStream(ctx, s2av2Address)
|
||||||
}
|
}
|
||||||
// TODO(rmehta19): Consider whether to close the connection to S2Av2.
|
// TODO(rmehta19): Consider whether to close the connection to S2Av2.
|
||||||
conn, err := service.Dial(s2av2Address)
|
conn, err := service.Dial(ctx, s2av2Address, transportCreds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,9 +120,9 @@ func Run(ctx context.Context, f func() error) {
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if sleepErr := Sleep(ctx, bo); sleepErr != nil {
|
if errSleep := Sleep(ctx, bo); errSleep != nil {
|
||||||
if grpclog.V(1) {
|
if grpclog.V(1) {
|
||||||
grpclog.Infof("exit retry loop due to sleep error: %v", sleepErr)
|
grpclog.Infof("exit retry loop due to sleep error: %v", errSleep)
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ func NewClientCreds(opts *ClientOptions) (credentials.TransportCredentials, erro
|
||||||
if opts.FallbackOpts != nil && opts.FallbackOpts.FallbackClientHandshakeFunc != nil {
|
if opts.FallbackOpts != nil && opts.FallbackOpts.FallbackClientHandshakeFunc != nil {
|
||||||
fallbackFunc = opts.FallbackOpts.FallbackClientHandshakeFunc
|
fallbackFunc = opts.FallbackOpts.FallbackClientHandshakeFunc
|
||||||
}
|
}
|
||||||
return v2.NewClientCreds(opts.S2AAddress, localIdentity, verificationMode, fallbackFunc, opts.getS2AStream, opts.serverAuthorizationPolicy)
|
return v2.NewClientCreds(opts.S2AAddress, opts.TransportCreds, localIdentity, verificationMode, fallbackFunc, opts.getS2AStream, opts.serverAuthorizationPolicy)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewServerCreds returns a server-side transport credentials object that uses
|
// NewServerCreds returns a server-side transport credentials object that uses
|
||||||
|
|
@ -147,7 +147,7 @@ func NewServerCreds(opts *ServerOptions) (credentials.TransportCredentials, erro
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
verificationMode := getVerificationMode(opts.VerificationMode)
|
verificationMode := getVerificationMode(opts.VerificationMode)
|
||||||
return v2.NewServerCreds(opts.S2AAddress, localIdentities, verificationMode, opts.getS2AStream)
|
return v2.NewServerCreds(opts.S2AAddress, opts.TransportCreds, localIdentities, verificationMode, opts.getS2AStream)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientHandshake initiates a client-side TLS handshake using the S2A.
|
// ClientHandshake initiates a client-side TLS handshake using the S2A.
|
||||||
|
|
@ -156,17 +156,17 @@ func (c *s2aTransportCreds) ClientHandshake(ctx context.Context, serverAuthority
|
||||||
return nil, nil, errors.New("client handshake called using server transport credentials")
|
return nil, nil, errors.New("client handshake called using server transport credentials")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cancel context.CancelFunc
|
||||||
|
ctx, cancel = context.WithCancel(ctx)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
// Connect to the S2A.
|
// Connect to the S2A.
|
||||||
hsConn, err := service.Dial(c.s2aAddr)
|
hsConn, err := service.Dial(ctx, c.s2aAddr, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclog.Infof("Failed to connect to S2A: %v", err)
|
grpclog.Infof("Failed to connect to S2A: %v", err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var cancel context.CancelFunc
|
|
||||||
ctx, cancel = context.WithCancel(ctx)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
opts := &handshaker.ClientHandshakerOptions{
|
opts := &handshaker.ClientHandshakerOptions{
|
||||||
MinTLSVersion: c.minTLSVersion,
|
MinTLSVersion: c.minTLSVersion,
|
||||||
MaxTLSVersion: c.maxTLSVersion,
|
MaxTLSVersion: c.maxTLSVersion,
|
||||||
|
|
@ -204,16 +204,16 @@ func (c *s2aTransportCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credent
|
||||||
return nil, nil, errors.New("server handshake called using client transport credentials")
|
return nil, nil, errors.New("server handshake called using client transport credentials")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
// Connect to the S2A.
|
// Connect to the S2A.
|
||||||
hsConn, err := service.Dial(c.s2aAddr)
|
hsConn, err := service.Dial(ctx, c.s2aAddr, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclog.Infof("Failed to connect to S2A: %v", err)
|
grpclog.Infof("Failed to connect to S2A: %v", err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
opts := &handshaker.ServerHandshakerOptions{
|
opts := &handshaker.ServerHandshakerOptions{
|
||||||
MinTLSVersion: c.minTLSVersion,
|
MinTLSVersion: c.minTLSVersion,
|
||||||
MaxTLSVersion: c.maxTLSVersion,
|
MaxTLSVersion: c.maxTLSVersion,
|
||||||
|
|
@ -313,6 +313,7 @@ func NewTLSClientConfigFactory(opts *ClientOptions) (TLSClientConfigFactory, err
|
||||||
grpclog.Infof("Access token manager not initialized: %v", err)
|
grpclog.Infof("Access token manager not initialized: %v", err)
|
||||||
return &s2aTLSClientConfigFactory{
|
return &s2aTLSClientConfigFactory{
|
||||||
s2av2Address: opts.S2AAddress,
|
s2av2Address: opts.S2AAddress,
|
||||||
|
transportCreds: opts.TransportCreds,
|
||||||
tokenManager: nil,
|
tokenManager: nil,
|
||||||
verificationMode: getVerificationMode(opts.VerificationMode),
|
verificationMode: getVerificationMode(opts.VerificationMode),
|
||||||
serverAuthorizationPolicy: opts.serverAuthorizationPolicy,
|
serverAuthorizationPolicy: opts.serverAuthorizationPolicy,
|
||||||
|
|
@ -320,6 +321,7 @@ func NewTLSClientConfigFactory(opts *ClientOptions) (TLSClientConfigFactory, err
|
||||||
}
|
}
|
||||||
return &s2aTLSClientConfigFactory{
|
return &s2aTLSClientConfigFactory{
|
||||||
s2av2Address: opts.S2AAddress,
|
s2av2Address: opts.S2AAddress,
|
||||||
|
transportCreds: opts.TransportCreds,
|
||||||
tokenManager: tokenManager,
|
tokenManager: tokenManager,
|
||||||
verificationMode: getVerificationMode(opts.VerificationMode),
|
verificationMode: getVerificationMode(opts.VerificationMode),
|
||||||
serverAuthorizationPolicy: opts.serverAuthorizationPolicy,
|
serverAuthorizationPolicy: opts.serverAuthorizationPolicy,
|
||||||
|
|
@ -328,6 +330,7 @@ func NewTLSClientConfigFactory(opts *ClientOptions) (TLSClientConfigFactory, err
|
||||||
|
|
||||||
type s2aTLSClientConfigFactory struct {
|
type s2aTLSClientConfigFactory struct {
|
||||||
s2av2Address string
|
s2av2Address string
|
||||||
|
transportCreds credentials.TransportCredentials
|
||||||
tokenManager tokenmanager.AccessTokenManager
|
tokenManager tokenmanager.AccessTokenManager
|
||||||
verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode
|
verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode
|
||||||
serverAuthorizationPolicy []byte
|
serverAuthorizationPolicy []byte
|
||||||
|
|
@ -339,7 +342,7 @@ func (f *s2aTLSClientConfigFactory) Build(
|
||||||
if opts != nil && opts.ServerName != "" {
|
if opts != nil && opts.ServerName != "" {
|
||||||
serverName = opts.ServerName
|
serverName = opts.ServerName
|
||||||
}
|
}
|
||||||
return v2.NewClientTLSConfig(ctx, f.s2av2Address, f.tokenManager, f.verificationMode, serverName, f.serverAuthorizationPolicy)
|
return v2.NewClientTLSConfig(ctx, f.s2av2Address, f.transportCreds, f.tokenManager, f.verificationMode, serverName, f.serverAuthorizationPolicy)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVerificationMode(verificationMode VerificationModeType) s2av2pb.ValidatePeerCertificateChainReq_VerificationMode {
|
func getVerificationMode(verificationMode VerificationModeType) s2av2pb.ValidatePeerCertificateChainReq_VerificationMode {
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import (
|
||||||
|
|
||||||
"github.com/google/s2a-go/fallback"
|
"github.com/google/s2a-go/fallback"
|
||||||
"github.com/google/s2a-go/stream"
|
"github.com/google/s2a-go/stream"
|
||||||
|
"google.golang.org/grpc/credentials"
|
||||||
|
|
||||||
s2apb "github.com/google/s2a-go/internal/proto/common_go_proto"
|
s2apb "github.com/google/s2a-go/internal/proto/common_go_proto"
|
||||||
)
|
)
|
||||||
|
|
@ -92,6 +93,9 @@ type ClientOptions struct {
|
||||||
LocalIdentity Identity
|
LocalIdentity Identity
|
||||||
// S2AAddress is the address of the S2A.
|
// S2AAddress is the address of the S2A.
|
||||||
S2AAddress string
|
S2AAddress string
|
||||||
|
// Optional transport credentials.
|
||||||
|
// If set, this will be used for the gRPC connection to the S2A server.
|
||||||
|
TransportCreds credentials.TransportCredentials
|
||||||
// EnsureProcessSessionTickets waits for all session tickets to be sent to
|
// EnsureProcessSessionTickets waits for all session tickets to be sent to
|
||||||
// S2A before a process completes.
|
// S2A before a process completes.
|
||||||
//
|
//
|
||||||
|
|
@ -173,6 +177,9 @@ type ServerOptions struct {
|
||||||
LocalIdentities []Identity
|
LocalIdentities []Identity
|
||||||
// S2AAddress is the address of the S2A.
|
// S2AAddress is the address of the S2A.
|
||||||
S2AAddress string
|
S2AAddress string
|
||||||
|
// Optional transport credentials.
|
||||||
|
// If set, this will be used for the gRPC connection to the S2A server.
|
||||||
|
TransportCreds credentials.TransportCredentials
|
||||||
// If true, enables the use of legacy S2Av1.
|
// If true, enables the use of legacy S2Av1.
|
||||||
EnableLegacyMode bool
|
EnableLegacyMode bool
|
||||||
// VerificationMode specifies the mode that S2A must use to verify the
|
// VerificationMode specifies the mode that S2A must use to verify the
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDCDCCAfACFFlYsYCFit01ZpYmfjxpo7/6wMEbMA0GCSqGSIb3DQEBCwUAMEgx
|
||||||
|
CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEPMA0GA1UECgwGR29vZ2xlMRswGQYD
|
||||||
|
VQQDDBJ0ZXN0LXMyYS1tdGxzLXJvb3QwHhcNMjMwODIyMTY0NTE4WhcNNDMwODIy
|
||||||
|
MTY0NTE4WjA5MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExHTAbBgNVBAMMFHRl
|
||||||
|
c3QtczJhLW10bHMtY2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
||||||
|
AQEAqrQQMyxNtmdCB+uY3szgRsfPrKC+TV9Fusnd8PfaCVuGTGcSBKM018nV2TDn
|
||||||
|
3IYFQ1HgLpGwGwOFDBb3y0o9i2/l2VJySriX1GSNX6nDmVasQlO1wuOLCP7/LRmO
|
||||||
|
7b6Kise5W0IFhYaptKyWnekn2pS0tAjimqpfn2w0U6FDGtQUqg/trQQmGtTSJHjb
|
||||||
|
A+OFd0EFC18KGP8Q+jOMaMkJRmpeEiAPyHPDoMhqQNT26RApv9j2Uzo4SuXzHH6T
|
||||||
|
cAdm1+zG+EXY/UZKX9oDkSbwIJvN+gCmNyORLalJ12gsGYOCjMd8K0mlXBqrmmbO
|
||||||
|
VHVbUm9062lhE7x59AA8DK4DoQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCPOvtL
|
||||||
|
dq2hxFHlIy0YUK8jp/DtwJZPwzx1id5FtWwd0CxBS1StIgmkHMxtkJGz1iyQLplI
|
||||||
|
je+Msd4sTsb5zZi/8kGKehi8Wj4lghp4oP30cpob41OvM68M9RC/wSOVk9igSww+
|
||||||
|
l3zof6wKRIswsi5VHrL16ruIVVoDlyFbKr8yk+cp9OPOV8hNNN7ewY9xC8OgnTt8
|
||||||
|
YtdaLe6uTplKBLW+j3GtshigRhyfkGJyPFYL4LAeDJCHlC1qmBnkyP0ijMp6vneM
|
||||||
|
E8TLavnMTMcpihWTWpyKeRkO6HDRsP4AofQAp7VAiAdSOplga+w2qgrVICV+m8MK
|
||||||
|
BTq2PBvc59T6OFLq
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqtBAzLE22Z0IH
|
||||||
|
65jezOBGx8+soL5NX0W6yd3w99oJW4ZMZxIEozTXydXZMOfchgVDUeAukbAbA4UM
|
||||||
|
FvfLSj2Lb+XZUnJKuJfUZI1fqcOZVqxCU7XC44sI/v8tGY7tvoqKx7lbQgWFhqm0
|
||||||
|
rJad6SfalLS0COKaql+fbDRToUMa1BSqD+2tBCYa1NIkeNsD44V3QQULXwoY/xD6
|
||||||
|
M4xoyQlGal4SIA/Ic8OgyGpA1PbpECm/2PZTOjhK5fMcfpNwB2bX7Mb4Rdj9Rkpf
|
||||||
|
2gORJvAgm836AKY3I5EtqUnXaCwZg4KMx3wrSaVcGquaZs5UdVtSb3TraWETvHn0
|
||||||
|
ADwMrgOhAgMBAAECggEAUccupZ1ZY4OHTi0PkNk8rpwFwTFGyeFVEf2ofkr24RnA
|
||||||
|
NnUAXEllxOUUNlcoFOz9s3kTeavg3qgqgpa0QmdAIb9LMXg+ec6CKkW7trMpGho8
|
||||||
|
LxBUWNfSoU4sKEqAvyPT0lWJVo9D/up6/avbAi6TIbOw+Djzel4ZrlHTpabxc3WT
|
||||||
|
EilXzn4q54b3MzxCQeQjcnzTieW4Q5semG2kLiXFToHIY2di01P/O8awUjgrD+uW
|
||||||
|
/Cb6H49MnHm9VPkqea1iwZeMQd6Gh5FrC7RezsBjdB1JBcfsv6PFt2ySInjB8SF+
|
||||||
|
XR5Gr3Cc5sh9s0LfprZ9Dq0rlSWmwasPMI1COK6SswKBgQDczgeWd3erQ1JX9LEI
|
||||||
|
wollawqC9y7uJhEsw1hrPqA3uqZYiLUc7Nmi4laZ12mcGoXNDS3R3XmD58qGmGaU
|
||||||
|
lxEVTb8KDVWBgw450VoBKzSMQnCP6zn4nZxTYxeqMKjDGf6TRB6TZc843qsG3eRC
|
||||||
|
k91yxrCQ/0HV6PT48C+lieDzLwKBgQDF6aNKiyrswr457undBnM1H8q/Y6xC5ZlK
|
||||||
|
UtiQdhuyBnicvz0U8WPxBY/8gha0OXWuSnBqq/z77iFVNv/zT6p9K7kM7nBGd8cB
|
||||||
|
8KO6FNbyaHWFrhCI5zNzRTH4oha0hfvUOoti09vqavCtWD4L+D/63ba1wNLKPO9o
|
||||||
|
4gWbCnUCLwKBgQC/vus372csgrnvR761LLrEJ8BpGt7WUJh5luoht7DKtHvgRleB
|
||||||
|
Vu1oVcV+s2Iy/ZVUDC3OIdZ0hcWKPK5YOxfKuEk+IXYvke+4peTTPwHTC59UW6Fs
|
||||||
|
FPK8N0FFuhvT0a8RlAY5WiAp8rPysp6WcnHMSl7qi8BQUozp4Sp/RsziYQKBgBXv
|
||||||
|
r4mzoy5a53rEYGd/L4XT4EUWZyGDEVqLlDVu4eL5lKTLDZokp08vrqXuRVX0iHap
|
||||||
|
CYzJQ2EpI8iuL/BoBB2bmwcz5n3pCMXORld5t9lmeqA2it6hwbIlGUTVsm6P6zm6
|
||||||
|
w3hQwy9YaxTLkxUAjxbfPEEo/jQsTNzzMGve3NlBAoGAbgJExpDyMDnaD2Vi5eyr
|
||||||
|
63b54BsqeLHqxJmADifyRCj7G1SJMm3zMKkNNOS0vsXgoiId973STFf1XQiojiv8
|
||||||
|
Slbxyv5rczcY0n3LOuQYcM5OzsjzpNFZsT2dDnMfNRUF3rx3Geu/FuJ9scF1b00r
|
||||||
|
fVMrcL3jSf/W1Xh4TgtyoU8=
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDcTCCAlmgAwIBAgIUDUkgI+2FZtuUHyUUi0ZBH7JvN00wDQYJKoZIhvcNAQEL
|
||||||
|
BQAwSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQ8wDQYDVQQKDAZHb29nbGUx
|
||||||
|
GzAZBgNVBAMMEnRlc3QtczJhLW10bHMtcm9vdDAeFw0yMzA4MjEyMTI5MTVaFw00
|
||||||
|
MzA4MjEyMTI5MTVaMEgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEPMA0GA1UE
|
||||||
|
CgwGR29vZ2xlMRswGQYDVQQDDBJ0ZXN0LXMyYS1tdGxzLXJvb3QwggEiMA0GCSqG
|
||||||
|
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbFEQfpvla27bATedrN4BAWsI9GSwSnJLW
|
||||||
|
QWzXcnAk6cKxQBAhnaKHRxHY8ttLhNTtxQeub894CLzJvHE/0xDhuMzjtCCCZ7i2
|
||||||
|
r08tKZ1KcEzPJCPNlxlzAXPA45XU3LRlbGvju/PBPhm6n1hCEKTNI/KETJ5DEaYg
|
||||||
|
Cf2LcXVsl/zW20MwDZ+e2w/9a2a6n6DdpW1ekOR550hXAUOIxvmXRBeYeGLFvp1n
|
||||||
|
rQgZBhRaxP03UB+PQD2oMi/4mfsS96uGCXdzzX8qV46O8m132HUbnA/wagIwboEe
|
||||||
|
d7Bx237dERDyHw5GFnll7orgA0FOtoEufXdeQxWVvTjO0+PVPgsvAgMBAAGjUzBR
|
||||||
|
MB0GA1UdDgQWBBRyMtg/yutV8hw8vOq0i8x0eBQi7DAfBgNVHSMEGDAWgBRyMtg/
|
||||||
|
yutV8hw8vOq0i8x0eBQi7DAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
|
||||||
|
A4IBAQArN/gdqWMxd5Rvq2eJMTp6I4RepJOT7Go4sMsRsy1caJqqcoS2EvREDZMN
|
||||||
|
XNEBcyQBB5kYd6TCcZGoLnEtWYXQ4jjEiXG1g7/+rWxyqw0ZYuP7FWzuHg3Uor/x
|
||||||
|
fApbEKwptP5ywVc+33h4qreGcqXkVCCn+sAcstGgrqubdGZW2T5gazUMyammOOuN
|
||||||
|
9IWL1PbvXmgEKD+80NUIrk09zanYyrElGdU/zw/kUbZ3Jf6WUBtJGhTzRQ1qZeKa
|
||||||
|
VnpCbLoG3vObEB8mxDUAlIzwAtfvw4U32BVIZA8xrocz6OOoAnSW1bTlo3EOIo/G
|
||||||
|
MTV7jmY9TBPtfhRuO/cG650+F+cw
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDbjCCAlagAwIBAgIUbexZ5sZl86Al9dsI2PkOgtqKnkgwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQ8wDQYDVQQKDAZHb29nbGUx
|
||||||
|
GzAZBgNVBAMMEnRlc3QtczJhLW10bHMtcm9vdDAeFw0yMzA4MjIwMDMyMDRaFw00
|
||||||
|
MzA4MjIwMDMyMDRaMDkxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEdMBsGA1UE
|
||||||
|
AwwUdGVzdC1zMmEtbXRscy1zZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||||
|
ggEKAoIBAQCMEzybsGPqfh92GLwy43mt8kQDF3ztr8y06RwU1hVnY7QqYK4obpvh
|
||||||
|
HkJVnTz9gwNBF3n5nUalqRzactlf2PCydN9oSYNCO8svVmo7vw1CleKAKFAiV5Qn
|
||||||
|
H76QlqD15oJreh7nSM8R4qj5KukIHvt0cN0gD6CJQzIURDtsKJwkW3yQjYyT/FAK
|
||||||
|
GYtFrB6buDn3Eg3Hsw6z7uj7CzLBsSl7BIGrQILbpbI9nFNT3rUTUhXZKY/3UtJA
|
||||||
|
Ob66AjTmMbD16RGYZR4JsPx6CstheifJ6YSI79r5KgD37zX0jMXFWimvb2SmZmFe
|
||||||
|
LoohtC8K7uTyjm/dROx6nHXdDt5TQYXHAgMBAAGjXzBdMBsGA1UdEQQUMBKHEAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAwHQYDVR0OBBYEFI3i2+tIk6YYn0MIxC0q93jk1VsUMB8G
|
||||||
|
A1UdIwQYMBaAFHIy2D/K61XyHDy86rSLzHR4FCLsMA0GCSqGSIb3DQEBCwUAA4IB
|
||||||
|
AQAUhk+s/lrIAULBbU7E22C8f93AzTxE1mhyHGNlfPPJP3t1Dl+h4X4WkFpkz5gT
|
||||||
|
EcNXB//Vvoq99HbEK5/92sxsIPexKdJBdcggeHXIgLDkOrEZEb0Nnh9eaAuU2QDn
|
||||||
|
JW44hMB+aF6mEaJvOHE6DRkQw3hwFYFisFKKHtlQ3TyOhw5CHGzSExPZusdSFNIe
|
||||||
|
2E7V/0QzGPJEFnEFUNe9N8nTH2P385Paoi+5+Iizlp/nztVXfzv0Cj/i+qGgtDUs
|
||||||
|
HB+gBU2wxMw8eYyuNzACH70wqGR1Parj8/JoyYhx0S4+Gjzy3JH3CcAMaxyfH/dI
|
||||||
|
4Wcvfz/isxgmH1UqIt3oc6ad
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCMEzybsGPqfh92
|
||||||
|
GLwy43mt8kQDF3ztr8y06RwU1hVnY7QqYK4obpvhHkJVnTz9gwNBF3n5nUalqRza
|
||||||
|
ctlf2PCydN9oSYNCO8svVmo7vw1CleKAKFAiV5QnH76QlqD15oJreh7nSM8R4qj5
|
||||||
|
KukIHvt0cN0gD6CJQzIURDtsKJwkW3yQjYyT/FAKGYtFrB6buDn3Eg3Hsw6z7uj7
|
||||||
|
CzLBsSl7BIGrQILbpbI9nFNT3rUTUhXZKY/3UtJAOb66AjTmMbD16RGYZR4JsPx6
|
||||||
|
CstheifJ6YSI79r5KgD37zX0jMXFWimvb2SmZmFeLoohtC8K7uTyjm/dROx6nHXd
|
||||||
|
Dt5TQYXHAgMBAAECggEAIB5zGdIG/yh/Z1GBqfuOFaxFGx5iJ5BVlLAVH9P9IXFz
|
||||||
|
yPnVRXEjbinFlSMSbqEBeIX9EpcVMXxHIPIP1RIGEy2IYr3kiqXyT771ahDDZh6/
|
||||||
|
Spqz0UQatSPqyvW3H9uE0Uc12dvQm23JSCUmPRX5m7gbhDQBIChXzdzdcU4Yi59V
|
||||||
|
4xmJUvbsAcLw5CBM6kwV+1NGVH9+3mUdhrr9M6B6+sVB/xnaqMGEDfQGiwL8U7EY
|
||||||
|
QOuc46KXu3Pd/qCdVLn60IrdjSzDJKeC5UZZ+ejNAo+DfbtOovBj3qu3OCUg4XVy
|
||||||
|
0CDBJ1sTdLvUfF4Gb+crjPsd+qBbXcjVfqdadwhsoQKBgQDBF1Pys/NitW8okJwp
|
||||||
|
2fiDIASP3TiI+MthWHGyuoZGPvmXQ3H6iuLSm8c/iYI2WPTf53Xff1VcFm1GmQms
|
||||||
|
GCsYM8Ax94zCeO6Ei1sYYxwcBloEZfOeV37MPA4pjJF4Lt+n5nveNxP+lrsjksJz
|
||||||
|
wToSEgWPDT1b/xcdt4/5j9J85wKBgQC5tiLx+33mwH4DoaFRmSl0+VuSNYFw6DTQ
|
||||||
|
SQ+kWqWGH4NENc9wf4Dj2VUZQhpXNhXVSxj+aP2d/ck1NrTJAWqYEXCDtFQOGSa2
|
||||||
|
cGPRr+Fhy5NIEaEvR7IXcMBZzx3koYmWVBHricyrXs5FvHrT3N14mGDUG8n24U3f
|
||||||
|
R799bau0IQKBgQC97UM+lHCPJCWNggiJRgSifcje9VtZp1btjoBvq/bNe74nYkjn
|
||||||
|
htsrC91Fiu1Qpdlfr50K1IXSyaB886VG6JLjAGxI+dUzqJ38M9LLvxj0G+9JKjsi
|
||||||
|
AbAQFfZcOg8QZxLJZPVsE0MQhZTXndC06VhEVAOxvPUg214Sde8hK61/+wKBgCRw
|
||||||
|
O10VhnePT2pw/VEgZ0T/ZFtEylgYB7zSiRIrgwzVBBGPKVueePC8BPmGwdpYz2Hh
|
||||||
|
cU8B1Ll6QU+Co2hJMdwSl+wPpup5PuJPHRbYlrV0lzpt0x2OyL/WrLcyb2Ab3f40
|
||||||
|
EqwPhqwdVwXR3JvTW1U9OMqFhVQ+kuP7lPQMX8NhAoGBAJOgZ7Tokipc4Mi68Olw
|
||||||
|
SCaOPvjjy4sW2rTRuKyjc1wTAzy7SJ3vXHfGkkN99nTLJFwAyJhWUpnRdwAXGi+x
|
||||||
|
gyOa95ImsEfRSwEjbluWfF8/P0IU8GR+ZTqT4NnNCOsi8T/xst4Szd1ECJNnnZDe
|
||||||
|
1ChfPP1AH+/75MJCvu6wQBQv
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDITCCAgkCFBS8mLoytMpMWBwpAtnRaq3eIKnsMA0GCSqGSIb3DQEBCwUAME0x
|
||||||
|
CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTENMAsGA1UECgwEVGVzdDEiMCAGA1UE
|
||||||
|
AwwZdGVzdC1zMmEtbXRscy1zZWxmLXNpZ25lZDAeFw0yMzA4MjIyMTE2MDFaFw00
|
||||||
|
MzA4MjIyMTE2MDFaME0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTENMAsGA1UE
|
||||||
|
CgwEVGVzdDEiMCAGA1UEAwwZdGVzdC1zMmEtbXRscy1zZWxmLXNpZ25lZDCCASIw
|
||||||
|
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKFFPsYasKZeCFLEXl3RpE/ZOXFe
|
||||||
|
2lhutIalSpZvCmso+mQGoZ4cHK7At+kDjBi5CrnXkYcw7quQAhHgU0frhWdj7tsW
|
||||||
|
HUUtq7T8eaGWKBnVD9fl+MjtAl1BmhXwV9qRBbj4EesSKGDSGpKf66dOtzw83JbB
|
||||||
|
cU7XlPAH1c1zo2GXC1himcZ+SVGHVrOjn4NmeFs8g94/Dke8dWkHwv5YTMVugFK4
|
||||||
|
5KxKgSOKkr4ka7PCBzgxCnW4wYSZNRHcxrqkiArO2HAQq0ACr7u+fVDYH//9mP2Z
|
||||||
|
ADo/zch7O5yhkiNbjXJIRrptDWEuVYMRloYDhT773h7bV/Q0Wo0NQGtasJ8CAwEA
|
||||||
|
ATANBgkqhkiG9w0BAQsFAAOCAQEAPjbH0TMyegF/MDvglkc0sXr6DqlmTxDCZZmG
|
||||||
|
lYPZ5Xy062+rxIHghMARbvO4BxepiG37KsP2agvOldm4TtU8nQ8LyswmSIFm4BQ+
|
||||||
|
XQWwdsWyYyd8l0d5sXAdaN6AXwy50fvqCepmEqyreMY6dtLzlwo9gVCBFB7QuAPt
|
||||||
|
Nc14phpEUZt/KPNuY6cUlB7bz3tmnFbwxUrWj1p0KBEYsr7+KEVZxR+z0wtlU7S9
|
||||||
|
ZBrmUvx0fq5Ef7JWtHW0w4ofg1op742sdYl+53C26GZ76ts4MmqVz2/94DScgRaU
|
||||||
|
gT0GLVuuCZXRDVeTXqTb4mditRCfzFPe9cCegYhGhSqBs8yh5A==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChRT7GGrCmXghS
|
||||||
|
xF5d0aRP2TlxXtpYbrSGpUqWbwprKPpkBqGeHByuwLfpA4wYuQq515GHMO6rkAIR
|
||||||
|
4FNH64VnY+7bFh1FLau0/HmhligZ1Q/X5fjI7QJdQZoV8FfakQW4+BHrEihg0hqS
|
||||||
|
n+unTrc8PNyWwXFO15TwB9XNc6NhlwtYYpnGfklRh1azo5+DZnhbPIPePw5HvHVp
|
||||||
|
B8L+WEzFboBSuOSsSoEjipK+JGuzwgc4MQp1uMGEmTUR3Ma6pIgKzthwEKtAAq+7
|
||||||
|
vn1Q2B///Zj9mQA6P83IezucoZIjW41ySEa6bQ1hLlWDEZaGA4U++94e21f0NFqN
|
||||||
|
DUBrWrCfAgMBAAECggEAR8e8YwyqJ8KezcgdgIC5M9kp2i4v3UCZFX0or8CI0J2S
|
||||||
|
pUbWVLuKgLXCpfIwPyjNf15Vpei/spkMcsx4BQDthdFTFSzIpmvni0z9DlD5VFYj
|
||||||
|
ESOJElV7wepbHPy2/c+izmuL/ic81aturGiFyRgeMq+cN3WuaztFTXkPTrzzsZGF
|
||||||
|
p/Mx3gqm7Hoc3d2xlv+8L5GjCtEJPlQgZJV+s3ennBjOAd8CC7d9qJetE3Er46pn
|
||||||
|
r5jedV3bQRZYBzmooYNHjbAs26++wYac/jTE0/U6nKS17eWq4BQZUtlMXUw5N81B
|
||||||
|
7LKn7C03rj2KCn+Nf5uin9ALmoy888LXCDdvL/NZkQKBgQDduv1Heu+tOZuNYUdQ
|
||||||
|
Hswmd8sVNAAWGZxdxixHMv58zrgbLFXSX6K89X2l5Sj9XON8TH46MuSFdjSwwWw5
|
||||||
|
fBrhVEhA5srcqpvVWIBE05yqPpt0s1NQktMWJKELWlG8jOhVKwM5OYDpdxtwehpz
|
||||||
|
1g70XJz+nF/LTV8RdTK+OWDDpQKBgQC6MhdbGHUz/56dY3gZpE5TXnN2hkNbZCgk
|
||||||
|
emr6z85VHhQflZbedhCzB9PUnZnCKWOGQHQdxRTtRfd46LVboZqCdYO1ZNQv6toP
|
||||||
|
ysS7dTpZZFy7CpQaW0Y6/jS65jW6xIDKR1W40vgltZ3sfpG37JaowpzWdw2WuOnw
|
||||||
|
Bg0rcJAf8wKBgQCqE+p/z97UwuF8eufWnyj9QNo382E1koOMspv4KTdnyLETtthF
|
||||||
|
vDH6O1wbykG8xmmASLRyM+NyNA+KnXNETNvZh2q8zctBpGRQK8iIAsGjHM7ln0AD
|
||||||
|
B/x+ea5GJQuZU4RK/+lDFca6TjBwAFkWDVX/PqL18kDQkxKfM4SuwRhmOQKBgDGh
|
||||||
|
eoJIsa0LnP787Z2AI3Srf4F/ZmLs/ppCm1OBotEjdF+64v0nYWonUvqgi8SqfaHi
|
||||||
|
elEZIGvis4ViGj1zhRjzNAlc+AZRxpBhDzGcnNIJI4Kj3jhsTfsZmXqcNIQ1LtM8
|
||||||
|
Uogyi/yZPaA1WKg7Aym2vlGYaGHdplXZdxc2KOSrAoGABRkD9l2OVcwK7RyNgFxo
|
||||||
|
mjxx0tfUdDBhHIi2igih1FiHpeP9E+4/kE/K7PnU9DoDrL1jW1MTpXaYV4seOylk
|
||||||
|
k9z/9QfcRa9ePD2N4FqbHWSYp5n3aLoIcGq/9jyjTwayZbbIhWO+vNuHE9wIvecZ
|
||||||
|
8x3gNkxJRb4NaLIoNzAhCoo=
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -8,6 +8,17 @@
|
||||||
//
|
//
|
||||||
// For product documentation, see: https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials
|
// For product documentation, see: https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials
|
||||||
//
|
//
|
||||||
|
// # Library status
|
||||||
|
//
|
||||||
|
// These client libraries are officially supported by Google. However, this
|
||||||
|
// library is considered complete and is in maintenance mode. This means
|
||||||
|
// that we will address critical bugs and security issues but will not add
|
||||||
|
// any new features.
|
||||||
|
//
|
||||||
|
// When possible, we recommend using our newer
|
||||||
|
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
|
||||||
|
// that are still actively being worked and iterated on.
|
||||||
|
//
|
||||||
// # Creating a client
|
// # Creating a client
|
||||||
//
|
//
|
||||||
// Usage example:
|
// Usage example:
|
||||||
|
|
@ -17,24 +28,26 @@
|
||||||
// ctx := context.Background()
|
// ctx := context.Background()
|
||||||
// iamcredentialsService, err := iamcredentials.NewService(ctx)
|
// iamcredentialsService, err := iamcredentials.NewService(ctx)
|
||||||
//
|
//
|
||||||
// In this example, Google Application Default Credentials are used for authentication.
|
// In this example, Google Application Default Credentials are used for
|
||||||
//
|
// authentication. For information on how to create and obtain Application
|
||||||
// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
|
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
|
||||||
//
|
//
|
||||||
// # Other authentication options
|
// # Other authentication options
|
||||||
//
|
//
|
||||||
// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey:
|
// To use an API key for authentication (note: some APIs do not support API
|
||||||
|
// keys), use [google.golang.org/api/option.WithAPIKey]:
|
||||||
//
|
//
|
||||||
// iamcredentialsService, err := iamcredentials.NewService(ctx, option.WithAPIKey("AIza..."))
|
// iamcredentialsService, err := iamcredentials.NewService(ctx, option.WithAPIKey("AIza..."))
|
||||||
//
|
//
|
||||||
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource:
|
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
|
||||||
|
// flow, use [google.golang.org/api/option.WithTokenSource]:
|
||||||
//
|
//
|
||||||
// config := &oauth2.Config{...}
|
// config := &oauth2.Config{...}
|
||||||
// // ...
|
// // ...
|
||||||
// token, err := config.Exchange(ctx, ...)
|
// token, err := config.Exchange(ctx, ...)
|
||||||
// iamcredentialsService, err := iamcredentials.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
|
// iamcredentialsService, err := iamcredentials.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
|
||||||
//
|
//
|
||||||
// See https://godoc.org/google.golang.org/api/option/ for details on options.
|
// See [google.golang.org/api/option.ClientOption] for details on options.
|
||||||
package iamcredentials // import "google.golang.org/api/iamcredentials/v1"
|
package iamcredentials // import "google.golang.org/api/iamcredentials/v1"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "0.138.0"
|
const Version = "0.139.0"
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,17 @@
|
||||||
//
|
//
|
||||||
// For product documentation, see: https://developers.google.com/storage/docs/json_api/
|
// For product documentation, see: https://developers.google.com/storage/docs/json_api/
|
||||||
//
|
//
|
||||||
|
// # Library status
|
||||||
|
//
|
||||||
|
// These client libraries are officially supported by Google. However, this
|
||||||
|
// library is considered complete and is in maintenance mode. This means
|
||||||
|
// that we will address critical bugs and security issues but will not add
|
||||||
|
// any new features.
|
||||||
|
//
|
||||||
|
// When possible, we recommend using our newer
|
||||||
|
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
|
||||||
|
// that are still actively being worked and iterated on.
|
||||||
|
//
|
||||||
// # Creating a client
|
// # Creating a client
|
||||||
//
|
//
|
||||||
// Usage example:
|
// Usage example:
|
||||||
|
|
@ -19,28 +30,31 @@
|
||||||
// ctx := context.Background()
|
// ctx := context.Background()
|
||||||
// storageService, err := storage.NewService(ctx)
|
// storageService, err := storage.NewService(ctx)
|
||||||
//
|
//
|
||||||
// In this example, Google Application Default Credentials are used for authentication.
|
// In this example, Google Application Default Credentials are used for
|
||||||
//
|
// authentication. For information on how to create and obtain Application
|
||||||
// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
|
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
|
||||||
//
|
//
|
||||||
// # Other authentication options
|
// # Other authentication options
|
||||||
//
|
//
|
||||||
// By default, all available scopes (see "Constants") are used to authenticate. To restrict scopes, use option.WithScopes:
|
// By default, all available scopes (see "Constants") are used to authenticate.
|
||||||
|
// To restrict scopes, use [google.golang.org/api/option.WithScopes]:
|
||||||
//
|
//
|
||||||
// storageService, err := storage.NewService(ctx, option.WithScopes(storage.DevstorageReadWriteScope))
|
// storageService, err := storage.NewService(ctx, option.WithScopes(storage.DevstorageReadWriteScope))
|
||||||
//
|
//
|
||||||
// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey:
|
// To use an API key for authentication (note: some APIs do not support API
|
||||||
|
// keys), use [google.golang.org/api/option.WithAPIKey]:
|
||||||
//
|
//
|
||||||
// storageService, err := storage.NewService(ctx, option.WithAPIKey("AIza..."))
|
// storageService, err := storage.NewService(ctx, option.WithAPIKey("AIza..."))
|
||||||
//
|
//
|
||||||
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource:
|
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
|
||||||
|
// flow, use [google.golang.org/api/option.WithTokenSource]:
|
||||||
//
|
//
|
||||||
// config := &oauth2.Config{...}
|
// config := &oauth2.Config{...}
|
||||||
// // ...
|
// // ...
|
||||||
// token, err := config.Exchange(ctx, ...)
|
// token, err := config.Exchange(ctx, ...)
|
||||||
// storageService, err := storage.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
|
// storageService, err := storage.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
|
||||||
//
|
//
|
||||||
// See https://godoc.org/google.golang.org/api/option/ for details on options.
|
// See [google.golang.org/api/option.ClientOption] for details on options.
|
||||||
package storage // import "google.golang.org/api/storage/v1"
|
package storage // import "google.golang.org/api/storage/v1"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
||||||
|
|
@ -573,8 +573,8 @@ github.com/google/go-github/github
|
||||||
# github.com/google/go-querystring v1.1.0
|
# github.com/google/go-querystring v1.1.0
|
||||||
## explicit; go 1.10
|
## explicit; go 1.10
|
||||||
github.com/google/go-querystring/query
|
github.com/google/go-querystring/query
|
||||||
# github.com/google/s2a-go v0.1.5
|
# github.com/google/s2a-go v0.1.7
|
||||||
## explicit; go 1.16
|
## explicit; go 1.19
|
||||||
github.com/google/s2a-go
|
github.com/google/s2a-go
|
||||||
github.com/google/s2a-go/fallback
|
github.com/google/s2a-go/fallback
|
||||||
github.com/google/s2a-go/internal/authinfo
|
github.com/google/s2a-go/internal/authinfo
|
||||||
|
|
@ -946,7 +946,7 @@ golang.org/x/tools/internal/typesinternal
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/xerrors
|
golang.org/x/xerrors
|
||||||
golang.org/x/xerrors/internal
|
golang.org/x/xerrors/internal
|
||||||
# google.golang.org/api v0.138.0
|
# google.golang.org/api v0.139.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/api/googleapi
|
google.golang.org/api/googleapi
|
||||||
google.golang.org/api/googleapi/transport
|
google.golang.org/api/googleapi/transport
|
||||||
|
|
@ -987,7 +987,7 @@ google.golang.org/genproto/internal
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/api
|
google.golang.org/genproto/googleapis/api
|
||||||
google.golang.org/genproto/googleapis/api/annotations
|
google.golang.org/genproto/googleapis/api/annotations
|
||||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20230807174057-1744710a1577
|
# google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
google.golang.org/genproto/googleapis/rpc/code
|
google.golang.org/genproto/googleapis/rpc/code
|
||||||
google.golang.org/genproto/googleapis/rpc/errdetails
|
google.golang.org/genproto/googleapis/rpc/errdetails
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue