[ARVADOS] created: 1.3.0-1849-gca6544470
Git user
git at public.curoverse.com
Wed Nov 13 22:11:49 UTC 2019
at ca6544470298ca1586b7de5ead8c5ff4894443fe (commit)
commit ca6544470298ca1586b7de5ead8c5ff4894443fe
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Wed Nov 13 16:34:58 2019 -0500
15107: Clean up debug logs.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/lib/controller/localdb/login.go b/lib/controller/localdb/login.go
index 6d60adf14..13ae366eb 100644
--- a/lib/controller/localdb/login.go
+++ b/lib/controller/localdb/login.go
@@ -128,7 +128,7 @@ func (ctrl *googleLoginController) Login(ctx context.Context, cluster *arvados.C
// Google API does not indicate one.
func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, cluster *arvados.Cluster, conf *oauth2.Config, token *oauth2.Token, idToken *oidc.IDToken) (*rpc.UserSessionAuthInfo, error) {
var ret rpc.UserSessionAuthInfo
- defer ctxlog.FromContext(ctx).Infof("ret: %#v", &ret) // debug
+ defer ctxlog.FromContext(ctx).WithField("ret", &ret).Debug("getAuthInfo returned")
var claims struct {
Name string `json:"name"`
@@ -176,8 +176,6 @@ func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, cluster *arv
}
}
- ctxlog.FromContext(ctx).Infof("people/me response: %#v", person) // debug
-
// The given/family names returned by the People API and
// flagged as "primary" (if any) take precedence over the
// split-by-whitespace result from above.
@@ -195,7 +193,7 @@ func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, cluster *arv
}
for _, ea := range person.EmailAddresses {
if ea.Metadata == nil || !ea.Metadata.Verified {
- ctxlog.FromContext(ctx).WithField("address", ea.Value).Debug("skipping unverified email address")
+ ctxlog.FromContext(ctx).WithField("address", ea.Value).Info("skipping unverified email address")
continue
}
altEmails[ea.Value] = true
commit c38a28a51ba3fbe3fe58e72a5e16c27f79c89719
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Wed Nov 13 16:33:47 2019 -0500
15107: Fix personFields parameter.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/lib/controller/localdb/login.go b/lib/controller/localdb/login.go
index df5259a84..6d60adf14 100644
--- a/lib/controller/localdb/login.go
+++ b/lib/controller/localdb/login.go
@@ -164,7 +164,7 @@ func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, cluster *arv
// Override normal API endpoint (for testing)
svc.BasePath = p
}
- person, err := people.NewPeopleService(svc).Get("people/me").Fields("emailAddresses,names").Do()
+ person, err := people.NewPeopleService(svc).Get("people/me").PersonFields("emailAddresses,names").Do()
if err != nil {
if strings.Contains(err.Error(), "Error 403") && strings.Contains(err.Error(), "accessNotConfigured") {
// Log the original API error, but display
diff --git a/lib/controller/localdb/login_test.go b/lib/controller/localdb/login_test.go
index e722d04d5..c5b9ee068 100644
--- a/lib/controller/localdb/login_test.go
+++ b/lib/controller/localdb/login_test.go
@@ -133,7 +133,7 @@ func (s *LoginSuite) SetUpTest(c *check.C) {
w.Header().Set("Content-Type", "application/json")
switch req.URL.Path {
case "/v1/people/me":
- if f := req.Form.Get("fields"); f != "emailAddresses,names" {
+ if f := req.Form.Get("personFields"); f != "emailAddresses,names" {
w.WriteHeader(http.StatusBadRequest)
break
}
commit bf51a7513e3c82f9f6e662597bb9db217463af9c
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Tue Nov 12 11:32:57 2019 -0500
15107: Add config option to skip alternate email addrs / People API.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/lib/config/config.default.yml b/lib/config/config.default.yml
index 0cf7b5e69..81c36b9bf 100644
--- a/lib/config/config.default.yml
+++ b/lib/config/config.default.yml
@@ -511,6 +511,12 @@ Clusters:
GoogleClientID: ""
GoogleClientSecret: ""
+ # Allow users to log in to existing accounts using any verified
+ # email address listed by their Google account. If true, the
+ # Google People API must be enabled in order for Google login to
+ # work. If false, only the primary email address will be used.
+ GoogleAlternateEmailAddresses: true
+
# The cluster ID to delegate the user database. When set,
# logins on this cluster will be redirected to the login cluster
# (login cluster must appear in RemoteHosts with Proxy: true)
diff --git a/lib/config/export.go b/lib/config/export.go
index 0dd90ff65..7adacab4c 100644
--- a/lib/config/export.go
+++ b/lib/config/export.go
@@ -132,6 +132,7 @@ var whitelist = map[string]bool{
"Login": true,
"Login.GoogleClientID": false,
"Login.GoogleClientSecret": false,
+ "Login.GoogleAlternateEmailAddresses": false,
"Login.ProviderAppID": false,
"Login.ProviderAppSecret": false,
"Login.LoginCluster": true,
diff --git a/lib/config/generated_config.go b/lib/config/generated_config.go
index 4dc00cf62..68dea169f 100644
--- a/lib/config/generated_config.go
+++ b/lib/config/generated_config.go
@@ -517,6 +517,12 @@ Clusters:
GoogleClientID: ""
GoogleClientSecret: ""
+ # Allow users to log in to existing accounts using any verified
+ # email address listed by their Google account. If true, the
+ # Google People API must be enabled in order for Google login to
+ # work. If false, only the primary email address will be used.
+ GoogleAlternateEmailAddresses: true
+
# The cluster ID to delegate the user database. When set,
# logins on this cluster will be redirected to the login cluster
# (login cluster must appear in RemoteHosts with Proxy: true)
diff --git a/lib/controller/localdb/login.go b/lib/controller/localdb/login.go
index ddd342699..df5259a84 100644
--- a/lib/controller/localdb/login.go
+++ b/lib/controller/localdb/login.go
@@ -110,7 +110,7 @@ func (ctrl *googleLoginController) Login(ctx context.Context, cluster *arvados.C
if err != nil {
return ctrl.loginError(fmt.Errorf("error verifying ID token: %s", err))
}
- authinfo, err := ctrl.getAuthInfo(ctx, conf, oauth2Token, idToken)
+ authinfo, err := ctrl.getAuthInfo(ctx, cluster, conf, oauth2Token, idToken)
if err != nil {
return ctrl.loginError(err)
}
@@ -126,7 +126,7 @@ func (ctrl *googleLoginController) Login(ctx context.Context, cluster *arvados.C
// primary address at index 0. The provided defaultAddr is always
// included in the returned slice, and is used as the primary if the
// Google API does not indicate one.
-func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, conf *oauth2.Config, token *oauth2.Token, idToken *oidc.IDToken) (*rpc.UserSessionAuthInfo, error) {
+func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, cluster *arvados.Cluster, conf *oauth2.Config, token *oauth2.Token, idToken *oidc.IDToken) (*rpc.UserSessionAuthInfo, error) {
var ret rpc.UserSessionAuthInfo
defer ctxlog.FromContext(ctx).Infof("ret: %#v", &ret) // debug
@@ -149,6 +149,13 @@ func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, conf *oauth2
ret.Email = claims.Email
}
+ if !cluster.Login.GoogleAlternateEmailAddresses {
+ if ret.Email == "" {
+ return nil, fmt.Errorf("cannot log in with unverified email address %q", claims.Email)
+ }
+ return &ret, nil
+ }
+
svc, err := people.NewService(ctx, option.WithTokenSource(conf.TokenSource(ctx, token)), option.WithScopes(people.UserEmailsReadScope))
if err != nil {
return nil, fmt.Errorf("error setting up People API: %s", err)
@@ -159,12 +166,12 @@ func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, conf *oauth2
}
person, err := people.NewPeopleService(svc).Get("people/me").Fields("emailAddresses,names").Do()
if err != nil {
- if strings.Contains(err.Error(), "Error 403") && strings.Contains(err.Error(), "accessNotConfigured") && ret.Email != "" {
- // Fall back on the primary email from the OAuth2 token.
- ctxlog.FromContext(ctx).WithError(err).WithField("email", ret.Email).Warn("cannot look up alternate email addresses because People API is not enabled")
- return &ret, nil
+ if strings.Contains(err.Error(), "Error 403") && strings.Contains(err.Error(), "accessNotConfigured") {
+ // Log the original API error, but display
+ // only the "fix config" advice to the user.
+ ctxlog.FromContext(ctx).WithError(err).WithField("email", ret.Email).Error("People API is not enabled")
+ return nil, errors.New("configuration error: Login.GoogleAlternateEmailAddresses is true, but Google People API is not enabled")
} else {
- // Unexpected error, or no email to fall back on.
return nil, fmt.Errorf("error getting profile info from People API: %s", err)
}
}
diff --git a/lib/controller/localdb/login_test.go b/lib/controller/localdb/login_test.go
index e36571ef1..e722d04d5 100644
--- a/lib/controller/localdb/login_test.go
+++ b/lib/controller/localdb/login_test.go
@@ -209,6 +209,39 @@ func (s *LoginSuite) TestGoogleLogin_InvalidState(c *check.C) {
c.Check(resp.HTML.String(), check.Matches, `(?ms).*invalid OAuth2 state.*`)
}
+func (s *LoginSuite) setupPeopleAPIError(c *check.C) {
+ s.fakePeopleAPI = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
+ w.WriteHeader(http.StatusForbidden)
+ fmt.Fprintln(w, `Error 403: accessNotConfigured`)
+ }))
+ s.localdb.googleLoginController.peopleAPIBasePath = s.fakePeopleAPI.URL
+}
+
+func (s *LoginSuite) TestGoogleLogin_PeopleAPIDisabled(c *check.C) {
+ s.cluster.Login.GoogleAlternateEmailAddresses = false
+ s.authEmail = "joe.smith at primary.example.com"
+ s.setupPeopleAPIError(c)
+ state := s.startLogin(c)
+ _, err := s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+ c.Check(err, check.IsNil)
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.Email, check.Equals, "joe.smith at primary.example.com")
+}
+
+func (s *LoginSuite) TestGoogleLogin_PeopleAPIError(c *check.C) {
+ s.setupPeopleAPIError(c)
+ state := s.startLogin(c)
+ resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+ c.Check(err, check.IsNil)
+ c.Check(resp.RedirectLocation, check.Equals, "")
+}
+
func (s *LoginSuite) TestGoogleLogin_Success(c *check.C) {
state := s.startLogin(c)
resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{
diff --git a/sdk/go/arvados/config.go b/sdk/go/arvados/config.go
index 6ec8f345d..805efb7db 100644
--- a/sdk/go/arvados/config.go
+++ b/sdk/go/arvados/config.go
@@ -132,12 +132,13 @@ type Cluster struct {
Repositories string
}
Login struct {
- GoogleClientID string
- GoogleClientSecret string
- ProviderAppID string
- ProviderAppSecret string
- LoginCluster string
- RemoteTokenRefresh Duration
+ GoogleClientID string
+ GoogleClientSecret string
+ GoogleAlternateEmailAddresses bool
+ ProviderAppID string
+ ProviderAppSecret string
+ LoginCluster string
+ RemoteTokenRefresh Duration
}
Mail struct {
MailchimpAPIKey string
commit f00aabd51e64355ca9f6001bd0f87fd162812915
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Tue Nov 12 09:35:46 2019 -0500
15107: Migrate govendor to go mod.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/build/run-build-packages.sh b/build/run-build-packages.sh
index fd313cf10..a07b30817 100755
--- a/build/run-build-packages.sh
+++ b/build/run-build-packages.sh
@@ -281,7 +281,6 @@ debug_echo -e "\nPython packages\n"
# Go binaries
cd $WORKSPACE/packages/$TARGET
export GOPATH=$(mktemp -d)
-go get github.com/kardianos/govendor
package_go_binary cmd/arvados-client arvados-client \
"Arvados command line tool (beta)"
package_go_binary cmd/arvados-server arvados-server \
diff --git a/build/run-library.sh b/build/run-library.sh
index 95f2ff145..cc491770c 100755
--- a/build/run-library.sh
+++ b/build/run-library.sh
@@ -110,11 +110,7 @@ calculate_go_package_version() {
local -n __returnvar="$1"; shift
local src_path="$1"; shift
- mkdir -p "$GOPATH/src/git.curoverse.com"
- ln -sfn "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git"
- (cd "$GOPATH/src/git.curoverse.com/arvados.git" && "$GOPATH/bin/govendor" sync -v)
-
- cd "$GOPATH/src/git.curoverse.com/arvados.git/$src_path"
+ cd "$WORKSPACE/$src_path"
local version="$(version_from_git)"
local timestamp="$(timestamp_from_git)"
@@ -126,7 +122,7 @@ calculate_go_package_version() {
checkdirs+=(sdk/go lib)
fi
for dir in ${checkdirs[@]}; do
- cd "$GOPATH/src/git.curoverse.com/arvados.git/$dir"
+ cd "$WORKSPACE/$dir"
ts="$(timestamp_from_git)"
if [[ "$ts" -gt "$timestamp" ]]; then
version=$(version_from_git)
diff --git a/build/run-tests.sh b/build/run-tests.sh
index 0014547ce..8cf61b9ed 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -631,26 +631,7 @@ initialize() {
}
install_env() {
- (
- set -e
- mkdir -p "$GOPATH/src/git.curoverse.com"
- if [[ ! -h "$GOPATH/src/git.curoverse.com/arvados.git" ]]; then
- for d in \
- "$GOPATH/src/git.curoverse.com/arvados.git/tmp/GOPATH" \
- "$GOPATH/src/git.curoverse.com/arvados.git/tmp" \
- "$GOPATH/src/git.curoverse.com/arvados.git/arvados" \
- "$GOPATH/src/git.curoverse.com/arvados.git"; do
- [[ -h "$d" ]] && rm "$d"
- [[ -d "$d" ]] && rmdir "$d"
- done
- fi
- ln -vsfT "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git"
- go get -v github.com/kardianos/govendor
- cd "$GOPATH/src/git.curoverse.com/arvados.git"
- go get -v -d ...
- "$GOPATH/bin/govendor" sync
- which goimports >/dev/null || go get golang.org/x/tools/cmd/goimports
- ) || fatal "Go setup failed"
+ which goimports >/dev/null || go get golang.org/x/tools/cmd/goimports || fatal "Go setup failed"
setup_virtualenv "$VENVDIR" --python python2.7
. "$VENVDIR/bin/activate"
@@ -735,7 +716,7 @@ do_test() {
stop_services
check_arvados_config "$1"
;;
- gofmt | govendor | doc | lib/cli | lib/cloud/azure | lib/cloud/ec2 | lib/cloud/cloudtest | lib/cmd | lib/dispatchcloud/ssh_executor | lib/dispatchcloud/worker)
+ gofmt | doc | lib/cli | lib/cloud/azure | lib/cloud/ec2 | lib/cloud/cloudtest | lib/cmd | lib/dispatchcloud/ssh_executor | lib/dispatchcloud/worker)
check_arvados_config "$1"
# don't care whether services are running
;;
@@ -776,7 +757,7 @@ do_test_once() {
# mode makes Go show the wrong line numbers when reporting
# compilation errors.
go get -ldflags "$(go_ldflags)" -t "git.curoverse.com/arvados.git/$1" && \
- cd "$GOPATH/src/git.curoverse.com/arvados.git/$1" && \
+ cd "$WORKSPACE/$1" && \
if [[ -n "${testargs[$1]}" ]]
then
# "go test -check.vv giturl" doesn't work, but this
@@ -1037,27 +1018,6 @@ test_gofmt() {
[[ -z "$(gofmt -e -d $dirs | tee -a /dev/stderr)" ]]
}
-test_govendor() {
- (
- set -e
- cd "$GOPATH/src/git.curoverse.com/arvados.git"
- # Remove cached source dirs in workdir. Otherwise, they will
- # not qualify as +missing or +external below, and we won't be
- # able to detect that they're missing from vendor/vendor.json.
- rm -rf vendor/*/
- go get -v -d ...
- "$GOPATH/bin/govendor" sync
- if [[ -n $("$GOPATH/bin/govendor" list +unused +missing +external | tee /dev/stderr) ]]; then
- echo >&2 "vendor/vendor.json has unused or missing dependencies -- try:
-
-(export GOPATH=\"${GOPATH}\"; cd \$GOPATH/src/git.curoverse.com/arvados.git && \$GOPATH/bin/govendor add +missing +external && \$GOPATH/bin/govendor remove +unused)
-
-"
- return 1
- fi
- )
-}
-
test_services/api() {
rm -f "$WORKSPACE/services/api/git-commit.version"
cd "$WORKSPACE/services/api" \
@@ -1183,7 +1143,6 @@ test_all() {
fi
do_test gofmt
- do_test govendor
do_test doc
do_test sdk/ruby
do_test sdk/R
diff --git a/go.mod b/go.mod
new file mode 100644
index 000000000..efea57d73
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,65 @@
+module git.curoverse.com/arvados.git
+
+go 1.13
+
+require (
+ github.com/AdRoll/goamz v0.0.0-20170825154802-2731d20f46f4
+ github.com/Azure/azure-sdk-for-go v19.1.0+incompatible
+ github.com/Azure/go-autorest v10.15.2+incompatible
+ github.com/Microsoft/go-winio v0.4.5 // indirect
+ github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 // indirect
+ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 // indirect
+ github.com/aws/aws-sdk-go v1.25.30
+ github.com/coreos/go-oidc v2.1.0+incompatible
+ github.com/coreos/go-systemd v0.0.0-20180108085132-cc4f39464dc7
+ github.com/dgrijalva/jwt-go v3.1.0+incompatible // indirect
+ github.com/dimchansky/utfbom v1.0.0 // indirect
+ github.com/dnaeon/go-vcr v1.0.1 // indirect
+ github.com/docker/distribution v2.6.0-rc.1.0.20180105232752-277ed486c948+incompatible // indirect
+ github.com/docker/docker v1.4.2-0.20180109013817-94b8a116fbf1
+ github.com/docker/go-connections v0.3.0 // indirect
+ github.com/docker/go-units v0.3.3-0.20171221200356-d59758554a3d // indirect
+ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
+ github.com/ghodss/yaml v1.0.0
+ github.com/gliderlabs/ssh v0.2.2 // indirect
+ github.com/gogo/protobuf v1.1.1
+ github.com/gorilla/context v1.1.1 // indirect
+ github.com/gorilla/mux v1.6.1-0.20180107155708-5bbbb5b2b572
+ github.com/hashicorp/golang-lru v0.5.1
+ github.com/imdario/mergo v0.3.8-0.20190415133143-5ef87b449ca7
+ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
+ github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff
+ github.com/julienschmidt/httprouter v1.2.0
+ github.com/kevinburke/ssh_config v0.0.0-20171013211458-802051befeb5 // indirect
+ github.com/lib/pq v0.0.0-20171126050459-83612a56d3dd
+ github.com/marstr/guid v1.1.1-0.20170427235115-8bdf7d1a087c // indirect
+ github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 // indirect
+ github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
+ github.com/opencontainers/image-spec v1.0.1-0.20171125024018-577479e4dc27 // indirect
+ github.com/pelletier/go-buffruneio v0.2.0 // indirect
+ github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
+ github.com/prometheus/client_golang v1.2.1
+ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4
+ github.com/prometheus/common v0.7.0
+ github.com/satori/go.uuid v1.2.1-0.20180103174451-36e9d2ebbde5 // indirect
+ github.com/sergi/go-diff v1.0.0 // indirect
+ github.com/sirupsen/logrus v1.4.2
+ github.com/src-d/gcfg v1.3.0 // indirect
+ github.com/stretchr/testify v1.4.0 // indirect
+ github.com/xanzy/ssh-agent v0.1.0 // indirect
+ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
+ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980
+ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
+ golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd // indirect
+ google.golang.org/api v0.13.0
+ gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405
+ gopkg.in/square/go-jose.v2 v2.3.1
+ gopkg.in/src-d/go-billy.v4 v4.0.1
+ gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 // indirect
+ gopkg.in/src-d/go-git.v4 v4.0.0
+ gopkg.in/warnings.v0 v0.1.2 // indirect
+ gopkg.in/yaml.v2 v2.2.4 // indirect
+ rsc.io/getopt v0.0.0-20170811000552-20be20937449
+)
+
+replace github.com/AdRoll/goamz => github.com/curoverse/goamz v0.0.0-20190905141525-1bba09f407ef
diff --git a/go.sum b/go.sum
new file mode 100644
index 000000000..45ba0b179
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,256 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+github.com/Azure/azure-sdk-for-go v19.1.0+incompatible h1:ysqLW+tqZjJWOTE74heH/pDRbr4vlN3yV+dqQYgpyxw=
+github.com/Azure/azure-sdk-for-go v19.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
+github.com/Azure/go-autorest v10.15.2+incompatible h1:oZpnRzZie83xGV5txbT1aa/7zpCPvURGhV6ThJij2bs=
+github.com/Azure/go-autorest v10.15.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Microsoft/go-winio v0.4.5 h1:U2XsGR5dBg1yzwSEJoP2dE2/aAXpmad+CNG2hE9Pd5k=
+github.com/Microsoft/go-winio v0.4.5/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
+github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
+github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
+github.com/aws/aws-sdk-go v1.25.30 h1:I9qj6zW3mMfsg91e+GMSN/INcaX9tTFvr/l/BAHKaIY=
+github.com/aws/aws-sdk-go v1.25.30/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA=
+github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM=
+github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/coreos/go-systemd v0.0.0-20180108085132-cc4f39464dc7 h1:e3u8KWFMR3irlDo1Z/tL8Hsz1MJmCLkSoX5AZRMKZkg=
+github.com/coreos/go-systemd v0.0.0-20180108085132-cc4f39464dc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/curoverse/goamz v0.0.0-20190905141525-1bba09f407ef h1:k3Q9m06dbTShrR4phl/QNi15ZSPkIwgyQmNvJRcXR3Y=
+github.com/curoverse/goamz v0.0.0-20190905141525-1bba09f407ef/go.mod h1:NUkr+hZ9k+l0cEXg9S7EW8+UIfPkP/hNy2Ga0QVPZ88=
+github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgrijalva/jwt-go v3.1.0+incompatible h1:FFziAwDQQ2dz1XClWMkwvukur3evtZx7x/wMHKM1i20=
+github.com/dgrijalva/jwt-go v3.1.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dimchansky/utfbom v1.0.0 h1:fGC2kkf4qOoKqZ4q7iIh+Vef4ubC1c38UDsEyZynZPc=
+github.com/dimchansky/utfbom v1.0.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
+github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
+github.com/docker/distribution v2.6.0-rc.1.0.20180105232752-277ed486c948+incompatible h1:PVtvnmmxSMUcT5AY6vG7sCCzRg3eyoW6vQvXtITC60c=
+github.com/docker/distribution v2.6.0-rc.1.0.20180105232752-277ed486c948+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v1.4.2-0.20180109013817-94b8a116fbf1 h1:0NaIDWeMBQIQACbThhJaL8lts6EMPSTCMLeDstJ6gU8=
+github.com/docker/docker v1.4.2-0.20180109013817-94b8a116fbf1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.3.0 h1:3lOnM9cSzgGwx8VfK/NGOW5fLQ0GjIlCkaktF+n1M6o=
+github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-units v0.3.3-0.20171221200356-d59758554a3d h1:dVaNRYvaGV23AdNdsm+4y1mPN0tj3/1v6taqKMmM6Ko=
+github.com/docker/go-units v0.3.3-0.20171221200356-d59758554a3d/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
+github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
+github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/mux v1.6.1-0.20180107155708-5bbbb5b2b572 h1:eWMpQtfzS3D63EI50baSfP/zjyqFM9tDfvVyAlCIMic=
+github.com/gorilla/mux v1.6.1-0.20180107155708-5bbbb5b2b572/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/imdario/mergo v0.3.8-0.20190415133143-5ef87b449ca7 h1:kUGMXUVH7IU1rKA3TZu9ROUE61dVv2SSgSsdeYKm0mg=
+github.com/imdario/mergo v0.3.8-0.20190415133143-5ef87b449ca7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
+github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff h1:6NvhExg4omUC9NfA+l4Oq3ibNNeJUdiAF3iBVB0PlDk=
+github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff/go.mod h1:ddfPX8Z28YMjiqoaJhNBzWHapTHXejnB5cDCUWDwriw=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/kevinburke/ssh_config v0.0.0-20171013211458-802051befeb5 h1:xXn0nBttYwok7DhU4RxqaADEpQn7fEMt5kKc3yoj/n0=
+github.com/kevinburke/ssh_config v0.0.0-20171013211458-802051befeb5/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/lib/pq v0.0.0-20171126050459-83612a56d3dd h1:2RDaVc4/izhWyAvYxNm8c9saSyCDIxefNwOcqaH7pcU=
+github.com/lib/pq v0.0.0-20171126050459-83612a56d3dd/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/marstr/guid v1.1.1-0.20170427235115-8bdf7d1a087c h1:ouxemItv3B/Zh008HJkEXDYCN3BIRyNHxtUN7ThJ5Js=
+github.com/marstr/guid v1.1.1-0.20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 h1:eQox4Rh4ewJF+mqYPxCkmBAirRnPaHEB26UkNuPyjlk=
+github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
+github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/image-spec v1.0.1-0.20171125024018-577479e4dc27 h1:8Q+VFspwMHwvVvpSS8xpuFQR7RpGX8G8ECXwgc/05sg=
+github.com/opencontainers/image-spec v1.0.1-0.20171125024018-577479e4dc27/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA=
+github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU=
+github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI=
+github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY=
+github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
+github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/satori/go.uuid v1.2.1-0.20180103174451-36e9d2ebbde5 h1:Jw7W4WMfQDxsXvfeFSaS2cHlY7bAF4MGrgnbd0+Uo78=
+github.com/satori/go.uuid v1.2.1-0.20180103174451-36e9d2ebbde5/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
+github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/src-d/gcfg v1.3.0 h1:2BEDr8r0I0b8h/fOqwtxCEiq2HJu8n2JGZJQFGXWLjg=
+github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/xanzy/ssh-agent v0.1.0 h1:lOhdXLxtmYjaHc76ZtNmJWPg948y/RnT+3N3cvKWFzY=
+github.com/xanzy/ssh-agent v0.1.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8=
+go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd h1:3x5uuvBgE6oaXJjCOvpCC1IpgJogqQ+PqGGU3ZxAgII=
+golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.13.0 h1:Q3Ui3V3/CVinFWFiW39Iw0kMuVrRzYX0wN6OPFp0lTA=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+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.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 h1:nfPFGzJkUDX6uBmpN/pSw7MbOAWegH5QDQuoXFHedLg=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405 h1:829vOVxxusYHC+IqBtkX5mbKtsY9fheQiQn0MZRVLfQ=
+gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/src-d/go-billy.v4 v4.0.1 h1:iMxwQPj2cuKRyaIZ985zxClkcdTtT5VpXYf4PTJc0Ek=
+gopkg.in/src-d/go-billy.v4 v4.0.1/go.mod h1:ZHSF0JP+7oD97194otDUCD7Ofbk63+xFcfWP5bT6h+Q=
+gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg=
+gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g=
+gopkg.in/src-d/go-git.v4 v4.0.0 h1:9ZRNKHuhaTaJRGcGaH6Qg7uUORO2X0MNB5WL/CDdqto=
+gopkg.in/src-d/go-git.v4 v4.0.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo=
+gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+rsc.io/getopt v0.0.0-20170811000552-20be20937449 h1:UukjJOsjQH0DIuyyrcod6CXHS6cdaMMuJmrt+SN1j4A=
+rsc.io/getopt v0.0.0-20170811000552-20be20937449/go.mod h1:dhCdeqAxkyt5u3/sKRkUXuHaMXUu1Pt13GTQAM2xnig=
diff --git a/services/keep-web/handler_test.go b/services/keep-web/handler_test.go
index aefd0fd08..14389d191 100644
--- a/services/keep-web/handler_test.go
+++ b/services/keep-web/handler_test.go
@@ -811,7 +811,12 @@ func (s *IntegrationSuite) testDirectoryListing(c *check.C) {
} else {
c.Check(resp.Code, check.Equals, http.StatusMultiStatus, comment)
for _, e := range trial.expect {
- c.Check(resp.Body.String(), check.Matches, `(?ms).*<D:href>`+filepath.Join(u.Path, e)+`</D:href>.*`, comment)
+ if strings.HasSuffix(e, "/") {
+ e = filepath.Join(u.Path, e) + "/"
+ } else {
+ e = filepath.Join(u.Path, e)
+ }
+ c.Check(resp.Body.String(), check.Matches, `(?ms).*<D:href>`+e+`</D:href>.*`, comment)
}
}
}
diff --git a/services/keep-web/server_test.go b/services/keep-web/server_test.go
index 0d2e776f1..ad6943950 100644
--- a/services/keep-web/server_test.go
+++ b/services/keep-web/server_test.go
@@ -342,12 +342,8 @@ func (s *IntegrationSuite) TestMetrics(c *check.C) {
c.Assert(err, check.IsNil)
c.Check(resp.StatusCode, check.Equals, http.StatusOK)
type summary struct {
- SampleCount string `json:"sample_count"`
- SampleSum float64 `json:"sample_sum"`
- Quantile []struct {
- Quantile float64
- Value float64
- }
+ SampleCount string
+ SampleSum float64
}
type counter struct {
Value int64
diff --git a/services/keepstore/mounts_test.go b/services/keepstore/mounts_test.go
index 9b5606b5c..dd6247f8b 100644
--- a/services/keepstore/mounts_test.go
+++ b/services/keepstore/mounts_test.go
@@ -107,12 +107,8 @@ func (s *HandlerSuite) TestMetrics(c *check.C) {
Value string
}
Summary struct {
- SampleCount string `json:"sample_count"`
- SampleSum float64 `json:"sample_sum"`
- Quantile []struct {
- Quantile float64
- Value float64
- }
+ SampleCount string
+ SampleSum float64
}
}
}
@@ -124,8 +120,6 @@ func (s *HandlerSuite) TestMetrics(c *check.C) {
for _, m := range g.Metric {
if len(m.Label) == 2 && m.Label[0].Name == "code" && m.Label[0].Value == "200" && m.Label[1].Name == "method" && m.Label[1].Value == "put" {
c.Check(m.Summary.SampleCount, check.Equals, "2")
- c.Check(len(m.Summary.Quantile), check.Not(check.Equals), 0)
- c.Check(m.Summary.Quantile[0].Value, check.Not(check.Equals), float64(0))
found[g.Name] = true
}
}
diff --git a/tools/arvbox/lib/arvbox/docker/go-setup.sh b/tools/arvbox/lib/arvbox/docker/go-setup.sh
index cdd7298da..20b2e30a0 100644
--- a/tools/arvbox/lib/arvbox/docker/go-setup.sh
+++ b/tools/arvbox/lib/arvbox/docker/go-setup.sh
@@ -3,17 +3,10 @@
#
# SPDX-License-Identifier: AGPL-3.0
-mkdir -p /var/lib/gopath
-cd /var/lib/gopath
+export GOPATH=/var/lib/gopath
+mkdir -p $GOPATH
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-
-flock /var/lib/gopath/gopath.lock go get -t github.com/kardianos/govendor
-cd "$GOPATH/src/git.curoverse.com/arvados.git"
+cd /usr/src/arvados
flock /var/lib/gopath/gopath.lock go get -v -d ...
-flock /var/lib/gopath/gopath.lock "$GOPATH/bin/govendor" sync
-
-flock /var/lib/gopath/gopath.lock go get -t "git.curoverse.com/arvados.git/cmd/arvados-server"
+flock /var/lib/gopath/gopath.lock go get -t ./cmd/arvados-server
install $GOPATH/bin/arvados-server /usr/local/bin
diff --git a/vendor/.gitignore b/vendor/.gitignore
deleted file mode 100644
index f902f86bd..000000000
--- a/vendor/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*
-!vendor.json
-!.gitignore
diff --git a/vendor/vendor.json b/vendor/vendor.json
deleted file mode 100644
index 7585a8c9e..000000000
--- a/vendor/vendor.json
+++ /dev/null
@@ -1,1923 +0,0 @@
-{
- "comment": "",
- "ignore": "test appengine",
- "package": [
- {
- "checksumSHA1": "AH7jcN7pvaPDU6UjHdpT081DDGk=",
- "path": "cloud.google.com/go/compute/metadata",
- "revision": "f07fddce3276603951ac45f50f743de632956bef",
- "revisionTime": "2018-05-30T18:12:30Z"
- },
- {
- "checksumSHA1": "jfYWZyRWLMfG0J5K7G2K8a9AKfs=",
- "origin": "github.com/curoverse/goamz/aws",
- "path": "github.com/AdRoll/goamz/aws",
- "revision": "1bba09f407ef1d02c90bc37eff7e91e2231fa587",
- "revisionTime": "2019-09-05T14:15:25Z"
- },
- {
- "checksumSHA1": "lqoARtBgwnvhEhLyIjR3GLnR5/c=",
- "origin": "github.com/curoverse/goamz/s3",
- "path": "github.com/AdRoll/goamz/s3",
- "revision": "1bba09f407ef1d02c90bc37eff7e91e2231fa587",
- "revisionTime": "2019-09-05T14:15:25Z"
- },
- {
- "checksumSHA1": "tvxbsTkdjB0C/uxEglqD6JfVnMg=",
- "origin": "github.com/curoverse/goamz/s3/s3test",
- "path": "github.com/AdRoll/goamz/s3/s3test",
- "revision": "1bba09f407ef1d02c90bc37eff7e91e2231fa587",
- "revisionTime": "2019-09-05T14:15:25Z"
- },
- {
- "checksumSHA1": "KF4DsRUpZ+h+qRQ/umRAQZfVvw0=",
- "path": "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-06-01/compute",
- "revision": "4e8cbbfb1aeab140cd0fa97fd16b64ee18c3ca6a",
- "revisionTime": "2018-07-27T22:05:59Z"
- },
- {
- "checksumSHA1": "IZNzp1cYx+xYHd4gzosKpG6Jr/k=",
- "path": "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2018-06-01/network",
- "revision": "4e8cbbfb1aeab140cd0fa97fd16b64ee18c3ca6a",
- "revisionTime": "2018-07-27T22:05:59Z"
- },
- {
- "checksumSHA1": "W4c2uTDJlwhfryWg9esshmJANo0=",
- "path": "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-02-01/storage",
- "revision": "4e8cbbfb1aeab140cd0fa97fd16b64ee18c3ca6a",
- "revisionTime": "2018-07-27T22:05:59Z"
- },
- {
- "checksumSHA1": "xHZe/h/tyrqmS9qiR03bLfRv5FI=",
- "path": "github.com/Azure/azure-sdk-for-go/storage",
- "revision": "f8eeb65a1a1f969696b49aada9d24073f2c2acd1",
- "revisionTime": "2018-02-15T19:19:13Z"
- },
- {
- "checksumSHA1": "PfyfOXsPbGEWmdh54cguqzdwloY=",
- "path": "github.com/Azure/azure-sdk-for-go/version",
- "revision": "471256ff7c6c93b96131845cef5309d20edd313d",
- "revisionTime": "2018-02-14T01:17:07Z"
- },
- {
- "checksumSHA1": "1Y2+bSzYrdPHQqRjR1OrBMHAvxY=",
- "path": "github.com/Azure/go-autorest/autorest",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "GxL0HHpZDj2milPhR3SPV6MWLPc=",
- "path": "github.com/Azure/go-autorest/autorest/adal",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "ZNgwJOdHZmm4k/HJIbT1L5giO6M=",
- "path": "github.com/Azure/go-autorest/autorest/azure",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "6i7kwcXGTn55WqfubQs21swgr34=",
- "path": "github.com/Azure/go-autorest/autorest/azure/auth",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "9nXCi9qQsYjxCeajJKWttxgEt0I=",
- "path": "github.com/Azure/go-autorest/autorest/date",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "SbBb2GcJNm5GjuPKGL2777QywR4=",
- "path": "github.com/Azure/go-autorest/autorest/to",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "HjdLfAF3oA2In8F3FKh/Y+BPyXk=",
- "path": "github.com/Azure/go-autorest/autorest/validation",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "b2lrPJRxf+MEfmMafN40wepi5WM=",
- "path": "github.com/Azure/go-autorest/logger",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "UtAIMAsMWLBJ6yO1qZ0soFnb0sI=",
- "path": "github.com/Azure/go-autorest/version",
- "revision": "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf",
- "revisionTime": "2018-08-09T20:19:59Z"
- },
- {
- "checksumSHA1": "o/3cn04KAiwC7NqNVvmfVTD+hgA=",
- "path": "github.com/Microsoft/go-winio",
- "revision": "78439966b38d69bf38227fbf57ac8a6fee70f69a",
- "revisionTime": "2017-08-04T20:09:54Z"
- },
- {
- "checksumSHA1": "k59wLJfyqGB04o238WhKSAzSz9M=",
- "path": "github.com/aws/aws-sdk-go/aws",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "Y9W+4GimK4Fuxq+vyIskVYFRnX4=",
- "path": "github.com/aws/aws-sdk-go/aws/awserr",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "PEDqMAEPxlh9Y8/dIbHlE6A7LEA=",
- "path": "github.com/aws/aws-sdk-go/aws/awsutil",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "KpW2B6W3J1yB/7QJWjjtsKz1Xbc=",
- "path": "github.com/aws/aws-sdk-go/aws/client",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "uEJU4I6dTKaraQKvrljlYKUZwoc=",
- "path": "github.com/aws/aws-sdk-go/aws/client/metadata",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "GvmthjOyNZGOKmXK4XVrbT5+K9I=",
- "path": "github.com/aws/aws-sdk-go/aws/corehandlers",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "QHizt8XKUpuslIZv6EH6ENiGpGA=",
- "path": "github.com/aws/aws-sdk-go/aws/credentials",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "JTilCBYWVAfhbKSnrxCNhE8IFns=",
- "path": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "1pENtl2K9hG7qoB7R6J7dAHa82g=",
- "path": "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "sPtOSV32SZr2xN7vZlF4FXo43/o=",
- "path": "github.com/aws/aws-sdk-go/aws/credentials/processcreds",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "JEYqmF83O5n5bHkupAzA6STm0no=",
- "path": "github.com/aws/aws-sdk-go/aws/credentials/stscreds",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "3pJft1H34eTYK6s6p3ijj3mGtc4=",
- "path": "github.com/aws/aws-sdk-go/aws/csm",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "7AmyyJXVkMdmy8dphC3Nalx5XkI=",
- "path": "github.com/aws/aws-sdk-go/aws/defaults",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "47hnR1KYqZDBT3xmHuS7cNtqHP8=",
- "path": "github.com/aws/aws-sdk-go/aws/ec2metadata",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "pcWH1AkR7sUs84cN/XTD9Jexf2Q=",
- "path": "github.com/aws/aws-sdk-go/aws/endpoints",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "nhavXPspOdqm5iAvIGgmZmXk4aI=",
- "path": "github.com/aws/aws-sdk-go/aws/request",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "w4tSwNFNJ4cGgjYEdAgsDnikqec=",
- "path": "github.com/aws/aws-sdk-go/aws/session",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "C9uAu9gsLIpJGIX6/5P+n3s9wQo=",
- "path": "github.com/aws/aws-sdk-go/aws/signer/v4",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "Fe2TPw9X2UvlkRaOS7LPJlpkuTo=",
- "path": "github.com/aws/aws-sdk-go/internal/ini",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "wjxQlU1PYxrDRFoL1Vek8Wch7jk=",
- "path": "github.com/aws/aws-sdk-go/internal/sdkio",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "MYLldFRnsZh21TfCkgkXCT3maPU=",
- "path": "github.com/aws/aws-sdk-go/internal/sdkrand",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "tQVg7Sz2zv+KkhbiXxPH0mh9spg=",
- "path": "github.com/aws/aws-sdk-go/internal/sdkuri",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "sXiZ5x6j2FvlIO57pboVnRTm7QA=",
- "path": "github.com/aws/aws-sdk-go/internal/shareddefaults",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "NtXXi501Kou3laVAsJfcbKSkNI8=",
- "path": "github.com/aws/aws-sdk-go/private/protocol",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "0cZnOaE1EcFUuiu4bdHV2k7slQg=",
- "path": "github.com/aws/aws-sdk-go/private/protocol/ec2query",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "lj56XJFI2OSp+hEOrFZ+eiEi/yM=",
- "path": "github.com/aws/aws-sdk-go/private/protocol/query",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "+O6A945eTP9plLpkEMZB0lwBAcg=",
- "path": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "RDOk9se2S83/HAYmWnpoW3bgQfQ=",
- "path": "github.com/aws/aws-sdk-go/private/protocol/rest",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "B8unEuOlpQfnig4cMyZtXLZVVOs=",
- "path": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "uvEbLM/ZodhtEUVTEoC+Lbc9PHg=",
- "path": "github.com/aws/aws-sdk-go/service/ec2",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "HMY+b4YBLVvWoKm5vB+H7tpKiTI=",
- "path": "github.com/aws/aws-sdk-go/service/sts",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "spyv5/YFBjYyZLZa1U2LBfDR8PM=",
- "path": "github.com/beorn7/perks/quantile",
- "revision": "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9",
- "revisionTime": "2016-08-04T10:47:26Z"
- },
- {
- "checksumSHA1": "bNT5FFLDUXSamYK3jGHSwsTJqqo=",
- "path": "github.com/coreos/go-oidc",
- "revision": "2be1c5b8a260760503f66dc0996e102b683b3ac3",
- "revisionTime": "2019-08-15T17:57:29Z"
- },
- {
- "checksumSHA1": "+Zz+leZHHC9C0rx8DoRuffSRPso=",
- "path": "github.com/coreos/go-systemd/daemon",
- "revision": "cc4f39464dc797b91c8025330de585294c2a6950",
- "revisionTime": "2018-01-08T08:51:32Z"
- },
- {
- "checksumSHA1": "+TKtBzv23ywvmmqRiGEjUba4YmI=",
- "path": "github.com/dgrijalva/jwt-go",
- "revision": "dbeaa9332f19a944acb5736b4456cfcc02140e29",
- "revisionTime": "2017-10-19T21:57:19Z"
- },
- {
- "checksumSHA1": "7EjxkAUND/QY/sN+2fNKJ52v1Rc=",
- "path": "github.com/dimchansky/utfbom",
- "revision": "5448fe645cb1964ba70ac8f9f2ffe975e61a536c",
- "revisionTime": "2018-07-13T13:37:17Z"
- },
- {
- "checksumSHA1": "Gj+xR1VgFKKmFXYOJMnAczC3Znk=",
- "path": "github.com/docker/distribution/digestset",
- "revision": "277ed486c948042cab91ad367c379524f3b25e18",
- "revisionTime": "2018-01-05T23:27:52Z"
- },
- {
- "checksumSHA1": "2Fe4D6PGaVE2he4fUeenLmhC1lE=",
- "path": "github.com/docker/distribution/reference",
- "revision": "277ed486c948042cab91ad367c379524f3b25e18",
- "revisionTime": "2018-01-05T23:27:52Z"
- },
- {
- "checksumSHA1": "QKCQfrTv4wTL0KBDMHpWM/jHl9I=",
- "path": "github.com/docker/docker/api",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "b91BIyJbqy05pXpEh1eGCJkdjYc=",
- "path": "github.com/docker/docker/api/types",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "jVJDbe0IcyjoKc2xbohwzQr+FF0=",
- "path": "github.com/docker/docker/api/types/blkiodev",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "DuOqFTQ95vKSuSE/Va88yRN/wb8=",
- "path": "github.com/docker/docker/api/types/container",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "XDP7i6sMYGnUKeFzgt+mFBJwjjw=",
- "path": "github.com/docker/docker/api/types/events",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "S4SWOa0XduRd8ene8Alwih2Nwcw=",
- "path": "github.com/docker/docker/api/types/filters",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "KuC0C6jo1t7tlvIqb7G3u1FIaZU=",
- "path": "github.com/docker/docker/api/types/image",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "uJeLBKpHZXP+bWhXP4HhpyUTWYI=",
- "path": "github.com/docker/docker/api/types/mount",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "Gskp+nvbVe8Gk1xPLHylZvNmqTg=",
- "path": "github.com/docker/docker/api/types/network",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "r2vWq7Uc3ExKzMqYgH0b4AKjLKY=",
- "path": "github.com/docker/docker/api/types/registry",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "VTxWyFud/RedrpllGdQonVtGM/A=",
- "path": "github.com/docker/docker/api/types/strslice",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "Q0U3queMsCw+rPPztXnRHwAxQEc=",
- "path": "github.com/docker/docker/api/types/swarm",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "kVfD1e4Gak7k6tqDX5nrgQ57EYY=",
- "path": "github.com/docker/docker/api/types/swarm/runtime",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "77axKFOjRx1nGrzIggGXfTxUYVQ=",
- "path": "github.com/docker/docker/api/types/time",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "uDPQ3nHsrvGQc9tg/J9OSC4N5dQ=",
- "path": "github.com/docker/docker/api/types/versions",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "IBJy2zPEnYmcFJ3lM1eiRWnCxTA=",
- "path": "github.com/docker/docker/api/types/volume",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "zQvx3WYTAwbPZEaVPjAsrmW7V00=",
- "path": "github.com/docker/docker/client",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "JbiWTzH699Sqz25XmDlsARpMN9w=",
- "path": "github.com/docker/go-connections/nat",
- "revision": "3ede32e2033de7505e6500d6c868c2b9ed9f169d",
- "revisionTime": "2017-06-23T20:36:43Z"
- },
- {
- "checksumSHA1": "jUfDG3VQsA2UZHvvIXncgiddpYA=",
- "path": "github.com/docker/go-connections/sockets",
- "revision": "3ede32e2033de7505e6500d6c868c2b9ed9f169d",
- "revisionTime": "2017-06-23T20:36:43Z"
- },
- {
- "checksumSHA1": "c6lDGNwTm5mYq18IHP+lqYpk8xU=",
- "path": "github.com/docker/go-connections/tlsconfig",
- "revision": "3ede32e2033de7505e6500d6c868c2b9ed9f169d",
- "revisionTime": "2017-06-23T20:36:43Z"
- },
- {
- "checksumSHA1": "kP4hqQGUNNXhgYxgB4AMWfNvmnA=",
- "path": "github.com/docker/go-units",
- "revision": "d59758554a3d3911fa25c0269de1ebe2f1912c39",
- "revisionTime": "2017-12-21T20:03:56Z"
- },
- {
- "checksumSHA1": "ImX1uv6O09ggFeBPUJJ2nu7MPSA=",
- "path": "github.com/ghodss/yaml",
- "revision": "0ca9ea5df5451ffdf184b4428c902747c2c11cd7",
- "revisionTime": "2017-03-27T23:54:44Z"
- },
- {
- "checksumSHA1": "8UEp6v0Dczw/SlasE0DivB0mAHA=",
- "path": "github.com/gogo/protobuf/jsonpb",
- "revision": "30cf7ac33676b5786e78c746683f0d4cd64fa75b",
- "revisionTime": "2018-05-09T16:24:41Z"
- },
- {
- "checksumSHA1": "wn2shNJMwRZpvuvkf1s7h0wvqHI=",
- "path": "github.com/gogo/protobuf/proto",
- "revision": "160de10b2537169b5ae3e7e221d28269ef40d311",
- "revisionTime": "2018-01-04T10:21:28Z"
- },
- {
- "checksumSHA1": "HPVQZu059/Rfw2bAWM538bVTcUc=",
- "path": "github.com/gogo/protobuf/sortkeys",
- "revision": "30cf7ac33676b5786e78c746683f0d4cd64fa75b",
- "revisionTime": "2018-05-09T16:24:41Z"
- },
- {
- "checksumSHA1": "SkxU1+wPGUJyLyQENrZtr2/OUBs=",
- "path": "github.com/gogo/protobuf/types",
- "revision": "30cf7ac33676b5786e78c746683f0d4cd64fa75b",
- "revisionTime": "2018-05-09T16:24:41Z"
- },
- {
- "checksumSHA1": "LHNzQwau1zPeFPPG5zbNf8AgUOQ=",
- "path": "github.com/golang/groupcache/lru",
- "revision": "611e8accdfc92c4187d399e95ce826046d4c8d73",
- "revisionTime": "2019-10-27T21:21:12Z"
- },
- {
- "checksumSHA1": "Q3FteGbNvRRUMJqbYbmrcBd2DMo=",
- "path": "github.com/golang/protobuf/proto",
- "revision": "ed6926b37a637426117ccab59282c3839528a700",
- "revisionTime": "2019-10-22T19:55:53Z"
- },
- {
- "checksumSHA1": "aEiR2m3NGaMGTbUW5P+w5gKFyc8=",
- "path": "github.com/golang/protobuf/ptypes",
- "revision": "ed6926b37a637426117ccab59282c3839528a700",
- "revisionTime": "2019-10-22T19:55:53Z"
- },
- {
- "checksumSHA1": "2/Xg4L9IVGQRJB8zCELZx7/Z4HU=",
- "path": "github.com/golang/protobuf/ptypes/any",
- "revision": "ed6926b37a637426117ccab59282c3839528a700",
- "revisionTime": "2019-10-22T19:55:53Z"
- },
- {
- "checksumSHA1": "RE9rLveNHapyMKQC8p10tbkUE9w=",
- "path": "github.com/golang/protobuf/ptypes/duration",
- "revision": "ed6926b37a637426117ccab59282c3839528a700",
- "revisionTime": "2019-10-22T19:55:53Z"
- },
- {
- "checksumSHA1": "seEwY2xETpK9yHJ9+bHqkLZ0VMU=",
- "path": "github.com/golang/protobuf/ptypes/timestamp",
- "revision": "ed6926b37a637426117ccab59282c3839528a700",
- "revisionTime": "2019-10-22T19:55:53Z"
- },
- {
- "checksumSHA1": "xN4Xr7jzSvXl7DOOqzbWihUbfuA=",
- "path": "github.com/google/go-cmp/cmp",
- "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
- "revisionTime": "2019-11-05T00:03:44Z"
- },
- {
- "checksumSHA1": "FUnTgtE5i3f8asIvicGkJSFlrts=",
- "path": "github.com/google/go-cmp/cmp/internal/diff",
- "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
- "revisionTime": "2019-11-05T00:03:44Z"
- },
- {
- "checksumSHA1": "nR8EJ8i8lqxxmtLPnXI7WlYANiE=",
- "path": "github.com/google/go-cmp/cmp/internal/flags",
- "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
- "revisionTime": "2019-11-05T00:03:44Z"
- },
- {
- "checksumSHA1": "0pcLJsUQUaBdPXM5LuL9uFeuETs=",
- "path": "github.com/google/go-cmp/cmp/internal/function",
- "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
- "revisionTime": "2019-11-05T00:03:44Z"
- },
- {
- "checksumSHA1": "zQxhgAvWmYtrTZjxRenQQYiDX50=",
- "path": "github.com/google/go-cmp/cmp/internal/value",
- "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
- "revisionTime": "2019-11-05T00:03:44Z"
- },
- {
- "checksumSHA1": "NqlcmlYFsLm2R1iJY0zynpIWNhg=",
- "path": "github.com/googleapis/gax-go/v2",
- "revision": "b443e5a67ec8eeac76f5f384004931878cab24b3",
- "revisionTime": "2019-10-18T15:11:19Z"
- },
- {
- "checksumSHA1": "iIUYZyoanCQQTUaWsu8b+iOSPt4=",
- "origin": "github.com/docker/docker/vendor/github.com/gorilla/context",
- "path": "github.com/gorilla/context",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "fSs1WcPh2F5JJtxqYC+Jt8yCkYc=",
- "path": "github.com/gorilla/mux",
- "revision": "5bbbb5b2b5729b132181cc7f4aa3b3c973e9a0ed",
- "revisionTime": "2018-01-07T15:57:08Z"
- },
- {
- "checksumSHA1": "d9PxF1XQGLMJZRct2R8qVM/eYlE=",
- "path": "github.com/hashicorp/golang-lru",
- "revision": "0a025b7e63adc15a622f29b0b2c4c3848243bbf6",
- "revisionTime": "2016-08-13T22:13:03Z"
- },
- {
- "checksumSHA1": "9hffs0bAIU6CquiRhKQdzjHnKt0=",
- "path": "github.com/hashicorp/golang-lru/simplelru",
- "revision": "0a025b7e63adc15a622f29b0b2c4c3848243bbf6",
- "revisionTime": "2016-08-13T22:13:03Z"
- },
- {
- "checksumSHA1": "x7IEwuVYTztOJItr3jtePGyFDWA=",
- "path": "github.com/imdario/mergo",
- "revision": "5ef87b449ca75fbed1bc3765b749ca8f73f1fa69",
- "revisionTime": "2019-04-15T13:31:43Z"
- },
- {
- "checksumSHA1": "iCsyavJDnXC9OY//p52IWJWy7PY=",
- "path": "github.com/jbenet/go-context/io",
- "revision": "d14ea06fba99483203c19d92cfcd13ebe73135f4",
- "revisionTime": "2015-07-11T00:45:18Z"
- },
- {
- "checksumSHA1": "khL6oKjx81rAZKW+36050b7f5As=",
- "path": "github.com/jmcvetta/randutil",
- "revision": "2bb1b664bcff821e02b2a0644cd29c7e824d54f8",
- "revisionTime": "2015-08-17T12:26:01Z"
- },
- {
- "checksumSHA1": "blwbl9vPvRLtL5QlZgfpLvsFiZ4=",
- "origin": "github.com/aws/aws-sdk-go/vendor/github.com/jmespath/go-jmespath",
- "path": "github.com/jmespath/go-jmespath",
- "revision": "d496c5aab9b8ba36936e457a488e971b4f9fd891",
- "revisionTime": "2019-03-06T20:18:39Z"
- },
- {
- "checksumSHA1": "X7g98YfLr+zM7aN76AZvAfpZyfk=",
- "path": "github.com/julienschmidt/httprouter",
- "revision": "adbc77eec0d91467376ca515bc3a14b8434d0f18",
- "revisionTime": "2018-04-11T15:45:01Z"
- },
- {
- "checksumSHA1": "oX6jFQD74oOApvDIhOzW2dXpg5Q=",
- "path": "github.com/kevinburke/ssh_config",
- "revision": "802051befeb51da415c46972b5caf36e7c33c53d",
- "revisionTime": "2017-10-13T21:14:58Z"
- },
- {
- "checksumSHA1": "IfZcD4U1dtllJKlPNeD2aU4Jn98=",
- "path": "github.com/lib/pq",
- "revision": "83612a56d3dd153a94a629cd64925371c9adad78",
- "revisionTime": "2017-11-26T05:04:59Z"
- },
- {
- "checksumSHA1": "AU3fA8Sm33Vj9PBoRPSeYfxLRuE=",
- "path": "github.com/lib/pq/oid",
- "revision": "83612a56d3dd153a94a629cd64925371c9adad78",
- "revisionTime": "2017-11-26T05:04:59Z"
- },
- {
- "checksumSHA1": "T9E+5mKBQ/BX4wlNxgaPfetxdeI=",
- "path": "github.com/marstr/guid",
- "revision": "8bdf7d1a087ccc975cf37dd6507da50698fd19ca",
- "revisionTime": "2017-04-27T23:51:15Z"
- },
- {
- "checksumSHA1": "bKMZjd2wPw13VwoE7mBeSv5djFA=",
- "path": "github.com/matttproud/golang_protobuf_extensions/pbutil",
- "revision": "c12348ce28de40eed0136aa2b644d0ee0650e56c",
- "revisionTime": "2016-04-24T11:30:07Z"
- },
- {
- "checksumSHA1": "V/quM7+em2ByJbWBLOsEwnY3j/Q=",
- "path": "github.com/mitchellh/go-homedir",
- "revision": "b8bc1bf767474819792c23f32d8286a45736f1c6",
- "revisionTime": "2016-12-03T19:45:07Z"
- },
- {
- "checksumSHA1": "OFNit1Qx2DdWhotfREKodDNUwCM=",
- "path": "github.com/opencontainers/go-digest",
- "revision": "279bed98673dd5bef374d3b6e4b09e2af76183bf",
- "revisionTime": "2017-06-07T19:53:33Z"
- },
- {
- "checksumSHA1": "ZGlIwSRjdLYCUII7JLE++N4w7Xc=",
- "path": "github.com/opencontainers/image-spec/specs-go",
- "revision": "577479e4dc273d3779f00c223c7e0dba4cd6b8b0",
- "revisionTime": "2017-11-25T02:40:18Z"
- },
- {
- "checksumSHA1": "jdbXRRzeu0njLE9/nCEZG+Yg/Jk=",
- "path": "github.com/opencontainers/image-spec/specs-go/v1",
- "revision": "577479e4dc273d3779f00c223c7e0dba4cd6b8b0",
- "revisionTime": "2017-11-25T02:40:18Z"
- },
- {
- "checksumSHA1": "F1IYMLBLAZaTOWnmXsgaxTGvrWI=",
- "path": "github.com/pelletier/go-buffruneio",
- "revision": "c37440a7cf42ac63b919c752ca73a85067e05992",
- "revisionTime": "2017-02-27T22:03:11Z"
- },
- {
- "checksumSHA1": "xCv4GBFyw07vZkVtKF/XrUnkHRk=",
- "path": "github.com/pkg/errors",
- "revision": "e881fd58d78e04cf6d0de1217f8707c8cc2249bc",
- "revisionTime": "2017-12-16T07:03:16Z"
- },
- {
- "checksumSHA1": "KxkAlLxQkuSGHH46Dxu6wpAybO4=",
- "path": "github.com/pquerna/cachecontrol",
- "revision": "1555304b9b35fdd2b425bccf1a5613677705e7d0",
- "revisionTime": "2018-05-17T16:36:45Z"
- },
- {
- "checksumSHA1": "wwaht1P9i8vQu6DqNvMEy24IMgY=",
- "path": "github.com/pquerna/cachecontrol/cacheobject",
- "revision": "1555304b9b35fdd2b425bccf1a5613677705e7d0",
- "revisionTime": "2018-05-17T16:36:45Z"
- },
- {
- "checksumSHA1": "Ajt29IHVbX99PUvzn8Gc/lMCXBY=",
- "path": "github.com/prometheus/client_golang/prometheus",
- "revision": "9bb6ab929dcbe1c8393cd9ef70387cb69811bd1c",
- "revisionTime": "2018-02-03T14:28:15Z"
- },
- {
- "checksumSHA1": "c3Ui7nnLiJ4CAGWZ8dGuEgqHd8s=",
- "path": "github.com/prometheus/client_golang/prometheus/promhttp",
- "revision": "9bb6ab929dcbe1c8393cd9ef70387cb69811bd1c",
- "revisionTime": "2018-02-03T14:28:15Z"
- },
- {
- "checksumSHA1": "DvwvOlPNAgRntBzt3b3OSRMS2N4=",
- "path": "github.com/prometheus/client_model/go",
- "revision": "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c",
- "revisionTime": "2017-11-17T10:05:41Z"
- },
- {
- "checksumSHA1": "xfnn0THnqNwjwimeTClsxahYrIo=",
- "path": "github.com/prometheus/common/expfmt",
- "revision": "89604d197083d4781071d3c65855d24ecfb0a563",
- "revisionTime": "2018-01-10T21:49:58Z"
- },
- {
- "checksumSHA1": "GWlM3d2vPYyNATtTFgftS10/A9w=",
- "path": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg",
- "revision": "89604d197083d4781071d3c65855d24ecfb0a563",
- "revisionTime": "2018-01-10T21:49:58Z"
- },
- {
- "checksumSHA1": "YU+/K48IMawQnToO4ETE6a+hhj4=",
- "path": "github.com/prometheus/common/model",
- "revision": "89604d197083d4781071d3c65855d24ecfb0a563",
- "revisionTime": "2018-01-10T21:49:58Z"
- },
- {
- "checksumSHA1": "lolK0h7LSVERIX8zLyVQ/+7wEyA=",
- "path": "github.com/prometheus/procfs",
- "revision": "cb4147076ac75738c9a7d279075a253c0cc5acbd",
- "revisionTime": "2018-01-25T13:30:57Z"
- },
- {
- "checksumSHA1": "lv9rIcjbVEGo8AT1UCUZXhXrfQc=",
- "path": "github.com/prometheus/procfs/internal/util",
- "revision": "cb4147076ac75738c9a7d279075a253c0cc5acbd",
- "revisionTime": "2018-01-25T13:30:57Z"
- },
- {
- "checksumSHA1": "BXJH5h2ri8SU5qC6kkDvTIGCky4=",
- "path": "github.com/prometheus/procfs/nfs",
- "revision": "cb4147076ac75738c9a7d279075a253c0cc5acbd",
- "revisionTime": "2018-01-25T13:30:57Z"
- },
- {
- "checksumSHA1": "yItvTQLUVqm/ArLEbvEhqG0T5a0=",
- "path": "github.com/prometheus/procfs/xfs",
- "revision": "cb4147076ac75738c9a7d279075a253c0cc5acbd",
- "revisionTime": "2018-01-25T13:30:57Z"
- },
- {
- "checksumSHA1": "eDQ6f1EsNf+frcRO/9XukSEchm8=",
- "path": "github.com/satori/go.uuid",
- "revision": "36e9d2ebbde5e3f13ab2e25625fd453271d6522e",
- "revisionTime": "2018-01-03T17:44:51Z"
- },
- {
- "checksumSHA1": "UwtyqB7CaUWPlw0DVJQvw0IFQZs=",
- "path": "github.com/sergi/go-diff/diffmatchpatch",
- "revision": "1744e2970ca51c86172c8190fadad617561ed6e7",
- "revisionTime": "2017-11-10T11:01:46Z"
- },
- {
- "checksumSHA1": "umeXHK5iK/3th4PtrTkZllezgWo=",
- "path": "github.com/sirupsen/logrus",
- "revision": "d682213848ed68c0a260ca37d6dd5ace8423f5ba",
- "revisionTime": "2017-12-05T20:32:29Z"
- },
- {
- "checksumSHA1": "8QeSG127zQqbA+YfkO1WkKx/iUI=",
- "path": "github.com/src-d/gcfg",
- "revision": "f187355171c936ac84a82793659ebb4936bc1c23",
- "revisionTime": "2016-10-26T10:01:55Z"
- },
- {
- "checksumSHA1": "yf5NBT8BofPfGYCXoLnj7BIA1wo=",
- "path": "github.com/src-d/gcfg/scanner",
- "revision": "f187355171c936ac84a82793659ebb4936bc1c23",
- "revisionTime": "2016-10-26T10:01:55Z"
- },
- {
- "checksumSHA1": "C5Z8YVyNTuvupM9AUr9KbPlps4Q=",
- "path": "github.com/src-d/gcfg/token",
- "revision": "f187355171c936ac84a82793659ebb4936bc1c23",
- "revisionTime": "2016-10-26T10:01:55Z"
- },
- {
- "checksumSHA1": "mDkN3UpR7auuFbwUuIwExz4DZgY=",
- "path": "github.com/src-d/gcfg/types",
- "revision": "f187355171c936ac84a82793659ebb4936bc1c23",
- "revisionTime": "2016-10-26T10:01:55Z"
- },
- {
- "checksumSHA1": "iHiMTBffQvWYlOLu3130JXuQpgQ=",
- "path": "github.com/xanzy/ssh-agent",
- "revision": "ba9c9e33906f58169366275e3450db66139a31a9",
- "revisionTime": "2015-12-15T15:34:51Z"
- },
- {
- "checksumSHA1": "Ijg5Yx2tIE09R698JrJrlDJuH6U=",
- "path": "go.opencensus.io",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "qJGsfghV4/lQ6Rhq/EaVqQPJ0s4=",
- "path": "go.opencensus.io/internal",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "Dw3rpna1DwTa7TCzijInKcU49g4=",
- "path": "go.opencensus.io/internal/tagencoding",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "r6fbtPwxK4/TYUOWc7y0hXdAG4Q=",
- "path": "go.opencensus.io/metric/metricdata",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "kWj13srwY1SH5KgFecPhEfHnzVc=",
- "path": "go.opencensus.io/metric/metricproducer",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "PxZNj+yFM4Ru4Pu2jEatlCpmqFU=",
- "path": "go.opencensus.io/plugin/ocgrpc",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "h/Q73rMyitTcsqw1Fy8C74F31hk=",
- "path": "go.opencensus.io/plugin/ochttp",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "UZhIoErIy1tKLmVT/5huwlp6KFQ=",
- "path": "go.opencensus.io/plugin/ochttp/propagation/b3",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "q+y8X+5nDONIlJlxfkv+OtA18ds=",
- "path": "go.opencensus.io/resource",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "EbYHMjHqN1YfUNgwf97qS/Z4uP8=",
- "path": "go.opencensus.io/stats",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "oIo4NRi6AVCfcwVfHzCXAsoZsdI=",
- "path": "go.opencensus.io/stats/internal",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "6LKTLjjNUw74vuJik17FFLMHOoY=",
- "path": "go.opencensus.io/stats/view",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "rx4HvicGhFI5wv55qVaRAMsHZ7g=",
- "path": "go.opencensus.io/tag",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "Qehn8Uz+e5KgZW8gPXK4snQNfiU=",
- "path": "go.opencensus.io/trace",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "JkvEb8oMEFjic5K/03Tyr5Lok+w=",
- "path": "go.opencensus.io/trace/internal",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "FHJParRi8f1GHO7Cx+lk3bMWBq0=",
- "path": "go.opencensus.io/trace/propagation",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "UHbxxaMqpEPsubh8kPwzSlyEwqI=",
- "path": "go.opencensus.io/trace/tracestate",
- "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
- "revisionTime": "2019-10-15T19:20:41Z"
- },
- {
- "checksumSHA1": "TT1rac6kpQp2vz24m5yDGUNQ/QQ=",
- "path": "golang.org/x/crypto/cast5",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "IQkUIOnvlf0tYloFx9mLaXSvXWQ=",
- "path": "golang.org/x/crypto/curve25519",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "1hwn8cgg4EVXhCpJIqmMbzqnUo0=",
- "path": "golang.org/x/crypto/ed25519",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "LXFcVx8I587SnWmKycSDEq9yvK8=",
- "path": "golang.org/x/crypto/ed25519/internal/edwards25519",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "ooU7jaiYSUKlg5BVllI8lsq+5Qk=",
- "path": "golang.org/x/crypto/openpgp",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "olOKkhrdkYQHZ0lf1orrFQPQrv4=",
- "path": "golang.org/x/crypto/openpgp/armor",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "eo/KtdjieJQXH7Qy+faXFcF70ME=",
- "path": "golang.org/x/crypto/openpgp/elgamal",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "rlxVSaGgqdAgwblsErxTxIfuGfg=",
- "path": "golang.org/x/crypto/openpgp/errors",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "Pq88+Dgh04UdXWZN6P+bLgYnbRc=",
- "path": "golang.org/x/crypto/openpgp/packet",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "s2qT4UwvzBSkzXuiuMkowif1Olw=",
- "path": "golang.org/x/crypto/openpgp/s2k",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "1MGpGDQqnUoRpv7VEcQrXOBydXE=",
- "path": "golang.org/x/crypto/pbkdf2",
- "revision": "ae8bce0030810cf999bb2b9868ae5c7c58e6343b",
- "revisionTime": "2018-04-30T17:54:52Z"
- },
- {
- "checksumSHA1": "PJY7uCr3UnX4/Mf/RoWnbieSZ8o=",
- "path": "golang.org/x/crypto/pkcs12",
- "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
- "revisionTime": "2018-07-28T08:01:47Z"
- },
- {
- "checksumSHA1": "p0GC51McIdA7JygoP223twJ1s0E=",
- "path": "golang.org/x/crypto/pkcs12/internal/rc2",
- "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
- "revisionTime": "2018-07-28T08:01:47Z"
- },
- {
- "checksumSHA1": "NHjGg73p5iGZ+7tflJ4cVABNmKE=",
- "path": "golang.org/x/crypto/ssh",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "NMRX0onGReaL9IfLr0XQ3kl5Id0=",
- "path": "golang.org/x/crypto/ssh/agent",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "zBHtHvMj+MXa1qa4aglBt46uUck=",
- "path": "golang.org/x/crypto/ssh/knownhosts",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "X1NTlfcau2XcV6WtAHF6b/DECOA=",
- "path": "golang.org/x/crypto/ssh/terminal",
- "revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
- "revisionTime": "2017-11-25T19:00:56Z"
- },
- {
- "checksumSHA1": "Y+HGqEkYM15ir+J93MEaHdyFy0c=",
- "origin": "github.com/docker/docker/vendor/golang.org/x/net/context",
- "path": "golang.org/x/net/context",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
- },
- {
- "checksumSHA1": "WHc3uByvGaMcnSoI21fhzYgbOgg=",
- "path": "golang.org/x/net/context/ctxhttp",
- "revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
- "revisionTime": "2017-09-25T09:26:47Z"
- },
- {
- "checksumSHA1": "pCY4YtdNKVBYRbNvODjx8hj0hIs=",
- "path": "golang.org/x/net/http/httpguts",
- "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
- "revisionTime": "2019-06-03T08:53:59Z"
- },
- {
- "checksumSHA1": "Fjq5E3MoRRoXn+VkHZ8nziuw3Vk=",
- "path": "golang.org/x/net/http2",
- "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
- "revisionTime": "2019-06-03T08:53:59Z"
- },
- {
- "checksumSHA1": "VJwSx33rjMC7O6K2O50Jw6o1vw4=",
- "path": "golang.org/x/net/http2/hpack",
- "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
- "revisionTime": "2019-06-03T08:53:59Z"
- },
- {
- "checksumSHA1": "vL6l4FZWitsxht0uqA/GpDNkNNc=",
- "path": "golang.org/x/net/idna",
- "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
- "revisionTime": "2019-06-03T08:53:59Z"
- },
- {
- "checksumSHA1": "UxahDzW2v4mf/+aFxruuupaoIwo=",
- "path": "golang.org/x/net/internal/timeseries",
- "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
- "revisionTime": "2019-06-03T08:53:59Z"
- },
- {
- "checksumSHA1": "r9l4r3H6FOLQ0c2JaoXpopFjpnw=",
- "path": "golang.org/x/net/proxy",
- "revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
- "revisionTime": "2017-09-25T09:26:47Z"
- },
- {
- "checksumSHA1": "HvmG9LfStMLF+hIC7xR4SxegMis=",
- "path": "golang.org/x/net/trace",
- "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
- "revisionTime": "2019-06-03T08:53:59Z"
- },
- {
- "checksumSHA1": "TBlnCuZUOzJHLu5DNY7XEj8TvbU=",
- "path": "golang.org/x/net/webdav",
- "revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
- "revisionTime": "2017-09-25T09:26:47Z"
- },
- {
- "checksumSHA1": "XgtZlzd39qIkBHs6XYrq9dhTCog=",
- "path": "golang.org/x/net/webdav/internal/xml",
- "revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
- "revisionTime": "2017-09-25T09:26:47Z"
- },
- {
- "checksumSHA1": "7EZyXN0EmZLgGxZxK01IJua4c8o=",
- "path": "golang.org/x/net/websocket",
- "revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
- "revisionTime": "2017-09-25T09:26:47Z"
- },
- {
- "checksumSHA1": "+33kONpAOtjMyyw0uD4AygLvIXg=",
- "path": "golang.org/x/oauth2",
- "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
- "revisionTime": "2018-05-28T20:23:04Z"
- },
- {
- "checksumSHA1": "z7mSaGccufg15ki2YPd+M5PlsUc=",
- "path": "golang.org/x/oauth2/google",
- "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
- "revisionTime": "2018-05-28T20:23:04Z"
- },
- {
- "checksumSHA1": "fddd1btmbXxnlMKHUZewlVlSaEQ=",
- "path": "golang.org/x/oauth2/internal",
- "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
- "revisionTime": "2018-05-28T20:23:04Z"
- },
- {
- "checksumSHA1": "huVltYnXdRFDJLgp/ZP9IALzG7g=",
- "path": "golang.org/x/oauth2/jws",
- "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
- "revisionTime": "2018-05-28T20:23:04Z"
- },
- {
- "checksumSHA1": "QPndO4ODVdEBILRhJ6869UDAoHc=",
- "path": "golang.org/x/oauth2/jwt",
- "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
- "revisionTime": "2018-05-28T20:23:04Z"
- },
- {
- "checksumSHA1": "cvrBKcl7QwkGktQiWFoQj1SGb94=",
- "origin": "github.com/docker/docker/vendor/golang.org/x/sys/unix",
- "path": "golang.org/x/sys/unix",
- "revision": "c36460c437c8c515c543dd31afcbb5c2a9f5dd48",
- "revisionTime": "2019-11-05T21:04:14Z"
- },
- {
- "checksumSHA1": "+1FhB9xHOPgEPl5uaAiaegod/R0=",
- "origin": "github.com/docker/docker/vendor/golang.org/x/sys/windows",
- "path": "golang.org/x/sys/windows",
- "revision": "c36460c437c8c515c543dd31afcbb5c2a9f5dd48",
- "revisionTime": "2019-11-05T21:04:14Z"
- },
- {
- "checksumSHA1": "CbpjEkkOeh0fdM/V8xKDdI0AA88=",
- "path": "golang.org/x/text/secure/bidirule",
- "revision": "7922cc490dd5a7dbaa7fd5d6196b49db59ac042f",
- "revisionTime": "2018-04-05T08:39:28Z"
- },
- {
- "checksumSHA1": "ziMb9+ANGRJSSIuxYdRbA+cDRBQ=",
- "path": "golang.org/x/text/transform",
- "revision": "e19ae1496984b1c655b8044a65c0300a3c878dd3",
- "revisionTime": "2017-12-24T20:31:28Z"
- },
- {
- "checksumSHA1": "w8kDfZ1Ug+qAcVU0v8obbu3aDOY=",
- "path": "golang.org/x/text/unicode/bidi",
- "revision": "7922cc490dd5a7dbaa7fd5d6196b49db59ac042f",
- "revisionTime": "2018-04-05T08:39:28Z"
- },
- {
- "checksumSHA1": "BCNYmf4Ek93G4lk5x3ucNi/lTwA=",
- "path": "golang.org/x/text/unicode/norm",
- "revision": "e19ae1496984b1c655b8044a65c0300a3c878dd3",
- "revisionTime": "2017-12-24T20:31:28Z"
- },
- {
- "checksumSHA1": "RIKH6cQNe0mczH5HxseRIpEYidE=",
- "path": "google.golang.org/api/gensupport",
- "revision": "de943baf05a022a8f921b544b7827bacaba1aed5",
- "revisionTime": "2016-10-20T18:20:02Z"
- },
- {
- "checksumSHA1": "LxVdu+BwMh3wiugATYeipYXwJIw=",
- "path": "google.golang.org/api/googleapi",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "1K0JxrUfDqAB3MyRiU1LKjfHyf4=",
- "path": "google.golang.org/api/googleapi/internal/uritemplates",
- "revision": "de943baf05a022a8f921b544b7827bacaba1aed5",
- "revisionTime": "2016-10-20T18:20:02Z"
- },
- {
- "checksumSHA1": "8cjsXKNgewlFLlMnJ3N83abOQfA=",
- "path": "google.golang.org/api/googleapi/transport",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "FGskZ2MgVCROzzlbrdYPnISEgu0=",
- "path": "google.golang.org/api/internal",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "I4Oe5Q+AuaxmN3duL38r2evqGKk=",
- "path": "google.golang.org/api/internal/gensupport",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "nN+zggDyWr8HPYzwltMkzJJr1Jc=",
- "path": "google.golang.org/api/internal/third_party/uritemplates",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "+ogQsnuO518OACDBVThVxjAoDO8=",
- "path": "google.golang.org/api/option",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "lDj30SHq8JTOxBhzjZSPoidYU4U=",
- "path": "google.golang.org/api/people/v1",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "Hz0CoIHu+fpeNxQhCtvdJL5KgUg=",
- "path": "google.golang.org/api/transport",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "5jHkcf/bO2VsFBm1fdMMQfp3gVY=",
- "path": "google.golang.org/api/transport/grpc",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "q628X+HuQrsONyEGovbgsNVWyKo=",
- "path": "google.golang.org/api/transport/http",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "DeoMDYdl1dFTGDPYxn346S8kvz4=",
- "path": "google.golang.org/api/transport/http/internal/propagation",
- "revision": "473217c7f590f56568f04c71c91866d794beb596",
- "revisionTime": "2019-11-04T23:03:48Z"
- },
- {
- "checksumSHA1": "HGXXkbBydog8zRyrzyX2b8OcrUc=",
- "path": "google.golang.org/appengine",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "uuHlQoXvEZ9E51No2iwxh1jmd9w=",
- "path": "google.golang.org/appengine/internal",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "GyzSDzUj78G9nyNhmlFGg5IufHc=",
- "path": "google.golang.org/appengine/internal/app_identity",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "5PakGXEgSbyFptkhGO8MnGf7uH0=",
- "path": "google.golang.org/appengine/internal/base",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "3DZ+Ah5hFQb1/nh1+li2VE+kkfk=",
- "path": "google.golang.org/appengine/internal/datastore",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "HJQ4JM9YWfwIe4vmAgXC7J/1T3E=",
- "path": "google.golang.org/appengine/internal/log",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "rPcVt7Td1StpB6Z9DiShhu753PM=",
- "path": "google.golang.org/appengine/internal/modules",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "hApgRLSl7w9XG2waJxdH/o0A398=",
- "path": "google.golang.org/appengine/internal/remote_api",
- "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
- "revisionTime": "2019-10-16T20:46:03Z"
- },
- {
- "checksumSHA1": "dU5fToNngC22+3DsebkdYv+T3jE=",
- "path": "google.golang.org/genproto/googleapis/rpc/status",
- "revision": "919d9bdd9fe6f1a5dd95ce5d5e4cdb8fd3c516d0",
- "revisionTime": "2019-10-28T17:36:16Z"
- },
- {
- "checksumSHA1": "X6j/RZqsMEAqbMTzutcTUE8ae88=",
- "path": "google.golang.org/grpc",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "8KrSbWYdhP+hwdJd45wv+hn4Aw0=",
- "path": "google.golang.org/grpc/backoff",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "nflETQgLBqUZkh8zIxoYVXQaq+4=",
- "path": "google.golang.org/grpc/balancer",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "ZLXafW099RJJQXAtUIExAhjeMFI=",
- "path": "google.golang.org/grpc/balancer/base",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "cDvwK2ubxN2/O27pRjKMWEcXUqA=",
- "path": "google.golang.org/grpc/balancer/grpclb",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "0vfNsMgaZFc7sKe8S8pnVCNIfsg=",
- "path": "google.golang.org/grpc/balancer/grpclb/grpc_lb_v1",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "cE7mFcyGz0F+EnlTZrzLkhprH/4=",
- "path": "google.golang.org/grpc/balancer/roundrobin",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "YyTUFAVju8wgb1s/3azC2CeSbfY=",
- "path": "google.golang.org/grpc/binarylog/grpc_binarylog_v1",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "y2MH/S0g7vnJorDX+hRZNu7qc+c=",
- "path": "google.golang.org/grpc/channelz",
- "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
- "revisionTime": "2018-05-29T21:11:52Z"
- },
- {
- "checksumSHA1": "e0xLHThZgMNcuR7aFuY+pzuQVVU=",
- "path": "google.golang.org/grpc/codes",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "UgxkVy6e/BMqXrmS21WmcHtdcd4=",
- "path": "google.golang.org/grpc/connectivity",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "5UJiuwNblPiTlsNITE1qNmzPhOw=",
- "path": "google.golang.org/grpc/credentials",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "DAGMJ469uZMtSAJxCvb4dciT7Lc=",
- "path": "google.golang.org/grpc/credentials/alts",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "oz4z2akZwVszSKy03amrf6P9P5o=",
- "path": "google.golang.org/grpc/credentials/alts/internal",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "PTVv5w1hd88sHf2TJbctBasS4ck=",
- "path": "google.golang.org/grpc/credentials/alts/internal/authinfo",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "/s6U8ulRJiogFjFygs450dOeIoI=",
- "path": "google.golang.org/grpc/credentials/alts/internal/conn",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "l9QCc3IT7X19lLCdmA9CrdTv/4w=",
- "path": "google.golang.org/grpc/credentials/alts/internal/handshaker",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "vnI/oN6L9r8gyUIfxrepOyRyt1M=",
- "path": "google.golang.org/grpc/credentials/alts/internal/handshaker/service",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "0xSsV5vKH+LsNBq48neyAqJQE5s=",
- "path": "google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "uqTU997XGQ/YxgsFj6Vnwuie4GQ=",
- "path": "google.golang.org/grpc/credentials/google",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "hj4XY8K4TjmMZwErpAWaSKFrk2c=",
- "path": "google.golang.org/grpc/credentials/internal",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "sFnZthdQsbhUK8DM374dTO521z0=",
- "path": "google.golang.org/grpc/credentials/oauth",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "P4QQAmAm6l8rAeOfk6Ljp0qka0k=",
- "path": "google.golang.org/grpc/encoding",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "LKKkn7EYA+Do9Qwb2/SUKLFNxoo=",
- "path": "google.golang.org/grpc/encoding/proto",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "Qwx9pMTkn1USjW3ZEbbo/mdl4fU=",
- "path": "google.golang.org/grpc/grpclb",
- "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
- "revisionTime": "2018-05-29T21:11:52Z"
- },
- {
- "checksumSHA1": "n+8rAQxWcf9LPJat2UHq2uVzH20=",
- "path": "google.golang.org/grpc/grpclb/grpc_lb_v1/messages",
- "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
- "revisionTime": "2018-05-29T21:11:52Z"
- },
- {
- "checksumSHA1": "ekrstGhOIsZVKjUih7aWcLEISTQ=",
- "path": "google.golang.org/grpc/grpclog",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "6Zx3ZzU/okf+1KAsS6kLsgwWNVQ=",
- "path": "google.golang.org/grpc/internal",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "o9H97P0b9GU7912BOEitXnQT2bw=",
- "path": "google.golang.org/grpc/internal/backoff",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "k4ITR7VpzDbbf0tRqI6p9xsmPug=",
- "path": "google.golang.org/grpc/internal/balancerload",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "J8ebTUPPKc0yf+ER3wJBhPHCht4=",
- "path": "google.golang.org/grpc/internal/binarylog",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "iup/lNMZ3GB5wmda8sp14Rrt2QY=",
- "path": "google.golang.org/grpc/internal/buffer",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "YtqLJH9Ht2sD5EqAOSqbARDUeXw=",
- "path": "google.golang.org/grpc/internal/channelz",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "5dFUCEaPjKwza9kwKqgljp8ckU4=",
- "path": "google.golang.org/grpc/internal/envconfig",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "70gndc/uHwyAl3D45zqp7vyHWlo=",
- "path": "google.golang.org/grpc/internal/grpcrand",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "psHSfNyU2y9L9zRK+s41e7ScTf4=",
- "path": "google.golang.org/grpc/internal/grpcsync",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "q+fLA+VV0jadkfNoeTO7WT7359o=",
- "path": "google.golang.org/grpc/internal/resolver/dns",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "hqNexYeP/V1a66ZWiDeFBptNjwY=",
- "path": "google.golang.org/grpc/internal/resolver/passthrough",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "wTCshPVAgkVAk+4nvDj5Yj6AFp4=",
- "path": "google.golang.org/grpc/internal/syscall",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "ryOd/62SbRr4NN65f4mRauOhEVI=",
- "path": "google.golang.org/grpc/internal/transport",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "cDYDzrrgfj9Y45GDWcXXCrRofp0=",
- "path": "google.golang.org/grpc/keepalive",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "0OoJw+Wc7+1Ox5nBbwjgqWW8Xpw=",
- "path": "google.golang.org/grpc/metadata",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "bk9IupgyMXhqsOBR/dp7ZmRjVEE=",
- "path": "google.golang.org/grpc/naming",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "ltPJN8UyzvWN0H0BvkP2AREujgQ=",
- "path": "google.golang.org/grpc/peer",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "+uvdsd+Wki49BMFvpwsqnCwPx2w=",
- "path": "google.golang.org/grpc/resolver",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "hCvY7ChoHLFFhZcx/iX0uEpQJKU=",
- "path": "google.golang.org/grpc/resolver/dns",
- "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
- "revisionTime": "2018-05-29T21:11:52Z"
- },
- {
- "checksumSHA1": "zs9M4xE8Lyg4wvuYvR00XoBxmuw=",
- "path": "google.golang.org/grpc/resolver/passthrough",
- "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
- "revisionTime": "2018-05-29T21:11:52Z"
- },
- {
- "checksumSHA1": "S7duOGyPoeGhK3EOhKNyxa/KHtk=",
- "path": "google.golang.org/grpc/serviceconfig",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "3ZPGj/HdfLTiK7I3xPdnqELnHdk=",
- "path": "google.golang.org/grpc/stats",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "pF8iy9/Pmnt2a8sEAtYtOLQtdHE=",
- "path": "google.golang.org/grpc/status",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "HGXDrPBB90iBU4NJ7C1N8MJRkI0=",
- "path": "google.golang.org/grpc/tap",
- "revision": "6dac0204800b039598a8e1561f66861a6492d833",
- "revisionTime": "2019-11-05T19:11:34Z"
- },
- {
- "checksumSHA1": "W++POptYDWQXnNmDqcw6hg8rgxQ=",
- "path": "google.golang.org/grpc/transport",
- "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
- "revisionTime": "2018-05-29T21:11:52Z"
- },
- {
- "checksumSHA1": "CEFTYXtWmgSh+3Ik1NmDaJcz4E0=",
- "path": "gopkg.in/check.v1",
- "revision": "20d25e2804050c1cd24a7eea1e7a6447dd0e74ec",
- "revisionTime": "2016-12-08T18:13:25Z"
- },
- {
- "checksumSHA1": "oRfTuL23MIBG2nCwjweTJz4Eiqg=",
- "path": "gopkg.in/square/go-jose.v2",
- "revision": "730df5f748271903322feb182be83b43ebbbe27d",
- "revisionTime": "2019-04-10T21:58:30Z"
- },
- {
- "checksumSHA1": "Ho5sr2GbiR8S35IRni7vC54d5Js=",
- "path": "gopkg.in/square/go-jose.v2/cipher",
- "revision": "730df5f748271903322feb182be83b43ebbbe27d",
- "revisionTime": "2019-04-10T21:58:30Z"
- },
- {
- "checksumSHA1": "JFun0lWY9eqd80Js2iWsehu1gc4=",
- "path": "gopkg.in/square/go-jose.v2/json",
- "revision": "730df5f748271903322feb182be83b43ebbbe27d",
- "revisionTime": "2019-04-10T21:58:30Z"
- },
- {
- "checksumSHA1": "GdsHg+yOsZtdMvD9HJFovPsqKec=",
- "path": "gopkg.in/src-d/go-billy.v4",
- "revision": "053dbd006f81a230434f712314aacfb540b52cc5",
- "revisionTime": "2017-11-27T19:20:57Z"
- },
- {
- "checksumSHA1": "yscejfasrttJfPq91pn7gArFb5o=",
- "path": "gopkg.in/src-d/go-billy.v4/helper/chroot",
- "revision": "053dbd006f81a230434f712314aacfb540b52cc5",
- "revisionTime": "2017-11-27T19:20:57Z"
- },
- {
- "checksumSHA1": "B7HAyGfl+ONIAvlHzbvSsLisx9o=",
- "path": "gopkg.in/src-d/go-billy.v4/helper/polyfill",
- "revision": "053dbd006f81a230434f712314aacfb540b52cc5",
- "revisionTime": "2017-11-27T19:20:57Z"
- },
- {
- "checksumSHA1": "1CnG3JdmIQoa6mE0O98BfymLmuM=",
- "path": "gopkg.in/src-d/go-billy.v4/osfs",
- "revision": "053dbd006f81a230434f712314aacfb540b52cc5",
- "revisionTime": "2017-11-27T19:20:57Z"
- },
- {
- "checksumSHA1": "lo42NuhQJppy2ne/uwPR2T9BSPY=",
- "path": "gopkg.in/src-d/go-billy.v4/util",
- "revision": "053dbd006f81a230434f712314aacfb540b52cc5",
- "revisionTime": "2017-11-27T19:20:57Z"
- },
- {
- "checksumSHA1": "ydjzL2seh3M8h9svrSDV5y/KQJU=",
- "path": "gopkg.in/src-d/go-git.v4",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "TSoIlaADKlw3Zx0ysCCBn6kyXNE=",
- "path": "gopkg.in/src-d/go-git.v4/config",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "B2OLPJ4wnJIM2TMjTyzusYluUeI=",
- "path": "gopkg.in/src-d/go-git.v4/internal/revision",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "o9YH41kQMefVGUS7d3WWSLLhIRk=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "BrsKLhmB0BtaMY+ol1oglnHhvrs=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/cache",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "pHPMiAzXG/TJqTLEKj2SHjxX4zs=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/filemode",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "UGIM9BX7w3MhiadsuN6f8Bx0VZU=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/config",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "L1H7nPf65//6nQGt3Lzq16vLD8w=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/diff",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "87WhYdropmGA4peZOembY5hEgq8=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/gitignore",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "G0TX3efLdk7noo/n1Dt9Tzempig=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/idxfile",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "q7HtzrSzVE9qN5N3QOxkLFcZI1U=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/index",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "0IxJpGMfdnr3cuuVE59u+1B5n9o=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/objfile",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "LJnyldAM69WmMXW5avaEeSScKTU=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/packfile",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "T8efjPxCKp23RvSBI51qugHzgxw=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/format/pktline",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "97LEL3gxgDWPP/UlRHMfKb5I0RA=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/object",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "PQmY1mHiPdNBNrh3lESZe3QH36c=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/protocol/packp",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "JjHHYoWDYf0H//nP2FIS05ZLgj8=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/protocol/packp/capability",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "wVfbzV5BNhjW/HFFJuTCjkPSJ5M=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/protocol/packp/sideband",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "m8nTTRFD7kmX9nT5Yfr9lqabR4s=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/revlist",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "Xito+BwVCMpKrhcvgz5wU+MRmEo=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/storer",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "AVSX04sTj3cBv1muAmIbPE9D9FY=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "cmOntUALmiRvvblEXAQXNO4Oous=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/client",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "gaKy+c/OjPQFLhENnSAFEZUngok=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/file",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "chcAwbm6J5uXXn6IV58+G6RKCjU=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/git",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "m9TNeIIGUBdZ0qdSl5Xa/0TIvfo=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/http",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "6asrmcjb98FpRr83ICCODXdGWdE=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/internal/common",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "MGiWWrsy8iQ5ZdCXEN2Oc4oprCk=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/server",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "vat8YhxXGXNcg8HvCDfHAR6BcL0=",
- "path": "gopkg.in/src-d/go-git.v4/plumbing/transport/ssh",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "FlVLBdu4cjlXj9zjRRNDurRLABU=",
- "path": "gopkg.in/src-d/go-git.v4/storage",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "IpSxC31PynwJBajOaHR7gtnVc7I=",
- "path": "gopkg.in/src-d/go-git.v4/storage/filesystem",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "OaZO6dgvn6PMvezw0bYQUGLSrF0=",
- "path": "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "jPRm9YqpcJzx4oasd6PBdD33Dgo=",
- "path": "gopkg.in/src-d/go-git.v4/storage/memory",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "AzdUpuGqSNnNK6DgdNjWrn99i3o=",
- "path": "gopkg.in/src-d/go-git.v4/utils/binary",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "vniUxB6bbDYazl21cOfmhdZZiY8=",
- "path": "gopkg.in/src-d/go-git.v4/utils/diff",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "cspCXRxvzvoNOEUB7wRgOKYrVjQ=",
- "path": "gopkg.in/src-d/go-git.v4/utils/ioutil",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "shsY2I1OFbnjopNWF21Tkfx+tac=",
- "path": "gopkg.in/src-d/go-git.v4/utils/merkletrie",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "QiHHx1Qb/Vv4W6uQb+mJU2zMqLo=",
- "path": "gopkg.in/src-d/go-git.v4/utils/merkletrie/filesystem",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "M+6y9mdBFksksEGBceBh9Se3W7Y=",
- "path": "gopkg.in/src-d/go-git.v4/utils/merkletrie/index",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "7eEw/xsSrFLfSppRf/JIt9u7lbU=",
- "path": "gopkg.in/src-d/go-git.v4/utils/merkletrie/internal/frame",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "qCb9d3cwnPHVLqS/U9NAzK+1Ptg=",
- "path": "gopkg.in/src-d/go-git.v4/utils/merkletrie/noder",
- "revision": "bf3b1f1fb9e0a04d0f87511a7ded2562b48a19d8",
- "revisionTime": "2018-01-08T13:05:52Z"
- },
- {
- "checksumSHA1": "I4c3qsEX8KAUTeB9+2pwVX/2ojU=",
- "path": "gopkg.in/warnings.v0",
- "revision": "ec4a0fea49c7b46c2aeb0b51aac55779c607e52b",
- "revisionTime": "2017-11-15T19:30:34Z"
- },
- {
- "checksumSHA1": "qOmvuDm+F+2nQQecUZBVkZrTn6Y=",
- "path": "gopkg.in/yaml.v2",
- "revision": "d670f9405373e636a5a2765eea47fac0c9bc91a4",
- "revisionTime": "2018-01-09T11:43:31Z"
- },
- {
- "checksumSHA1": "rBIcwbUjE9w1aV0qh7lAL1hcxCQ=",
- "path": "rsc.io/getopt",
- "revision": "20be20937449f18bb9967c10d732849fb4401e63",
- "revisionTime": "2017-08-11T00:05:52Z"
- }
- ],
- "rootPath": "git.curoverse.com/arvados.git"
-}
commit e9bfb6900e3340bfcdcea691466cd849ca7d9ffc
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Thu Nov 7 14:55:38 2019 -0500
15107: Get additional email addresses from Google account.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/lib/config/config.default.yml b/lib/config/config.default.yml
index fee8503df..0cf7b5e69 100644
--- a/lib/config/config.default.yml
+++ b/lib/config/config.default.yml
@@ -498,9 +498,11 @@ Clusters:
# (Experimental) Authenticate with Google, bypassing the
# SSO-provider gateway service. Use the Google Cloud console to
- # generate the Client ID and secret (APIs and Services >
- # Credentials > Create credentials > OAuth client ID > Web
- # application) and add your controller's /login URL (e.g.,
+ # enable the People API (APIs and Services > Enable APIs and
+ # services > Google People API > Enable), generate a Client ID
+ # and secret (APIs and Services > Credentials > Create
+ # credentials > OAuth client ID > Web application) and add your
+ # controller's /login URL (e.g.,
# "https://zzzzz.example.com/login") as an authorized redirect
# URL.
#
diff --git a/lib/config/generated_config.go b/lib/config/generated_config.go
index 42beb0663..4dc00cf62 100644
--- a/lib/config/generated_config.go
+++ b/lib/config/generated_config.go
@@ -504,9 +504,11 @@ Clusters:
# (Experimental) Authenticate with Google, bypassing the
# SSO-provider gateway service. Use the Google Cloud console to
- # generate the Client ID and secret (APIs and Services >
- # Credentials > Create credentials > OAuth client ID > Web
- # application) and add your controller's /login URL (e.g.,
+ # enable the People API (APIs and Services > Enable APIs and
+ # services > Google People API > Enable), generate a Client ID
+ # and secret (APIs and Services > Credentials > Create
+ # credentials > OAuth client ID > Web application) and add your
+ # controller's /login URL (e.g.,
# "https://zzzzz.example.com/login") as an authorized redirect
# URL.
#
diff --git a/lib/controller/localdb/login.go b/lib/controller/localdb/login.go
index 8b83c3857..ddd342699 100644
--- a/lib/controller/localdb/login.go
+++ b/lib/controller/localdb/login.go
@@ -21,14 +21,18 @@ import (
"git.curoverse.com/arvados.git/lib/controller/rpc"
"git.curoverse.com/arvados.git/sdk/go/arvados"
"git.curoverse.com/arvados.git/sdk/go/auth"
+ "git.curoverse.com/arvados.git/sdk/go/ctxlog"
"github.com/coreos/go-oidc"
"golang.org/x/oauth2"
+ "google.golang.org/api/option"
+ "google.golang.org/api/people/v1"
)
type googleLoginController struct {
- issuer string // override OIDC issuer URL (normally https://accounts.google.com) for testing
- provider *oidc.Provider
- mu sync.Mutex
+ issuer string // override OIDC issuer URL (normally https://accounts.google.com) for testing
+ peopleAPIBasePath string // override Google People API base URL (normally set by google pkg to https://people.googleapis.com/)
+ provider *oidc.Provider
+ mu sync.Mutex
}
func (ctrl *googleLoginController) getProvider() (*oidc.Provider, error) {
@@ -106,34 +110,101 @@ func (ctrl *googleLoginController) Login(ctx context.Context, cluster *arvados.C
if err != nil {
return ctrl.loginError(fmt.Errorf("error verifying ID token: %s", err))
}
- var claims struct {
- Name string `json:"name"`
- Email string `json:"email"`
- Verified bool `json:"email_verified"`
+ authinfo, err := ctrl.getAuthInfo(ctx, conf, oauth2Token, idToken)
+ if err != nil {
+ return ctrl.loginError(err)
}
- if err := idToken.Claims(&claims); err != nil {
- return ctrl.loginError(fmt.Errorf("error extracting claims from ID token: %s", err))
+ ctxRoot := auth.NewContext(ctx, &auth.Credentials{Tokens: []string{cluster.SystemRootToken}})
+ return railsproxy.UserSessionCreate(ctxRoot, rpc.UserSessionCreateOptions{
+ ReturnTo: state.Remote + "," + state.ReturnTo,
+ AuthInfo: *authinfo,
+ })
+ }
+}
+
+// Use a person's token to get all of their email addresses, with the
+// primary address at index 0. The provided defaultAddr is always
+// included in the returned slice, and is used as the primary if the
+// Google API does not indicate one.
+func (ctrl *googleLoginController) getAuthInfo(ctx context.Context, conf *oauth2.Config, token *oauth2.Token, idToken *oidc.IDToken) (*rpc.UserSessionAuthInfo, error) {
+ var ret rpc.UserSessionAuthInfo
+ defer ctxlog.FromContext(ctx).Infof("ret: %#v", &ret) // debug
+
+ var claims struct {
+ Name string `json:"name"`
+ Email string `json:"email"`
+ Verified bool `json:"email_verified"`
+ }
+ if err := idToken.Claims(&claims); err != nil {
+ return nil, fmt.Errorf("error extracting claims from ID token: %s", err)
+ } else if claims.Verified {
+ // Fall back to this info if the People API call
+ // (below) doesn't return a primary && verified email.
+ if names := strings.Fields(strings.TrimSpace(claims.Name)); len(names) > 1 {
+ ret.FirstName = strings.Join(names[0:len(names)-1], " ")
+ ret.LastName = names[len(names)-1]
+ } else {
+ ret.FirstName = names[0]
}
- if !claims.Verified {
- return ctrl.loginError(errors.New("cannot authenticate using an unverified email address"))
+ ret.Email = claims.Email
+ }
+
+ svc, err := people.NewService(ctx, option.WithTokenSource(conf.TokenSource(ctx, token)), option.WithScopes(people.UserEmailsReadScope))
+ if err != nil {
+ return nil, fmt.Errorf("error setting up People API: %s", err)
+ }
+ if p := ctrl.peopleAPIBasePath; p != "" {
+ // Override normal API endpoint (for testing)
+ svc.BasePath = p
+ }
+ person, err := people.NewPeopleService(svc).Get("people/me").Fields("emailAddresses,names").Do()
+ if err != nil {
+ if strings.Contains(err.Error(), "Error 403") && strings.Contains(err.Error(), "accessNotConfigured") && ret.Email != "" {
+ // Fall back on the primary email from the OAuth2 token.
+ ctxlog.FromContext(ctx).WithError(err).WithField("email", ret.Email).Warn("cannot look up alternate email addresses because People API is not enabled")
+ return &ret, nil
+ } else {
+ // Unexpected error, or no email to fall back on.
+ return nil, fmt.Errorf("error getting profile info from People API: %s", err)
}
+ }
+
+ ctxlog.FromContext(ctx).Infof("people/me response: %#v", person) // debug
- firstname, lastname := strings.TrimSpace(claims.Name), ""
- if names := strings.Fields(firstname); len(names) > 1 {
- firstname = strings.Join(names[0:len(names)-1], " ")
- lastname = names[len(names)-1]
+ // The given/family names returned by the People API and
+ // flagged as "primary" (if any) take precedence over the
+ // split-by-whitespace result from above.
+ for _, name := range person.Names {
+ if name.Metadata != nil && name.Metadata.Primary {
+ ret.FirstName = name.GivenName
+ ret.LastName = name.FamilyName
+ break
}
+ }
- ctxRoot := auth.NewContext(ctx, &auth.Credentials{Tokens: []string{cluster.SystemRootToken}})
- return railsproxy.UserSessionCreate(ctxRoot, rpc.UserSessionCreateOptions{
- ReturnTo: state.Remote + "," + state.ReturnTo,
- AuthInfo: map[string]interface{}{
- "email": claims.Email,
- "first_name": firstname,
- "last_name": lastname,
- },
- })
+ altEmails := map[string]bool{}
+ if ret.Email != "" {
+ altEmails[ret.Email] = true
+ }
+ for _, ea := range person.EmailAddresses {
+ if ea.Metadata == nil || !ea.Metadata.Verified {
+ ctxlog.FromContext(ctx).WithField("address", ea.Value).Debug("skipping unverified email address")
+ continue
+ }
+ altEmails[ea.Value] = true
+ if ea.Metadata.Primary || ret.Email == "" {
+ ret.Email = ea.Value
+ }
+ }
+ if len(altEmails) == 0 {
+ return nil, errors.New("cannot log in without a verified email address")
+ }
+ for ae := range altEmails {
+ if ae != ret.Email {
+ ret.AlternateEmails = append(ret.AlternateEmails, ae)
+ }
}
+ return &ret, nil
}
func (ctrl *googleLoginController) loginError(sendError error) (resp arvados.LoginResponse, err error) {
diff --git a/lib/controller/localdb/login_test.go b/lib/controller/localdb/login_test.go
index 362e25840..e36571ef1 100644
--- a/lib/controller/localdb/login_test.go
+++ b/lib/controller/localdb/login_test.go
@@ -14,6 +14,7 @@ import (
"net/http"
"net/http/httptest"
"net/url"
+ "sort"
"strings"
"testing"
"time"
@@ -36,12 +37,14 @@ func Test(t *testing.T) {
var _ = check.Suite(&LoginSuite{})
type LoginSuite struct {
- cluster *arvados.Cluster
- ctx context.Context
- localdb *Conn
- railsSpy *arvadostest.Proxy
- fakeIssuer *httptest.Server
- issuerKey *rsa.PrivateKey
+ cluster *arvados.Cluster
+ ctx context.Context
+ localdb *Conn
+ railsSpy *arvadostest.Proxy
+ fakeIssuer *httptest.Server
+ fakePeopleAPI *httptest.Server
+ fakePeopleAPIResponse map[string]interface{}
+ issuerKey *rsa.PrivateKey
// expected token request
validCode string
@@ -51,6 +54,13 @@ type LoginSuite struct {
authName string
}
+func (s *LoginSuite) TearDownSuite(c *check.C) {
+ // Undo any changes/additions to the user database so they
+ // don't affect subsequent tests.
+ arvadostest.ResetEnv()
+ c.Check(arvados.NewClientFromEnv().RequestAndDecode(nil, "POST", "database/reset", nil, nil), check.IsNil)
+}
+
func (s *LoginSuite) SetUpTest(c *check.C) {
var err error
s.issuerKey, err = rsa.GenerateKey(rand.Reader, 2048)
@@ -115,6 +125,24 @@ func (s *LoginSuite) SetUpTest(c *check.C) {
w.WriteHeader(http.StatusNotFound)
}
}))
+ s.validCode = fmt.Sprintf("abcdefgh-%d", time.Now().Unix())
+
+ s.fakePeopleAPI = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
+ req.ParseForm()
+ c.Logf("fakePeopleAPI: got req: %s %s %s", req.Method, req.URL, req.Form)
+ w.Header().Set("Content-Type", "application/json")
+ switch req.URL.Path {
+ case "/v1/people/me":
+ if f := req.Form.Get("fields"); f != "emailAddresses,names" {
+ w.WriteHeader(http.StatusBadRequest)
+ break
+ }
+ json.NewEncoder(w).Encode(s.fakePeopleAPIResponse)
+ default:
+ w.WriteHeader(http.StatusNotFound)
+ }
+ }))
+ s.fakePeopleAPIResponse = map[string]interface{}{}
cfg, err := config.NewLoader(nil, ctxlog.TestLogger(c)).Load()
s.cluster, err = cfg.GetCluster("")
@@ -124,6 +152,7 @@ func (s *LoginSuite) SetUpTest(c *check.C) {
s.localdb = NewConn(s.cluster)
s.localdb.googleLoginController.issuer = s.fakeIssuer.URL
+ s.localdb.googleLoginController.peopleAPIBasePath = s.fakePeopleAPI.URL
s.railsSpy = arvadostest.NewProxy(c, s.cluster.Services.RailsAPI)
s.localdb.railsProxy = rpc.NewConn(s.cluster.ClusterID, s.railsSpy.URL, true, rpc.PassthroughTokenProvider)
@@ -133,14 +162,14 @@ func (s *LoginSuite) TearDownTest(c *check.C) {
s.railsSpy.Close()
}
-func (s *LoginSuite) TestGoogleLoginStart_Bogus(c *check.C) {
+func (s *LoginSuite) TestGoogleLogin_Start_Bogus(c *check.C) {
resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{})
c.Check(err, check.IsNil)
c.Check(resp.RedirectLocation, check.Equals, "")
c.Check(resp.HTML.String(), check.Matches, `.*missing return_to parameter.*`)
}
-func (s *LoginSuite) TestGoogleLoginStart(c *check.C) {
+func (s *LoginSuite) TestGoogleLogin_Start(c *check.C) {
for _, remote := range []string{"", "zzzzz"} {
resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{Remote: remote, ReturnTo: "https://app.example.com/foo?bar"})
c.Check(err, check.IsNil)
@@ -158,70 +187,48 @@ func (s *LoginSuite) TestGoogleLoginStart(c *check.C) {
}
}
-func (s *LoginSuite) TestGoogleLoginSuccess(c *check.C) {
- // Initiate login, but instead of following the redirect to
- // the provider, just grab state from the redirect URL.
- resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{ReturnTo: "https://app.example.com/foo?bar"})
- c.Check(err, check.IsNil)
- target, err := url.Parse(resp.RedirectLocation)
- c.Check(err, check.IsNil)
- state := target.Query().Get("state")
- c.Check(state, check.Not(check.Equals), "")
-
- // Prime the fake issuer with a valid code.
- s.validCode = fmt.Sprintf("abcdefgh-%d", time.Now().Unix())
-
- // Callback with invalid code.
- resp, err = s.localdb.Login(context.Background(), arvados.LoginOptions{
+func (s *LoginSuite) TestGoogleLogin_InvalidCode(c *check.C) {
+ state := s.startLogin(c)
+ resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{
Code: "first-try-a-bogus-code",
State: state,
})
c.Check(err, check.IsNil)
c.Check(resp.RedirectLocation, check.Equals, "")
c.Check(resp.HTML.String(), check.Matches, `(?ms).*error in OAuth2 exchange.*cannot fetch token.*`)
+}
- // Callback with invalid state.
- resp, err = s.localdb.Login(context.Background(), arvados.LoginOptions{
+func (s *LoginSuite) TestGoogleLogin_InvalidState(c *check.C) {
+ s.startLogin(c)
+ resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{
Code: s.validCode,
State: "bogus-state",
})
c.Check(err, check.IsNil)
c.Check(resp.RedirectLocation, check.Equals, "")
c.Check(resp.HTML.String(), check.Matches, `(?ms).*invalid OAuth2 state.*`)
+}
- // Callback with valid code and state.
- resp, err = s.localdb.Login(context.Background(), arvados.LoginOptions{
+func (s *LoginSuite) TestGoogleLogin_Success(c *check.C) {
+ state := s.startLogin(c)
+ resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{
Code: s.validCode,
State: state,
})
c.Check(err, check.IsNil)
c.Check(resp.HTML.String(), check.Equals, "")
- c.Check(resp.RedirectLocation, check.Not(check.Equals), "")
- target, err = url.Parse(resp.RedirectLocation)
+ target, err := url.Parse(resp.RedirectLocation)
c.Check(err, check.IsNil)
c.Check(target.Host, check.Equals, "app.example.com")
c.Check(target.Path, check.Equals, "/foo")
token := target.Query().Get("api_token")
c.Check(token, check.Matches, `v2/zzzzz-gj3su-.{15}/.{32,50}`)
- foundCallback := false
- for _, dump := range s.railsSpy.RequestDumps {
- c.Logf("spied request: %q", dump)
- split := bytes.Split(dump, []byte("\r\n\r\n"))
- c.Assert(split, check.HasLen, 2)
- hdr, body := string(split[0]), string(split[1])
- if strings.Contains(hdr, "POST /auth/controller/callback") {
- vs, err := url.ParseQuery(body)
- var authinfo map[string]interface{}
- c.Check(json.Unmarshal([]byte(vs.Get("auth_info")), &authinfo), check.IsNil)
- c.Check(err, check.IsNil)
- c.Check(authinfo["first_name"], check.Equals, "Fake User")
- c.Check(authinfo["last_name"], check.Equals, "Name")
- c.Check(authinfo["email"], check.Equals, "active-user at arvados.local")
- foundCallback = true
- }
- }
- c.Check(foundCallback, check.Equals, true)
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.FirstName, check.Equals, "Fake User")
+ c.Check(authinfo.LastName, check.Equals, "Name")
+ c.Check(authinfo.Email, check.Equals, "active-user at arvados.local")
+ c.Check(authinfo.AlternateEmails, check.HasLen, 0)
// Try using the returned Arvados token.
c.Logf("trying an API call with new token %q", token)
@@ -241,6 +248,157 @@ func (s *LoginSuite) TestGoogleLoginSuccess(c *check.C) {
c.Check(err, check.ErrorMatches, `.*401 Unauthorized: Not logged in.*`)
}
+func (s *LoginSuite) TestGoogleLogin_RealName(c *check.C) {
+ s.authEmail = "joe.smith at primary.example.com"
+ s.fakePeopleAPIResponse = map[string]interface{}{
+ "names": []map[string]interface{}{
+ {
+ "metadata": map[string]interface{}{"primary": false},
+ "givenName": "Joe",
+ "familyName": "Smith",
+ },
+ {
+ "metadata": map[string]interface{}{"primary": true},
+ "givenName": "Joseph",
+ "familyName": "Psmith",
+ },
+ },
+ }
+ state := s.startLogin(c)
+ s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.FirstName, check.Equals, "Joseph")
+ c.Check(authinfo.LastName, check.Equals, "Psmith")
+}
+
+func (s *LoginSuite) TestGoogleLogin_OIDCRealName(c *check.C) {
+ s.authName = "Joe P. Smith"
+ s.authEmail = "joe.smith at primary.example.com"
+ state := s.startLogin(c)
+ s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.FirstName, check.Equals, "Joe P.")
+ c.Check(authinfo.LastName, check.Equals, "Smith")
+}
+
+// People API returns some additional email addresses.
+func (s *LoginSuite) TestGoogleLogin_AlternateEmailAddresses(c *check.C) {
+ s.authEmail = "joe.smith at primary.example.com"
+ s.fakePeopleAPIResponse = map[string]interface{}{
+ "emailAddresses": []map[string]interface{}{
+ {
+ "metadata": map[string]interface{}{"verified": true},
+ "value": "joe.smith at work.example.com",
+ },
+ {
+ "value": "joe.smith at unverified.example.com", // unverified, so this one will be ignored
+ },
+ {
+ "metadata": map[string]interface{}{"verified": true},
+ "value": "joe.smith at home.example.com",
+ },
+ },
+ }
+ state := s.startLogin(c)
+ s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.Email, check.Equals, "joe.smith at primary.example.com")
+ c.Check(authinfo.AlternateEmails, check.DeepEquals, []string{"joe.smith at home.example.com", "joe.smith at work.example.com"})
+}
+
+// Primary address is not the one initially returned by oidc.
+func (s *LoginSuite) TestGoogleLogin_AlternateEmailAddresses_Primary(c *check.C) {
+ s.authEmail = "joe.smith at alternate.example.com"
+ s.fakePeopleAPIResponse = map[string]interface{}{
+ "emailAddresses": []map[string]interface{}{
+ {
+ "metadata": map[string]interface{}{"verified": true, "primary": true},
+ "value": "joe.smith at primary.example.com",
+ },
+ {
+ "metadata": map[string]interface{}{"verified": true},
+ "value": "joe.smith at alternate.example.com",
+ },
+ },
+ }
+ state := s.startLogin(c)
+ s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.Email, check.Equals, "joe.smith at primary.example.com")
+ c.Check(authinfo.AlternateEmails, check.DeepEquals, []string{"joe.smith at alternate.example.com"})
+}
+
+func (s *LoginSuite) TestGoogleLogin_NoPrimaryEmailAddress(c *check.C) {
+ s.authEmail = "joe.smith at unverified.example.com"
+ s.authEmailVerified = false
+ s.fakePeopleAPIResponse = map[string]interface{}{
+ "emailAddresses": []map[string]interface{}{
+ {
+ "metadata": map[string]interface{}{"verified": true},
+ "value": "joe.smith at work.example.com",
+ },
+ {
+ "metadata": map[string]interface{}{"verified": true},
+ "value": "joe.smith at home.example.com",
+ },
+ },
+ }
+ state := s.startLogin(c)
+ s.localdb.Login(context.Background(), arvados.LoginOptions{
+ Code: s.validCode,
+ State: state,
+ })
+
+ authinfo := s.getCallbackAuthInfo(c)
+ c.Check(authinfo.Email, check.Equals, "joe.smith at work.example.com") // first verified email in People response
+ c.Check(authinfo.AlternateEmails, check.DeepEquals, []string{"joe.smith at home.example.com"})
+}
+
+func (s *LoginSuite) getCallbackAuthInfo(c *check.C) (authinfo rpc.UserSessionAuthInfo) {
+ for _, dump := range s.railsSpy.RequestDumps {
+ c.Logf("spied request: %q", dump)
+ split := bytes.Split(dump, []byte("\r\n\r\n"))
+ c.Assert(split, check.HasLen, 2)
+ hdr, body := string(split[0]), string(split[1])
+ if strings.Contains(hdr, "POST /auth/controller/callback") {
+ vs, err := url.ParseQuery(body)
+ c.Check(json.Unmarshal([]byte(vs.Get("auth_info")), &authinfo), check.IsNil)
+ c.Check(err, check.IsNil)
+ sort.Strings(authinfo.AlternateEmails)
+ return
+ }
+ }
+ c.Error("callback not found")
+ return
+}
+
+func (s *LoginSuite) startLogin(c *check.C) (state string) {
+ // Initiate login, but instead of following the redirect to
+ // the provider, just grab state from the redirect URL.
+ resp, err := s.localdb.Login(context.Background(), arvados.LoginOptions{ReturnTo: "https://app.example.com/foo?bar"})
+ c.Check(err, check.IsNil)
+ target, err := url.Parse(resp.RedirectLocation)
+ c.Check(err, check.IsNil)
+ state = target.Query().Get("state")
+ c.Check(state, check.Not(check.Equals), "")
+ return
+}
+
func (s *LoginSuite) fakeToken(c *check.C, payload []byte) string {
signer, err := jose.NewSigner(jose.SigningKey{Algorithm: jose.RS256, Key: s.issuerKey}, nil)
if err != nil {
diff --git a/lib/controller/rpc/conn.go b/lib/controller/rpc/conn.go
index cb23c7fad..7d7cb486f 100644
--- a/lib/controller/rpc/conn.go
+++ b/lib/controller/rpc/conn.go
@@ -315,9 +315,16 @@ func (conn *Conn) APIClientAuthorizationCurrent(ctx context.Context, options arv
return resp, err
}
+type UserSessionAuthInfo struct {
+ Email string `json:"email"`
+ AlternateEmails []string `json:"alternate_emails"`
+ FirstName string `json:"first_name"`
+ LastName string `json:"last_name"`
+}
+
type UserSessionCreateOptions struct {
- AuthInfo map[string]interface{} `json:"auth_info"`
- ReturnTo string `json:"return_to"`
+ AuthInfo UserSessionAuthInfo `json:"auth_info"`
+ ReturnTo string `json:"return_to"`
}
func (conn *Conn) UserSessionCreate(ctx context.Context, options UserSessionCreateOptions) (arvados.LoginResponse, error) {
diff --git a/sdk/go/arvados/login.go b/sdk/go/arvados/login.go
index 8c515468c..7107ac57a 100644
--- a/sdk/go/arvados/login.go
+++ b/sdk/go/arvados/login.go
@@ -15,10 +15,12 @@ type LoginResponse struct {
}
func (resp LoginResponse) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+ w.Header().Set("Cache-Control", "no-store")
if resp.RedirectLocation != "" {
w.Header().Set("Location", resp.RedirectLocation)
w.WriteHeader(http.StatusFound)
} else {
+ w.Header().Set("Content-Type", "text/html")
w.Write(resp.HTML.Bytes())
}
}
diff --git a/services/api/app/controllers/database_controller.rb b/services/api/app/controllers/database_controller.rb
index b618a321e..d6045a5dc 100644
--- a/services/api/app/controllers/database_controller.rb
+++ b/services/api/app/controllers/database_controller.rb
@@ -14,7 +14,7 @@ class DatabaseController < ApplicationController
# use @example.com email addresses when creating user records, so
# we can tell they're not valuable.
user_uuids = User.
- where('email is null or email not like ?', '%@example.com').
+ where('email is null or (email not like ? and email not like ?)', '%@example.com', '%.example.com').
collect(&:uuid)
fixture_uuids =
YAML::load_file(File.expand_path('../../../test/fixtures/users.yml',
diff --git a/vendor/vendor.json b/vendor/vendor.json
index b449e2f12..7585a8c9e 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -3,6 +3,12 @@
"ignore": "test appengine",
"package": [
{
+ "checksumSHA1": "AH7jcN7pvaPDU6UjHdpT081DDGk=",
+ "path": "cloud.google.com/go/compute/metadata",
+ "revision": "f07fddce3276603951ac45f50f743de632956bef",
+ "revisionTime": "2018-05-30T18:12:30Z"
+ },
+ {
"checksumSHA1": "jfYWZyRWLMfG0J5K7G2K8a9AKfs=",
"origin": "github.com/curoverse/goamz/aws",
"path": "github.com/AdRoll/goamz/aws",
@@ -498,10 +504,76 @@
"revisionTime": "2018-05-09T16:24:41Z"
},
{
- "checksumSHA1": "yqF125xVSkmfLpIVGrLlfE05IUk=",
+ "checksumSHA1": "LHNzQwau1zPeFPPG5zbNf8AgUOQ=",
+ "path": "github.com/golang/groupcache/lru",
+ "revision": "611e8accdfc92c4187d399e95ce826046d4c8d73",
+ "revisionTime": "2019-10-27T21:21:12Z"
+ },
+ {
+ "checksumSHA1": "Q3FteGbNvRRUMJqbYbmrcBd2DMo=",
"path": "github.com/golang/protobuf/proto",
- "revision": "1e59b77b52bf8e4b449a57e6f79f21226d571845",
- "revisionTime": "2017-11-13T18:07:20Z"
+ "revision": "ed6926b37a637426117ccab59282c3839528a700",
+ "revisionTime": "2019-10-22T19:55:53Z"
+ },
+ {
+ "checksumSHA1": "aEiR2m3NGaMGTbUW5P+w5gKFyc8=",
+ "path": "github.com/golang/protobuf/ptypes",
+ "revision": "ed6926b37a637426117ccab59282c3839528a700",
+ "revisionTime": "2019-10-22T19:55:53Z"
+ },
+ {
+ "checksumSHA1": "2/Xg4L9IVGQRJB8zCELZx7/Z4HU=",
+ "path": "github.com/golang/protobuf/ptypes/any",
+ "revision": "ed6926b37a637426117ccab59282c3839528a700",
+ "revisionTime": "2019-10-22T19:55:53Z"
+ },
+ {
+ "checksumSHA1": "RE9rLveNHapyMKQC8p10tbkUE9w=",
+ "path": "github.com/golang/protobuf/ptypes/duration",
+ "revision": "ed6926b37a637426117ccab59282c3839528a700",
+ "revisionTime": "2019-10-22T19:55:53Z"
+ },
+ {
+ "checksumSHA1": "seEwY2xETpK9yHJ9+bHqkLZ0VMU=",
+ "path": "github.com/golang/protobuf/ptypes/timestamp",
+ "revision": "ed6926b37a637426117ccab59282c3839528a700",
+ "revisionTime": "2019-10-22T19:55:53Z"
+ },
+ {
+ "checksumSHA1": "xN4Xr7jzSvXl7DOOqzbWihUbfuA=",
+ "path": "github.com/google/go-cmp/cmp",
+ "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
+ "revisionTime": "2019-11-05T00:03:44Z"
+ },
+ {
+ "checksumSHA1": "FUnTgtE5i3f8asIvicGkJSFlrts=",
+ "path": "github.com/google/go-cmp/cmp/internal/diff",
+ "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
+ "revisionTime": "2019-11-05T00:03:44Z"
+ },
+ {
+ "checksumSHA1": "nR8EJ8i8lqxxmtLPnXI7WlYANiE=",
+ "path": "github.com/google/go-cmp/cmp/internal/flags",
+ "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
+ "revisionTime": "2019-11-05T00:03:44Z"
+ },
+ {
+ "checksumSHA1": "0pcLJsUQUaBdPXM5LuL9uFeuETs=",
+ "path": "github.com/google/go-cmp/cmp/internal/function",
+ "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
+ "revisionTime": "2019-11-05T00:03:44Z"
+ },
+ {
+ "checksumSHA1": "zQxhgAvWmYtrTZjxRenQQYiDX50=",
+ "path": "github.com/google/go-cmp/cmp/internal/value",
+ "revision": "776445f29feeb6041579ae3df3c5615aba0fa128",
+ "revisionTime": "2019-11-05T00:03:44Z"
+ },
+ {
+ "checksumSHA1": "NqlcmlYFsLm2R1iJY0zynpIWNhg=",
+ "path": "github.com/googleapis/gax-go/v2",
+ "revision": "b443e5a67ec8eeac76f5f384004931878cab24b3",
+ "revisionTime": "2019-10-18T15:11:19Z"
},
{
"checksumSHA1": "iIUYZyoanCQQTUaWsu8b+iOSPt4=",
@@ -746,6 +818,108 @@
"revisionTime": "2015-12-15T15:34:51Z"
},
{
+ "checksumSHA1": "Ijg5Yx2tIE09R698JrJrlDJuH6U=",
+ "path": "go.opencensus.io",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "qJGsfghV4/lQ6Rhq/EaVqQPJ0s4=",
+ "path": "go.opencensus.io/internal",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "Dw3rpna1DwTa7TCzijInKcU49g4=",
+ "path": "go.opencensus.io/internal/tagencoding",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "r6fbtPwxK4/TYUOWc7y0hXdAG4Q=",
+ "path": "go.opencensus.io/metric/metricdata",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "kWj13srwY1SH5KgFecPhEfHnzVc=",
+ "path": "go.opencensus.io/metric/metricproducer",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "PxZNj+yFM4Ru4Pu2jEatlCpmqFU=",
+ "path": "go.opencensus.io/plugin/ocgrpc",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "h/Q73rMyitTcsqw1Fy8C74F31hk=",
+ "path": "go.opencensus.io/plugin/ochttp",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "UZhIoErIy1tKLmVT/5huwlp6KFQ=",
+ "path": "go.opencensus.io/plugin/ochttp/propagation/b3",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "q+y8X+5nDONIlJlxfkv+OtA18ds=",
+ "path": "go.opencensus.io/resource",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "EbYHMjHqN1YfUNgwf97qS/Z4uP8=",
+ "path": "go.opencensus.io/stats",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "oIo4NRi6AVCfcwVfHzCXAsoZsdI=",
+ "path": "go.opencensus.io/stats/internal",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "6LKTLjjNUw74vuJik17FFLMHOoY=",
+ "path": "go.opencensus.io/stats/view",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "rx4HvicGhFI5wv55qVaRAMsHZ7g=",
+ "path": "go.opencensus.io/tag",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "Qehn8Uz+e5KgZW8gPXK4snQNfiU=",
+ "path": "go.opencensus.io/trace",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "JkvEb8oMEFjic5K/03Tyr5Lok+w=",
+ "path": "go.opencensus.io/trace/internal",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "FHJParRi8f1GHO7Cx+lk3bMWBq0=",
+ "path": "go.opencensus.io/trace/propagation",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
+ "checksumSHA1": "UHbxxaMqpEPsubh8kPwzSlyEwqI=",
+ "path": "go.opencensus.io/trace/tracestate",
+ "revision": "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a",
+ "revisionTime": "2019-10-15T19:20:41Z"
+ },
+ {
"checksumSHA1": "TT1rac6kpQp2vz24m5yDGUNQ/QQ=",
"path": "golang.org/x/crypto/cast5",
"revision": "0fcca4842a8d74bfddc2c96a073bd2a4d2a7a2e8",
@@ -861,12 +1035,48 @@
"revisionTime": "2017-09-25T09:26:47Z"
},
{
+ "checksumSHA1": "pCY4YtdNKVBYRbNvODjx8hj0hIs=",
+ "path": "golang.org/x/net/http/httpguts",
+ "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
+ "revisionTime": "2019-06-03T08:53:59Z"
+ },
+ {
+ "checksumSHA1": "Fjq5E3MoRRoXn+VkHZ8nziuw3Vk=",
+ "path": "golang.org/x/net/http2",
+ "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
+ "revisionTime": "2019-06-03T08:53:59Z"
+ },
+ {
+ "checksumSHA1": "VJwSx33rjMC7O6K2O50Jw6o1vw4=",
+ "path": "golang.org/x/net/http2/hpack",
+ "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
+ "revisionTime": "2019-06-03T08:53:59Z"
+ },
+ {
+ "checksumSHA1": "vL6l4FZWitsxht0uqA/GpDNkNNc=",
+ "path": "golang.org/x/net/idna",
+ "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
+ "revisionTime": "2019-06-03T08:53:59Z"
+ },
+ {
+ "checksumSHA1": "UxahDzW2v4mf/+aFxruuupaoIwo=",
+ "path": "golang.org/x/net/internal/timeseries",
+ "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
+ "revisionTime": "2019-06-03T08:53:59Z"
+ },
+ {
"checksumSHA1": "r9l4r3H6FOLQ0c2JaoXpopFjpnw=",
"path": "golang.org/x/net/proxy",
"revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
"revisionTime": "2017-09-25T09:26:47Z"
},
{
+ "checksumSHA1": "HvmG9LfStMLF+hIC7xR4SxegMis=",
+ "path": "golang.org/x/net/trace",
+ "revision": "60506f45cf65977eb3a9c6e30f995f54a721c271",
+ "revisionTime": "2019-06-03T08:53:59Z"
+ },
+ {
"checksumSHA1": "TBlnCuZUOzJHLu5DNY7XEj8TvbU=",
"path": "golang.org/x/net/webdav",
"revision": "434ec0c7fe3742c984919a691b2018a6e9694425",
@@ -891,24 +1101,48 @@
"revisionTime": "2018-05-28T20:23:04Z"
},
{
+ "checksumSHA1": "z7mSaGccufg15ki2YPd+M5PlsUc=",
+ "path": "golang.org/x/oauth2/google",
+ "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
+ "revisionTime": "2018-05-28T20:23:04Z"
+ },
+ {
"checksumSHA1": "fddd1btmbXxnlMKHUZewlVlSaEQ=",
"path": "golang.org/x/oauth2/internal",
"revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
"revisionTime": "2018-05-28T20:23:04Z"
},
{
- "checksumSHA1": "znPq37/LZ4pJh7B4Lbu0ZuoMhNk=",
+ "checksumSHA1": "huVltYnXdRFDJLgp/ZP9IALzG7g=",
+ "path": "golang.org/x/oauth2/jws",
+ "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
+ "revisionTime": "2018-05-28T20:23:04Z"
+ },
+ {
+ "checksumSHA1": "QPndO4ODVdEBILRhJ6869UDAoHc=",
+ "path": "golang.org/x/oauth2/jwt",
+ "revision": "ec22f46f877b4505e0117eeaab541714644fdd28",
+ "revisionTime": "2018-05-28T20:23:04Z"
+ },
+ {
+ "checksumSHA1": "cvrBKcl7QwkGktQiWFoQj1SGb94=",
"origin": "github.com/docker/docker/vendor/golang.org/x/sys/unix",
"path": "golang.org/x/sys/unix",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
+ "revision": "c36460c437c8c515c543dd31afcbb5c2a9f5dd48",
+ "revisionTime": "2019-11-05T21:04:14Z"
},
{
- "checksumSHA1": "8BcMOi8XTSigDtV2npDc8vMrS60=",
+ "checksumSHA1": "+1FhB9xHOPgEPl5uaAiaegod/R0=",
"origin": "github.com/docker/docker/vendor/golang.org/x/sys/windows",
"path": "golang.org/x/sys/windows",
- "revision": "94b8a116fbf1cd90e68d8f5361b520d326a66f9b",
- "revisionTime": "2018-01-09T01:38:17Z"
+ "revision": "c36460c437c8c515c543dd31afcbb5c2a9f5dd48",
+ "revisionTime": "2019-11-05T21:04:14Z"
+ },
+ {
+ "checksumSHA1": "CbpjEkkOeh0fdM/V8xKDdI0AA88=",
+ "path": "golang.org/x/text/secure/bidirule",
+ "revision": "7922cc490dd5a7dbaa7fd5d6196b49db59ac042f",
+ "revisionTime": "2018-04-05T08:39:28Z"
},
{
"checksumSHA1": "ziMb9+ANGRJSSIuxYdRbA+cDRBQ=",
@@ -917,12 +1151,462 @@
"revisionTime": "2017-12-24T20:31:28Z"
},
{
+ "checksumSHA1": "w8kDfZ1Ug+qAcVU0v8obbu3aDOY=",
+ "path": "golang.org/x/text/unicode/bidi",
+ "revision": "7922cc490dd5a7dbaa7fd5d6196b49db59ac042f",
+ "revisionTime": "2018-04-05T08:39:28Z"
+ },
+ {
"checksumSHA1": "BCNYmf4Ek93G4lk5x3ucNi/lTwA=",
"path": "golang.org/x/text/unicode/norm",
"revision": "e19ae1496984b1c655b8044a65c0300a3c878dd3",
"revisionTime": "2017-12-24T20:31:28Z"
},
{
+ "checksumSHA1": "RIKH6cQNe0mczH5HxseRIpEYidE=",
+ "path": "google.golang.org/api/gensupport",
+ "revision": "de943baf05a022a8f921b544b7827bacaba1aed5",
+ "revisionTime": "2016-10-20T18:20:02Z"
+ },
+ {
+ "checksumSHA1": "LxVdu+BwMh3wiugATYeipYXwJIw=",
+ "path": "google.golang.org/api/googleapi",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "1K0JxrUfDqAB3MyRiU1LKjfHyf4=",
+ "path": "google.golang.org/api/googleapi/internal/uritemplates",
+ "revision": "de943baf05a022a8f921b544b7827bacaba1aed5",
+ "revisionTime": "2016-10-20T18:20:02Z"
+ },
+ {
+ "checksumSHA1": "8cjsXKNgewlFLlMnJ3N83abOQfA=",
+ "path": "google.golang.org/api/googleapi/transport",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "FGskZ2MgVCROzzlbrdYPnISEgu0=",
+ "path": "google.golang.org/api/internal",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "I4Oe5Q+AuaxmN3duL38r2evqGKk=",
+ "path": "google.golang.org/api/internal/gensupport",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "nN+zggDyWr8HPYzwltMkzJJr1Jc=",
+ "path": "google.golang.org/api/internal/third_party/uritemplates",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "+ogQsnuO518OACDBVThVxjAoDO8=",
+ "path": "google.golang.org/api/option",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "lDj30SHq8JTOxBhzjZSPoidYU4U=",
+ "path": "google.golang.org/api/people/v1",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "Hz0CoIHu+fpeNxQhCtvdJL5KgUg=",
+ "path": "google.golang.org/api/transport",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "5jHkcf/bO2VsFBm1fdMMQfp3gVY=",
+ "path": "google.golang.org/api/transport/grpc",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "q628X+HuQrsONyEGovbgsNVWyKo=",
+ "path": "google.golang.org/api/transport/http",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "DeoMDYdl1dFTGDPYxn346S8kvz4=",
+ "path": "google.golang.org/api/transport/http/internal/propagation",
+ "revision": "473217c7f590f56568f04c71c91866d794beb596",
+ "revisionTime": "2019-11-04T23:03:48Z"
+ },
+ {
+ "checksumSHA1": "HGXXkbBydog8zRyrzyX2b8OcrUc=",
+ "path": "google.golang.org/appengine",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "uuHlQoXvEZ9E51No2iwxh1jmd9w=",
+ "path": "google.golang.org/appengine/internal",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "GyzSDzUj78G9nyNhmlFGg5IufHc=",
+ "path": "google.golang.org/appengine/internal/app_identity",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "5PakGXEgSbyFptkhGO8MnGf7uH0=",
+ "path": "google.golang.org/appengine/internal/base",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "3DZ+Ah5hFQb1/nh1+li2VE+kkfk=",
+ "path": "google.golang.org/appengine/internal/datastore",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "HJQ4JM9YWfwIe4vmAgXC7J/1T3E=",
+ "path": "google.golang.org/appengine/internal/log",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "rPcVt7Td1StpB6Z9DiShhu753PM=",
+ "path": "google.golang.org/appengine/internal/modules",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "hApgRLSl7w9XG2waJxdH/o0A398=",
+ "path": "google.golang.org/appengine/internal/remote_api",
+ "revision": "16bce7d3dc4e458f2f6f56a1349cbbfcdc8a8fdf",
+ "revisionTime": "2019-10-16T20:46:03Z"
+ },
+ {
+ "checksumSHA1": "dU5fToNngC22+3DsebkdYv+T3jE=",
+ "path": "google.golang.org/genproto/googleapis/rpc/status",
+ "revision": "919d9bdd9fe6f1a5dd95ce5d5e4cdb8fd3c516d0",
+ "revisionTime": "2019-10-28T17:36:16Z"
+ },
+ {
+ "checksumSHA1": "X6j/RZqsMEAqbMTzutcTUE8ae88=",
+ "path": "google.golang.org/grpc",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "8KrSbWYdhP+hwdJd45wv+hn4Aw0=",
+ "path": "google.golang.org/grpc/backoff",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "nflETQgLBqUZkh8zIxoYVXQaq+4=",
+ "path": "google.golang.org/grpc/balancer",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "ZLXafW099RJJQXAtUIExAhjeMFI=",
+ "path": "google.golang.org/grpc/balancer/base",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "cDvwK2ubxN2/O27pRjKMWEcXUqA=",
+ "path": "google.golang.org/grpc/balancer/grpclb",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "0vfNsMgaZFc7sKe8S8pnVCNIfsg=",
+ "path": "google.golang.org/grpc/balancer/grpclb/grpc_lb_v1",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "cE7mFcyGz0F+EnlTZrzLkhprH/4=",
+ "path": "google.golang.org/grpc/balancer/roundrobin",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "YyTUFAVju8wgb1s/3azC2CeSbfY=",
+ "path": "google.golang.org/grpc/binarylog/grpc_binarylog_v1",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "y2MH/S0g7vnJorDX+hRZNu7qc+c=",
+ "path": "google.golang.org/grpc/channelz",
+ "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
+ "revisionTime": "2018-05-29T21:11:52Z"
+ },
+ {
+ "checksumSHA1": "e0xLHThZgMNcuR7aFuY+pzuQVVU=",
+ "path": "google.golang.org/grpc/codes",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "UgxkVy6e/BMqXrmS21WmcHtdcd4=",
+ "path": "google.golang.org/grpc/connectivity",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "5UJiuwNblPiTlsNITE1qNmzPhOw=",
+ "path": "google.golang.org/grpc/credentials",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "DAGMJ469uZMtSAJxCvb4dciT7Lc=",
+ "path": "google.golang.org/grpc/credentials/alts",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "oz4z2akZwVszSKy03amrf6P9P5o=",
+ "path": "google.golang.org/grpc/credentials/alts/internal",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "PTVv5w1hd88sHf2TJbctBasS4ck=",
+ "path": "google.golang.org/grpc/credentials/alts/internal/authinfo",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "/s6U8ulRJiogFjFygs450dOeIoI=",
+ "path": "google.golang.org/grpc/credentials/alts/internal/conn",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "l9QCc3IT7X19lLCdmA9CrdTv/4w=",
+ "path": "google.golang.org/grpc/credentials/alts/internal/handshaker",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "vnI/oN6L9r8gyUIfxrepOyRyt1M=",
+ "path": "google.golang.org/grpc/credentials/alts/internal/handshaker/service",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "0xSsV5vKH+LsNBq48neyAqJQE5s=",
+ "path": "google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "uqTU997XGQ/YxgsFj6Vnwuie4GQ=",
+ "path": "google.golang.org/grpc/credentials/google",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "hj4XY8K4TjmMZwErpAWaSKFrk2c=",
+ "path": "google.golang.org/grpc/credentials/internal",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "sFnZthdQsbhUK8DM374dTO521z0=",
+ "path": "google.golang.org/grpc/credentials/oauth",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "P4QQAmAm6l8rAeOfk6Ljp0qka0k=",
+ "path": "google.golang.org/grpc/encoding",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "LKKkn7EYA+Do9Qwb2/SUKLFNxoo=",
+ "path": "google.golang.org/grpc/encoding/proto",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "Qwx9pMTkn1USjW3ZEbbo/mdl4fU=",
+ "path": "google.golang.org/grpc/grpclb",
+ "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
+ "revisionTime": "2018-05-29T21:11:52Z"
+ },
+ {
+ "checksumSHA1": "n+8rAQxWcf9LPJat2UHq2uVzH20=",
+ "path": "google.golang.org/grpc/grpclb/grpc_lb_v1/messages",
+ "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
+ "revisionTime": "2018-05-29T21:11:52Z"
+ },
+ {
+ "checksumSHA1": "ekrstGhOIsZVKjUih7aWcLEISTQ=",
+ "path": "google.golang.org/grpc/grpclog",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "6Zx3ZzU/okf+1KAsS6kLsgwWNVQ=",
+ "path": "google.golang.org/grpc/internal",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "o9H97P0b9GU7912BOEitXnQT2bw=",
+ "path": "google.golang.org/grpc/internal/backoff",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "k4ITR7VpzDbbf0tRqI6p9xsmPug=",
+ "path": "google.golang.org/grpc/internal/balancerload",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "J8ebTUPPKc0yf+ER3wJBhPHCht4=",
+ "path": "google.golang.org/grpc/internal/binarylog",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "iup/lNMZ3GB5wmda8sp14Rrt2QY=",
+ "path": "google.golang.org/grpc/internal/buffer",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "YtqLJH9Ht2sD5EqAOSqbARDUeXw=",
+ "path": "google.golang.org/grpc/internal/channelz",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "5dFUCEaPjKwza9kwKqgljp8ckU4=",
+ "path": "google.golang.org/grpc/internal/envconfig",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "70gndc/uHwyAl3D45zqp7vyHWlo=",
+ "path": "google.golang.org/grpc/internal/grpcrand",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "psHSfNyU2y9L9zRK+s41e7ScTf4=",
+ "path": "google.golang.org/grpc/internal/grpcsync",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "q+fLA+VV0jadkfNoeTO7WT7359o=",
+ "path": "google.golang.org/grpc/internal/resolver/dns",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "hqNexYeP/V1a66ZWiDeFBptNjwY=",
+ "path": "google.golang.org/grpc/internal/resolver/passthrough",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "wTCshPVAgkVAk+4nvDj5Yj6AFp4=",
+ "path": "google.golang.org/grpc/internal/syscall",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "ryOd/62SbRr4NN65f4mRauOhEVI=",
+ "path": "google.golang.org/grpc/internal/transport",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "cDYDzrrgfj9Y45GDWcXXCrRofp0=",
+ "path": "google.golang.org/grpc/keepalive",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "0OoJw+Wc7+1Ox5nBbwjgqWW8Xpw=",
+ "path": "google.golang.org/grpc/metadata",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "bk9IupgyMXhqsOBR/dp7ZmRjVEE=",
+ "path": "google.golang.org/grpc/naming",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "ltPJN8UyzvWN0H0BvkP2AREujgQ=",
+ "path": "google.golang.org/grpc/peer",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "+uvdsd+Wki49BMFvpwsqnCwPx2w=",
+ "path": "google.golang.org/grpc/resolver",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "hCvY7ChoHLFFhZcx/iX0uEpQJKU=",
+ "path": "google.golang.org/grpc/resolver/dns",
+ "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
+ "revisionTime": "2018-05-29T21:11:52Z"
+ },
+ {
+ "checksumSHA1": "zs9M4xE8Lyg4wvuYvR00XoBxmuw=",
+ "path": "google.golang.org/grpc/resolver/passthrough",
+ "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
+ "revisionTime": "2018-05-29T21:11:52Z"
+ },
+ {
+ "checksumSHA1": "S7duOGyPoeGhK3EOhKNyxa/KHtk=",
+ "path": "google.golang.org/grpc/serviceconfig",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "3ZPGj/HdfLTiK7I3xPdnqELnHdk=",
+ "path": "google.golang.org/grpc/stats",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "pF8iy9/Pmnt2a8sEAtYtOLQtdHE=",
+ "path": "google.golang.org/grpc/status",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "HGXDrPBB90iBU4NJ7C1N8MJRkI0=",
+ "path": "google.golang.org/grpc/tap",
+ "revision": "6dac0204800b039598a8e1561f66861a6492d833",
+ "revisionTime": "2019-11-05T19:11:34Z"
+ },
+ {
+ "checksumSHA1": "W++POptYDWQXnNmDqcw6hg8rgxQ=",
+ "path": "google.golang.org/grpc/transport",
+ "revision": "590da37e2dfb4705d8ebd9574ce4cb75295d9674",
+ "revisionTime": "2018-05-29T21:11:52Z"
+ },
+ {
"checksumSHA1": "CEFTYXtWmgSh+3Ik1NmDaJcz4E0=",
"path": "gopkg.in/check.v1",
"revision": "20d25e2804050c1cd24a7eea1e7a6447dd0e74ec",
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list