From 30afe34caaec2ed243b1ea7a9ba9fbad91b3710f Mon Sep 17 00:00:00 2001
From: Bruno Michel <bmichel@menfin.info>
Date: Wed, 17 Jul 2019 19:08:58 +0200
Subject: [PATCH] Use go modules to build the stack

Until now, the stack was using the old way, with a GOPATH and no version
pinning for the dependencies. Here, we switch to go modules, that tracks
the dependencies in go.mod and go.sum files.
---
 .gitignore                            |   1 +
 .travis.yml                           |  13 +-
 appveyor.yml                          |   2 +-
 cmd/cmd_test.go                       |   2 +-
 cmd/swift.go                          |   2 +-
 docs/CONTRIBUTING.md                  |  15 +-
 docs/INSTALL.md                       |   2 +-
 go.mod                                |  61 +++++
 go.sum                                | 312 ++++++++++++++++++++++++++
 model/app/fetcher_git.go              |   2 +-
 model/app/installer_konnector_test.go |   2 +-
 model/app/installer_test.go           |   2 +-
 model/app/installer_webapp_test.go    |   2 +-
 model/app/webapp.go                   |   2 +-
 model/instance/instance.go            |   2 +-
 model/job/errors.go                   |   2 +-
 model/job/redis_broker.go             |   2 +-
 model/job/redis_broker_test.go        |   2 +-
 model/job/redis_scheduler.go          |   6 +-
 model/job/redis_scheduler_test.go     |   4 +-
 model/job/trigger_cron.go             |   2 +-
 model/permission/blacklist.go         |   2 +-
 model/permission/errors.go            |   2 +-
 model/permission/permissions_test.go  |   2 +-
 model/remote/remote.go                |   2 +-
 model/session/code_storage.go         |   2 +-
 model/session/session.go              |   2 +-
 model/sharing/api_sharing.go          |   2 +-
 model/sharing/replicator_test.go      |   2 +-
 model/sharing/upload_store.go         |   2 +-
 model/vfs/store.go                    |   2 +-
 model/vfs/store_test.go               |   2 +-
 model/vfs/version_test.go             |   2 +-
 model/vfs/vfsafero/fsck.go            |   2 +-
 model/vfs/vfsafero/impl.go            |   2 +-
 model/vfs/vfsafero/thumbs.go          |   2 +-
 model/vfs/vfsswift/fsck_v1.go         |   2 +-
 model/vfs/vfsswift/fsck_v2.go         |   2 +-
 model/vfs/vfsswift/fsck_v3.go         |   2 +-
 model/vfs/vfsswift/impl_v1.go         |   2 +-
 model/vfs/vfsswift/impl_v2.go         |   2 +-
 model/vfs/vfsswift/impl_v3.go         |   2 +-
 model/vfs/vfsswift/swift.go           |   2 +-
 model/vfs/vfsswift/thumbs_v1.go       |   2 +-
 model/vfs/vfsswift/thumbs_v2_v3.go    |   2 +-
 pkg/appfs/copier.go                   |   4 +-
 pkg/appfs/server.go                   |   4 +-
 pkg/assets/dynamic/dynamic.go         |   2 +-
 pkg/assets/dynamic/dynamic_test.go    |   2 +-
 pkg/assets/dynamic/fs.go              |   4 +-
 pkg/cache/cache.go                    |   2 +-
 pkg/config/config/config.go           |   2 +-
 pkg/config/config/swift.go            |   2 +-
 pkg/couchdb/proxy.go                  |   2 +-
 pkg/i18n/i18n.go                      |   2 +-
 pkg/jsonapi/jsonapi.go                |   2 +-
 pkg/jsonapi/jsonapi_test.go           |   2 +-
 pkg/limits/rate_limiting.go           |   2 +-
 pkg/limits/rate_limiting_test.go      |   2 +-
 pkg/lock/simple_redis.go              |   2 +-
 pkg/logger/logger.go                  |   2 +-
 pkg/logger/logger_test.go             |   2 +-
 pkg/metrics/metrics.go                |   2 +-
 pkg/realtime/realtime_test.go         |   2 +-
 pkg/realtime/redis_hub.go             |   2 +-
 pkg/registry/registry.go              |   2 +-
 scripts/lint.sh                       |   7 +-
 tests/testutils/test_utils.go         |   4 +-
 web/accounts/oauth.go                 |   2 +-
 web/accounts/oauth_test.go            |   2 +-
 web/accounts/statestore.go            |   2 +-
 web/apps/apps.go                      |   2 +-
 web/apps/apps_test.go                 |   2 +-
 web/apps/serve.go                     |   2 +-
 web/auth/auth.go                      |   4 +-
 web/auth/auth_test.go                 |   2 +-
 web/auth/oauth.go                     |   2 +-
 web/auth/passphrase.go                |   2 +-
 web/auth/register.go                  |   2 +-
 web/auth/twofactor.go                 |   2 +-
 web/compat/compat.go                  |   2 +-
 web/data/accounts.go                  |   2 +-
 web/data/data.go                      |   2 +-
 web/data/replication.go               |   2 +-
 web/dev.go                            |   2 +-
 web/errors/errors.go                  |   8 +-
 web/files/files.go                    |   2 +-
 web/files/files_test.go               |   5 +-
 web/files/paginated.go                |   2 +-
 web/files/permissions_test.go         |   2 +-
 web/files/referencedby.go             |   2 +-
 web/files/referencedby_test.go        |   2 +-
 web/files/references.go               |   2 +-
 web/instances/client.go               |   2 +-
 web/instances/instances.go            |   2 +-
 web/instances/move.go                 |   2 +-
 web/intents/intents.go                |   2 +-
 web/intents/intents_test.go           |   2 +-
 web/jobs/jobs.go                      |   2 +-
 web/jobs/jobs_test.go                 |   2 +-
 web/middlewares/assets.go             |   2 +-
 web/middlewares/assets_test.go        |   2 +-
 web/middlewares/basic_auth.go         |   2 +-
 web/middlewares/cache.go              |   2 +-
 web/middlewares/cors.go               |   2 +-
 web/middlewares/cors_test.go          |   2 +-
 web/middlewares/instance.go           |   4 +-
 web/middlewares/json_headers.go       |   2 +-
 web/middlewares/middlewares.go        |   2 +-
 web/middlewares/permissions.go        |   2 +-
 web/middlewares/recover.go            |   4 +-
 web/middlewares/secure.go             |   2 +-
 web/middlewares/secure_test.go        |   2 +-
 web/middlewares/session.go            |   2 +-
 web/middlewares/user_agent.go         |   2 +-
 web/middlewares/user_agent_test.go    |   2 +-
 web/move/move.go                      |   2 +-
 web/notifications/notifications.go    |   2 +-
 web/oidc/oidc.go                      |   2 +-
 web/oidc/oidc_test.go                 |   2 +-
 web/oidc/statestore.go                |   2 +-
 web/permissions/permissions.go        |   2 +-
 web/permissions/permissions_test.go   |   2 +-
 web/public/public.go                  |   2 +-
 web/realtime/realtime.go              |   2 +-
 web/registry/registry.go              |   4 +-
 web/remote/remote.go                  |   2 +-
 web/routing.go                        |   4 +-
 web/routing_test.go                   |   2 +-
 web/server.go                         |   4 +-
 web/settings/clients.go               |   2 +-
 web/settings/context.go               |   2 +-
 web/settings/disk_usage.go            |   2 +-
 web/settings/instance.go              |   2 +-
 web/settings/passphrase.go            |   2 +-
 web/settings/settings.go              |   2 +-
 web/settings/settings_test.go         |   2 +-
 web/sharings/readonly.go              |   2 +-
 web/sharings/replicator.go            |   2 +-
 web/sharings/replicator_test.go       |   4 +-
 web/sharings/revoke.go                |   2 +-
 web/sharings/sharings.go              |   2 +-
 web/sharings/sharings_test.go         |   2 +-
 web/statik/handler.go                 |   2 +-
 web/status/status.go                  |   2 +-
 web/status/status_test.go             |   2 +-
 web/version/version.go                |   2 +-
 worker/exec/konnector.go              |   2 +-
 worker/exec/konnector_test.go         |   2 +-
 worker/exec/service.go                |   2 +-
 worker/mails/exec.go                  |   2 +-
 worker/migrations/migrations.go       |   2 +-
 worker/move/archiver.go               |   4 +-
 worker/move/export.go                 |   2 +-
 154 files changed, 556 insertions(+), 188 deletions(-)
 create mode 100644 go.mod
 create mode 100644 go.sum

diff --git a/.gitignore b/.gitignore
index d6a1d7454..49fe468eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 /.cozy
 /assets/locales/*.po
 !/assets/locales/en.po
+/bin
 /cozy-stack*
 /scripts/cozy-stack*
 /debian
diff --git a/.travis.yml b/.travis.yml
index 75b4525dd..7f7cb4c8c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,19 +10,18 @@ language: go
 matrix:
   include:
     - go: "1.12"
-      env: COMMAND=scripts/lint.sh
+      env: GO111MODULE=on COMMAND=scripts/lint.sh
     - go: "1.12"
-      env: COMMAND=scripts/unit-test.sh
-    - go: "1.11"
-      env: COMMAND=scripts/unit-test.sh
+      env: GO111MODULE=on COMMAND=scripts/unit-test.sh
     - go: "1.12"
-      env: COMMAND=scripts/sharing-test.sh
+      env: GO111MODULE=on COMMAND=scripts/sharing-test.sh
     - go: "1.12"
-      env: COMMAND=scripts/clone-test.sh
+      env: GO111MODULE=on COMMAND=scripts/clone-test.sh
 
-before_install:
+install:
   - docker run -d -p 5984:5984 --net=host --name couch apache/couchdb:2.3
   - nvm use 8.12.0
+  - go install
 
 before_script:
   - curl -X PUT http://127.0.0.1:5984/{_users,_replicator,_global_changes}
diff --git a/appveyor.yml b/appveyor.yml
index b59c48ee0..dbab53634 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -7,6 +7,7 @@ clone_folder: c:\gopath\src\github.com\cozy\cozy-stack
 environment:
   GOPATH: c:\gopath
   GOVERSION: 1.12
+  GO111MODULE: "on"
 
 install:
   - rmdir c:\go /s /q
@@ -16,7 +17,6 @@ install:
   - echo %PATH%
   - go version
   - go env
-  - go get -d ./...
 
 build_script:
   - go install
diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go
index 659909fff..fe69957e3 100644
--- a/cmd/cmd_test.go
+++ b/cmd/cmd_test.go
@@ -20,7 +20,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/web"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/cmd/swift.go b/cmd/swift.go
index 31197d66d..9f72b32a8 100644
--- a/cmd/swift.go
+++ b/cmd/swift.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance"
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 	"github.com/spf13/cobra"
 )
 
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index 6b67b6592..7ca40b19b 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -44,12 +44,11 @@ there.
 
 #### Step 1: Fork
 
-Fork the project on GitHub and
-[check out your copy locally](http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html).
+Fork the project on GitHub and check out your copy locally:
 
 ```
-$ go get -u github.com/cozy/cozy-stack
-$ cd $(go env GOPATH)/src/github.com/cozy/cozy-stack
+$ git clone https://github.com/cozy/cozy-stack.git
+$ cd cozy-stack
 $ git remote add fork git://github.com/username/cozy-stack.git
 ```
 
@@ -99,11 +98,11 @@ is important. A commit message should describe what changed and why.
 
 #### Step 6: Rebase
 
-Use `git rebase` (not `git merge`) to sync your work from time to time.
+Use `git pull --rebase`, or `git rebase` (but not `git merge`), to sync your
+work from time to time:
 
 ```
-$ git fetch origin
-$ git rebase origin/master
+$ git pull origin master --rebase
 ```
 
 #### Step 7: Push
@@ -117,8 +116,6 @@ Go to https://github.com/username/cozy-stack and select your branch. Click the
 
 Pull requests are usually reviewed within a few days. If there are comments to
 address, apply your changes in a separate commit and push that to your branch.
-Post a comment in the pull request afterwards; GitHub does not send out
-notifications when you add commits.
 
 ## Code organization
 
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
index 8274a45b1..bc5b33aa8 100644
--- a/docs/INSTALL.md
+++ b/docs/INSTALL.md
@@ -37,7 +37,7 @@ executable bit (`chmod +x cozy-stack`) and put it in your `$PATH`.
 
 #### Using `go`
 
-[Install go](https://golang.org/doc/install), version >= 1.11. With `go`
+[Install go](https://golang.org/doc/install), version >= 1.12. With `go`
 installed and configured, you can run the following command:
 
 ```
diff --git a/go.mod b/go.mod
new file mode 100644
index 000000000..a7161976c
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,61 @@
+module github.com/cozy/cozy-stack
+
+go 1.12
+
+require (
+	github.com/Masterminds/semver v1.4.2
+	github.com/appleboy/go-fcm v0.1.4
+	github.com/cozy/goexif2 v0.0.0-20180125141006-830968571cff
+	github.com/cozy/gomail v0.0.0-20170313100128-1395d9a6a6c0
+	github.com/cozy/httpcache v0.0.0-20180914105234-d3dc4988de66
+	github.com/dhowden/tag v0.0.0-20190519100835-db0c67e351b1
+	github.com/dustin/go-humanize v1.0.0
+	github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5
+	github.com/go-redis/redis v6.15.2+incompatible
+	github.com/gofrs/uuid v3.2.0+incompatible
+	github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721
+	github.com/golang/protobuf v1.3.2 // indirect
+	github.com/google/go-querystring v1.0.0
+	github.com/google/gops v0.3.6
+	github.com/gorilla/websocket v1.4.0
+	github.com/h2non/filetype v1.0.8
+	github.com/hashicorp/go-multierror v1.0.0
+	github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c
+	github.com/justincampbell/bigduration v0.0.0-20160531141349-e45bf03c0666
+	github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
+	github.com/labstack/echo/v4 v4.1.6
+	github.com/leonelquinteros/gotext v1.4.0
+	github.com/magiconair/properties v1.8.1 // indirect
+	github.com/mitchellh/mapstructure v1.1.2
+	github.com/mssola/user_agent v0.5.0
+	github.com/ncw/swift v1.0.47
+	github.com/nightlyone/lockfile v0.0.0-20180618180623-0ad87eef1443
+	github.com/onsi/ginkgo v1.8.0 // indirect
+	github.com/onsi/gomega v1.5.0 // indirect
+	github.com/oschwald/maxminddb-golang v1.3.1
+	github.com/pelletier/go-toml v1.4.0 // indirect
+	github.com/pkg/errors v0.8.1
+	github.com/pquerna/otp v1.2.0
+	github.com/prometheus/client_golang v1.0.0
+	github.com/prometheus/common v0.6.0 // indirect
+	github.com/prometheus/procfs v0.0.3 // indirect
+	github.com/robfig/cron/v3 v3.0.0
+	github.com/sideshow/apns2 v0.16.0
+	github.com/sirupsen/logrus v1.4.2
+	github.com/spf13/afero v1.2.2
+	github.com/spf13/cobra v0.0.5
+	github.com/spf13/jwalterweatherman v1.1.0 // indirect
+	github.com/spf13/viper v1.4.0
+	github.com/stretchr/testify v1.3.0
+	golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
+	golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9
+	golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect
+	golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
+	golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 // indirect
+	golang.org/x/tools v0.0.0-20190716221150-e98af2309876
+	google.golang.org/appengine v1.6.1 // indirect
+	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
+	gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
+)
+
+replace github.com/spf13/afero => github.com/cozy/afero v1.2.3
diff --git a/go.sum b/go.sum
new file mode 100644
index 000000000..9f43d8839
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,312 @@
+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=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc=
+github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/appleboy/go-fcm v0.1.4 h1:p7nwHI75akAi0Yahrkc7zfOgET4v6ylhqfPfGZliXjw=
+github.com/appleboy/go-fcm v0.1.4/go.mod h1:1XhaeJtn9X5nOVPTQkljQfG034bGhm5SUXluohDJ8OI=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cozy/afero v1.2.3 h1:o7VaYUHrGDr7AgoIUCxC0xLdRcyS2OK5/btm2GrgjGI=
+github.com/cozy/afero v1.2.3/go.mod h1:1et9YdBqQDeXGpaxOLtmXZoCUB6eaS2L+x7Irs3UktA=
+github.com/cozy/goexif2 v0.0.0-20180125141006-830968571cff h1:l8yiBqr1qT1zOB6LPPOcyvuBxuyo143vlcOU1AJHNcg=
+github.com/cozy/goexif2 v0.0.0-20180125141006-830968571cff/go.mod h1:PWaQhEQb7UWuVUvXxpFBscfsXmUASdlmMgq97QGcTwU=
+github.com/cozy/gomail v0.0.0-20170313100128-1395d9a6a6c0 h1:bQVNaGvnUI7m8J8k3hklFVXRT1F+WJcIV6hYHIgjKHE=
+github.com/cozy/gomail v0.0.0-20170313100128-1395d9a6a6c0/go.mod h1:DlX8Rq7OKA0F9I1e0tz6+PCOXkKZ/l6aD+bWxCC6Qfo=
+github.com/cozy/httpcache v0.0.0-20180914105234-d3dc4988de66 h1:b7VTmlsWlhYzJqGLjfhvIiVOpRpNCsOIoV4h0krSkyE=
+github.com/cozy/httpcache v0.0.0-20180914105234-d3dc4988de66/go.mod h1:rLnjIcybyvs+PoCzi4+GmpOVp0+q+qdcuZKnKUKJoF4=
+github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+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.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dhowden/tag v0.0.0-20190519100835-db0c67e351b1 h1:HR8W6GvuS20j4kNxa/XQeyVA0vHLKVMCAVJj0RGWauY=
+github.com/dhowden/tag v0.0.0-20190519100835-db0c67e351b1/go.mod h1:SniNVYuaD1jmdEEvi+7ywb1QFR7agjeTdGKyFb0p7Rw=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5 h1:n9qx98xiS5V4x2WIpPC2rr9mUM5ri9r/YhCEKbhCHro=
+github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5/go.mod h1:WIi9g8OKJQHXtQbx7GExlo6UAFaui9WDMYabJ+Be4WI=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-kit/kit v0.8.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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
+github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
+github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
+github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 h1:KRMr9A3qfbVM7iV/WcLY/rL5LICqwMHLhwRXKu99fXw=
+github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/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/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 v1.0.0/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/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
+github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
+github.com/google/gops v0.3.6 h1:6akvbMlpZrEYOuoebn2kR+ZJekbZqJ28fJXTs84+8to=
+github.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI=
+github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/h2non/filetype v1.0.8 h1:le8gpf+FQA0/DlDABbtisA1KiTS0Xi+YSC/E8yY3Y14=
+github.com/h2non/filetype v1.0.8/go.mod h1:isekKqOuhMj+s/7r3rIeTErIRy4Rub5uBWHfvMusLMU=
+github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c h1:kQWxfPIHVLbgLzphqk3QUflDy9QdksZR4ygR807bpy0=
+github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/justincampbell/bigduration v0.0.0-20160531141349-e45bf03c0666 h1:abLciEiilfMf19Q1TFWDrp9j5z5one60dnnpvc6eabg=
+github.com/justincampbell/bigduration v0.0.0-20160531141349-e45bf03c0666/go.mod h1:xqGOmDZzLOG7+q/CgsbXv10g4tgPsbjhmAxyaTJMvis=
+github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro=
+github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
+github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/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/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/labstack/echo/v4 v4.1.6 h1:WOvLa4T1KzWCRpANwz0HGgWDelXSSGwIKtKBbFdHTv4=
+github.com/labstack/echo/v4 v4.1.6/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE=
+github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU=
+github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4=
+github.com/leonelquinteros/gotext v1.4.0 h1:2NHPCto5IoMXbrT0bldPrxj0qM5asOCwtb1aUQZ1tys=
+github.com/leonelquinteros/gotext v1.4.0/go.mod h1:yZGXREmoGTtBvZHNcc+Yfug49G/2spuF/i/Qlsvz1Us=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+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 v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mssola/user_agent v0.5.0 h1:gRF7/x8cKt8qzAosYGsBNyirta+F8fvYDlJrgXws9AQ=
+github.com/mssola/user_agent v0.5.0/go.mod h1:UFiKPVaShrJGW93n4uo8dpPdg1BSVpw2P9bneo0Mtp8=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ=
+github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
+github.com/nightlyone/lockfile v0.0.0-20180618180623-0ad87eef1443 h1:+2OJrU8cmOstEoh0uQvYemRGVH1O6xtO2oANUWHFnP0=
+github.com/nightlyone/lockfile v0.0.0-20180618180623-0ad87eef1443/go.mod h1:JbxfV1Iifij2yhRjXai0oFrbpxszXHRx1E5RuM26o4Y=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
+github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
+github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/oschwald/maxminddb-golang v1.3.1 h1:kPc5+ieL5CC/Zn0IaXJPxDFlUxKTQEU8QBTtmfQDAIo=
+github.com/oschwald/maxminddb-golang v1.3.1/go.mod h1:3jhIUymTJ5VREKyIhWm66LJiQt04F0UCDdodShpjWsY=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg=
+github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
+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/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=
+github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
+github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
+github.com/sideshow/apns2 v0.16.0 h1:OLwkgkse4ZEak+kCIG+B+T4h1e7zLUFxuFFHtyCyTEM=
+github.com/sideshow/apns2 v0.16.0/go.mod h1:f7dArLPLbiZ3qPdzzrZXdCSlMp8FD0p6z7tHssDOLvk=
+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/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+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/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
+github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8=
+github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9 h1:uc17S921SPw5F2gJo7slQ3aqvr2RwpL7eb3+DZncu3s=
+golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/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-20180906233101-161cd47e91fd/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-20181220203305-927f97764cc3/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-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190607181551-461777fb6f67/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/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-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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190609082536-301114b31cce/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI=
+golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/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-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190608022120-eacb66d2a7c3/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190716221150-e98af2309876 h1:XskQVJACjxHVCFlm4GsSEh6ZLclQPLobzuvB4DQYHtw=
+golang.org/x/tools v0.0.0-20190716221150-e98af2309876/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
+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.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
+gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/dgrijalva/jwt-go.v3 v3.2.0 h1:N46iQqOtHry7Hxzb9PGrP68oovQmj7EhudNoKHvbOvI=
+gopkg.in/dgrijalva/jwt-go.v3 v3.2.0/go.mod h1:hdNXC2Z9yC029rvsQ/on2ZNQ44Z2XToVhpXXbR+J05A=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+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=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+rsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=
diff --git a/model/app/fetcher_git.go b/model/app/fetcher_git.go
index db20a155f..e68030604 100644
--- a/model/app/fetcher_git.go
+++ b/model/app/fetcher_git.go
@@ -17,9 +17,9 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/appfs"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 )
 
 var cloneTimeout = 30 * time.Second
diff --git a/model/app/installer_konnector_test.go b/model/app/installer_konnector_test.go
index b150bff94..906880bb9 100644
--- a/model/app/installer_konnector_test.go
+++ b/model/app/installer_konnector_test.go
@@ -7,11 +7,11 @@ import (
 	"path"
 	"testing"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/consts"
+	"github.com/spf13/afero"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/app/installer_test.go b/model/app/installer_test.go
index 607619121..6ba9963f0 100644
--- a/model/app/installer_test.go
+++ b/model/app/installer_test.go
@@ -12,7 +12,6 @@ import (
 	"testing"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/stack"
 	"github.com/cozy/cozy-stack/pkg/appfs"
@@ -20,6 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
+	"github.com/spf13/afero"
 )
 
 var localGitCmd *exec.Cmd
diff --git a/model/app/installer_webapp_test.go b/model/app/installer_webapp_test.go
index aa7e3418c..6826b7356 100644
--- a/model/app/installer_webapp_test.go
+++ b/model/app/installer_webapp_test.go
@@ -5,13 +5,13 @@ import (
 	"path"
 	"testing"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/model/permission"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
+	"github.com/spf13/afero"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/app/webapp.go b/model/app/webapp.go
index 1e99dc9b0..ceba9c3af 100644
--- a/model/app/webapp.go
+++ b/model/app/webapp.go
@@ -10,7 +10,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/model/notification"
 	"github.com/cozy/cozy-stack/model/permission"
@@ -19,6 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/metadata"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
+	"github.com/spf13/afero"
 )
 
 // Route is a struct to serve a folder inside an app
diff --git a/model/instance/instance.go b/model/instance/instance.go
index 964c06fa7..36dad59ed 100644
--- a/model/instance/instance.go
+++ b/model/instance/instance.go
@@ -22,8 +22,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
 
-	"github.com/cozy/afero"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
 
diff --git a/model/job/errors.go b/model/job/errors.go
index 9a1b1d3b9..67817da96 100644
--- a/model/job/errors.go
+++ b/model/job/errors.go
@@ -4,7 +4,7 @@ import (
 	"errors"
 	"net/http"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 var (
diff --git a/model/job/redis_broker.go b/model/job/redis_broker.go
index c84242be3..dfd4adb18 100644
--- a/model/job/redis_broker.go
+++ b/model/job/redis_broker.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	multierror "github.com/hashicorp/go-multierror"
 	"github.com/sirupsen/logrus"
 )
diff --git a/model/job/redis_broker_test.go b/model/job/redis_broker_test.go
index 7d89171e7..c9aa59f66 100644
--- a/model/job/redis_broker_test.go
+++ b/model/job/redis_broker_test.go
@@ -11,7 +11,7 @@ import (
 
 	jobs "github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/pkg/limits"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/job/redis_scheduler.go b/model/job/redis_scheduler.go
index 09172ac33..00b0d51da 100644
--- a/model/job/redis_scheduler.go
+++ b/model/job/redis_scheduler.go
@@ -15,7 +15,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/realtime"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 )
 
@@ -165,7 +165,7 @@ func (s *redisScheduler) eventLoop(eventsCh <-chan *realtime.Event) {
 				var d time.Duration
 				if d, err = time.ParseDuration(et.Infos().Debounce); err == nil {
 					timestamp := time.Now().Add(d)
-					s.client.ZAddNX(TriggersKey, &redis.Z{
+					s.client.ZAddNX(TriggersKey, redis.Z{
 						Score:  float64(timestamp.UTC().Unix()),
 						Member: redisKey(t),
 					})
@@ -311,7 +311,7 @@ func (s *redisScheduler) addToRedis(t Trigger, prev time.Time) error {
 		return errors.New("Not implemented yet")
 	}
 	pipe := s.client.Pipeline()
-	err := pipe.ZAdd(TriggersKey, &redis.Z{
+	err := pipe.ZAdd(TriggersKey, redis.Z{
 		Score:  float64(timestamp.UTC().Unix()),
 		Member: redisKey(t),
 	}).Err()
diff --git a/model/job/redis_scheduler_test.go b/model/job/redis_scheduler_test.go
index f9b5533a7..be2ac29e9 100644
--- a/model/job/redis_scheduler_test.go
+++ b/model/job/redis_scheduler_test.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/tests/testutils"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
@@ -257,7 +257,7 @@ func TestRedisPollFromSchedKey(t *testing.T) {
 
 	ts := now.UTC().Unix()
 	key := testInstance.DBPrefix() + "/" + tat.ID()
-	err = client.ZAdd(jobs.SchedKey, &redis.Z{
+	err = client.ZAdd(jobs.SchedKey, redis.Z{
 		Score:  float64(ts + 1),
 		Member: key,
 	}).Err()
diff --git a/model/job/trigger_cron.go b/model/job/trigger_cron.go
index ab281b818..2c26ad22a 100644
--- a/model/job/trigger_cron.go
+++ b/model/job/trigger_cron.go
@@ -4,7 +4,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/cron"
+	"github.com/robfig/cron/v3"
 )
 
 // CronTrigger implements the @cron trigger type. It schedules recurring jobs with
diff --git a/model/permission/blacklist.go b/model/permission/blacklist.go
index e68c0724a..651a854c6 100644
--- a/model/permission/blacklist.go
+++ b/model/permission/blacklist.go
@@ -5,7 +5,7 @@ import (
 	"net/http"
 
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 var readable = true
diff --git a/model/permission/errors.go b/model/permission/errors.go
index d2c2c3d8b..146f25454 100644
--- a/model/permission/errors.go
+++ b/model/permission/errors.go
@@ -3,7 +3,7 @@ package permission
 import (
 	"net/http"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 var (
diff --git a/model/permission/permissions_test.go b/model/permission/permissions_test.go
index e96ca1740..ba021a7eb 100644
--- a/model/permission/permissions_test.go
+++ b/model/permission/permissions_test.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 	"testing"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/remote/remote.go b/model/remote/remote.go
index 8e7065034..e86bb8b4a 100644
--- a/model/remote/remote.go
+++ b/model/remote/remote.go
@@ -22,8 +22,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/echo"
 	"github.com/cozy/httpcache"
+	"github.com/labstack/echo/v4"
 )
 
 var (
diff --git a/model/session/code_storage.go b/model/session/code_storage.go
index 6cc3e0315..66b43d155 100644
--- a/model/session/code_storage.go
+++ b/model/session/code_storage.go
@@ -6,7 +6,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 type codeStorage interface {
diff --git a/model/session/session.go b/model/session/session.go
index 79436ac8c..a2557f8a5 100644
--- a/model/session/session.go
+++ b/model/session/session.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // SessionCookieName is name of the cookie created by cozy
diff --git a/model/sharing/api_sharing.go b/model/sharing/api_sharing.go
index 088186300..321506ab2 100644
--- a/model/sharing/api_sharing.go
+++ b/model/sharing/api_sharing.go
@@ -6,7 +6,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // InfoByDocTypeData returns the sharings info as data array in the JSON-API format
diff --git a/model/sharing/replicator_test.go b/model/sharing/replicator_test.go
index 7c673141f..bbf884c4c 100644
--- a/model/sharing/replicator_test.go
+++ b/model/sharing/replicator_test.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/tests/testutils"
-	uuid "github.com/satori/go.uuid"
+	"github.com/gofrs/uuid"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/sharing/upload_store.go b/model/sharing/upload_store.go
index e37e0759d..68f14c858 100644
--- a/model/sharing/upload_store.go
+++ b/model/sharing/upload_store.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 // A UploadStore is essentially an object to store files metadata by key
diff --git a/model/vfs/store.go b/model/vfs/store.go
index 00c582fc9..597a38056 100644
--- a/model/vfs/store.go
+++ b/model/vfs/store.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 // Store is essentially a place to store transient objects between two HTTP
diff --git a/model/vfs/store_test.go b/model/vfs/store_test.go
index c06b0282d..6b3a2e1a0 100644
--- a/model/vfs/store_test.go
+++ b/model/vfs/store_test.go
@@ -5,7 +5,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/vfs/version_test.go b/model/vfs/version_test.go
index 24998da37..65e776302 100644
--- a/model/vfs/version_test.go
+++ b/model/vfs/version_test.go
@@ -5,7 +5,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/utils"
-	uuid "github.com/satori/go.uuid"
+	"github.com/gofrs/uuid"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/vfs/vfsafero/fsck.go b/model/vfs/vfsafero/fsck.go
index 7be411241..1ca632115 100644
--- a/model/vfs/vfsafero/fsck.go
+++ b/model/vfs/vfsafero/fsck.go
@@ -9,10 +9,10 @@ import (
 	"path/filepath"
 	"strings"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
+	"github.com/spf13/afero"
 )
 
 func (afs *aferoVFS) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsafero/impl.go b/model/vfs/vfsafero/impl.go
index 2a96e123f..a89d13d40 100644
--- a/model/vfs/vfsafero/impl.go
+++ b/model/vfs/vfsafero/impl.go
@@ -19,7 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 
-	"github.com/cozy/afero"
+	"github.com/spf13/afero"
 )
 
 var memfsMap sync.Map
diff --git a/model/vfs/vfsafero/thumbs.go b/model/vfs/vfsafero/thumbs.go
index ec55c8158..484841d13 100644
--- a/model/vfs/vfsafero/thumbs.go
+++ b/model/vfs/vfsafero/thumbs.go
@@ -6,9 +6,9 @@ import (
 	"os"
 	"path"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/vfs"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/spf13/afero"
 )
 
 // NewThumbsFs creates a new thumb filesystem base on a afero.Fs.
diff --git a/model/vfs/vfsswift/fsck_v1.go b/model/vfs/vfsswift/fsck_v1.go
index d1f355045..8500f95a7 100644
--- a/model/vfs/vfsswift/fsck_v1.go
+++ b/model/vfs/vfsswift/fsck_v1.go
@@ -8,7 +8,7 @@ import (
 
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 func (sfs *swiftVFS) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsswift/fsck_v2.go b/model/vfs/vfsswift/fsck_v2.go
index 9f8b4f99f..c576b5a07 100644
--- a/model/vfs/vfsswift/fsck_v2.go
+++ b/model/vfs/vfsswift/fsck_v2.go
@@ -7,7 +7,7 @@ import (
 
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 func (sfs *swiftVFSV2) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsswift/fsck_v3.go b/model/vfs/vfsswift/fsck_v3.go
index 6f11154b7..25cc21404 100644
--- a/model/vfs/vfsswift/fsck_v3.go
+++ b/model/vfs/vfsswift/fsck_v3.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 func (sfs *swiftVFSV3) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsswift/impl_v1.go b/model/vfs/vfsswift/impl_v1.go
index b3baffaca..19f6bf7ac 100644
--- a/model/vfs/vfsswift/impl_v1.go
+++ b/model/vfs/vfsswift/impl_v1.go
@@ -14,8 +14,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/model/vfs/vfsswift/impl_v2.go b/model/vfs/vfsswift/impl_v2.go
index 49c424099..fa239b95a 100644
--- a/model/vfs/vfsswift/impl_v2.go
+++ b/model/vfs/vfsswift/impl_v2.go
@@ -16,8 +16,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/model/vfs/vfsswift/impl_v3.go b/model/vfs/vfsswift/impl_v3.go
index 737e15106..d7b8821e7 100644
--- a/model/vfs/vfsswift/impl_v3.go
+++ b/model/vfs/vfsswift/impl_v3.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/model/vfs/vfsswift/swift.go b/model/vfs/vfsswift/swift.go
index 1f29a7611..bf7a772b1 100644
--- a/model/vfs/vfsswift/swift.go
+++ b/model/vfs/vfsswift/swift.go
@@ -1,8 +1,8 @@
 package vfsswift
 
 import (
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 )
 
 // maxNbFilesToDelete is the maximal number of files that we will try to delete
diff --git a/model/vfs/vfsswift/thumbs_v1.go b/model/vfs/vfsswift/thumbs_v1.go
index 677203816..e4c6d2a1b 100644
--- a/model/vfs/vfsswift/thumbs_v1.go
+++ b/model/vfs/vfsswift/thumbs_v1.go
@@ -7,7 +7,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/model/vfs"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 // NewThumbsFs creates a new thumb filesystem base on swift.
diff --git a/model/vfs/vfsswift/thumbs_v2_v3.go b/model/vfs/vfsswift/thumbs_v2_v3.go
index 98f98edbb..bbce14480 100644
--- a/model/vfs/vfsswift/thumbs_v2_v3.go
+++ b/model/vfs/vfsswift/thumbs_v2_v3.go
@@ -10,7 +10,7 @@ import (
 
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 var unixEpochZero = time.Time{}
diff --git a/pkg/appfs/copier.go b/pkg/appfs/copier.go
index b68105f1b..87c0f07e4 100644
--- a/pkg/appfs/copier.go
+++ b/pkg/appfs/copier.go
@@ -9,12 +9,12 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/filetype"
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 // Copier is an interface defining a common set of functions for the installer
diff --git a/pkg/appfs/server.go b/pkg/appfs/server.go
index d63a3d5a5..ea26aa4d2 100644
--- a/pkg/appfs/server.go
+++ b/pkg/appfs/server.go
@@ -15,10 +15,10 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	web_utils "github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 // FileServer interface defines a way to access and serve the application's
diff --git a/pkg/assets/dynamic/dynamic.go b/pkg/assets/dynamic/dynamic.go
index 376ed94c4..9ff420c75 100644
--- a/pkg/assets/dynamic/dynamic.go
+++ b/pkg/assets/dynamic/dynamic.go
@@ -16,8 +16,8 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/assets/model"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/swift"
 	"github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 )
 
 var ErrDynAssetNotFound = errors.New("Dynamic asset was not found")
diff --git a/pkg/assets/dynamic/dynamic_test.go b/pkg/assets/dynamic/dynamic_test.go
index 5e6ecca3a..3fe3e8304 100644
--- a/pkg/assets/dynamic/dynamic_test.go
+++ b/pkg/assets/dynamic/dynamic_test.go
@@ -13,7 +13,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/assets/model"
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/swift/swifttest"
+	"github.com/ncw/swift/swifttest"
 
 	"github.com/spf13/viper"
 	"github.com/stretchr/testify/assert"
diff --git a/pkg/assets/dynamic/fs.go b/pkg/assets/dynamic/fs.go
index 5c65221ba..7ad57c793 100644
--- a/pkg/assets/dynamic/fs.go
+++ b/pkg/assets/dynamic/fs.go
@@ -10,10 +10,10 @@ import (
 	"path/filepath"
 	"strings"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/assets/model"
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 var assetFS AssetFS
diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go
index a75b49aa7..9f90773d4 100644
--- a/pkg/cache/cache.go
+++ b/pkg/cache/cache.go
@@ -7,7 +7,7 @@ import (
 	"sync"
 	"time"
 
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 type cacheEntry struct {
diff --git a/pkg/config/config/config.go b/pkg/config/config/config.go
index 05c2168e1..a42c26548 100644
--- a/pkg/config/config/config.go
+++ b/pkg/config/config/config.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/tlsclient"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/gomail"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/spf13/viper"
 )
 
diff --git a/pkg/config/config/swift.go b/pkg/config/config/swift.go
index e235d5677..ba2297f35 100644
--- a/pkg/config/config/swift.go
+++ b/pkg/config/config/swift.go
@@ -5,7 +5,7 @@ import (
 	"net/url"
 	"time"
 
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 var swiftConn *swift.Connection
diff --git a/pkg/couchdb/proxy.go b/pkg/couchdb/proxy.go
index e55d89755..8d5164a67 100644
--- a/pkg/couchdb/proxy.go
+++ b/pkg/couchdb/proxy.go
@@ -11,7 +11,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/realtime"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Proxy generate a httputil.ReverseProxy which forwards the request to the
diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go
index 715f2486f..4e6bf32cb 100644
--- a/pkg/i18n/i18n.go
+++ b/pkg/i18n/i18n.go
@@ -6,7 +6,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	gotext "gopkg.in/leonelquinteros/gotext.v1"
+	"github.com/leonelquinteros/gotext"
 )
 
 var translations = make(map[string]*gotext.Po)
diff --git a/pkg/jsonapi/jsonapi.go b/pkg/jsonapi/jsonapi.go
index bf2e1b617..9f73e96eb 100644
--- a/pkg/jsonapi/jsonapi.go
+++ b/pkg/jsonapi/jsonapi.go
@@ -10,7 +10,7 @@ import (
 	"strconv"
 
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // ContentType is the official mime-type for JSON-API
diff --git a/pkg/jsonapi/jsonapi_test.go b/pkg/jsonapi/jsonapi_test.go
index 9fd50498c..d41d10231 100644
--- a/pkg/jsonapi/jsonapi_test.go
+++ b/pkg/jsonapi/jsonapi_test.go
@@ -10,7 +10,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/limits/rate_limiting.go b/pkg/limits/rate_limiting.go
index 1205de6da..1d3d6327f 100644
--- a/pkg/limits/rate_limiting.go
+++ b/pkg/limits/rate_limiting.go
@@ -7,7 +7,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 // CounterType os an enum for the type of counters used by rate-limiting.
diff --git a/pkg/limits/rate_limiting_test.go b/pkg/limits/rate_limiting_test.go
index d817fbd70..c67886811 100644
--- a/pkg/limits/rate_limiting_test.go
+++ b/pkg/limits/rate_limiting_test.go
@@ -4,7 +4,7 @@ import (
 	"testing"
 
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/lock/simple_redis.go b/pkg/lock/simple_redis.go
index 35dd179a0..bb039c07b 100644
--- a/pkg/lock/simple_redis.go
+++ b/pkg/lock/simple_redis.go
@@ -9,7 +9,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go
index cc92a7000..99430eaef 100644
--- a/pkg/logger/logger.go
+++ b/pkg/logger/logger.go
@@ -4,7 +4,7 @@ import (
 	"io/ioutil"
 	"sync"
 
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/pkg/logger/logger_test.go b/pkg/logger/logger_test.go
index be98e99da..b7b6b2822 100644
--- a/pkg/logger/logger_test.go
+++ b/pkg/logger/logger_test.go
@@ -4,7 +4,7 @@ import (
 	"testing"
 	"time"
 
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go
index 19e096efd..db51f6bcb 100644
--- a/pkg/metrics/metrics.go
+++ b/pkg/metrics/metrics.go
@@ -1,7 +1,7 @@
 package metrics
 
 import (
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/prometheus/client_golang/prometheus/promhttp"
 )
diff --git a/pkg/realtime/realtime_test.go b/pkg/realtime/realtime_test.go
index 5cac53979..7697f180e 100644
--- a/pkg/realtime/realtime_test.go
+++ b/pkg/realtime/realtime_test.go
@@ -6,7 +6,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/realtime/redis_hub.go b/pkg/realtime/redis_hub.go
index 8ff9f7a41..f41d44915 100644
--- a/pkg/realtime/redis_hub.go
+++ b/pkg/realtime/redis_hub.go
@@ -6,7 +6,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	redis "github.com/cozy/redis"
+	redis "github.com/go-redis/redis"
 )
 
 const eventsRedisKey = "realtime:events"
diff --git a/pkg/registry/registry.go b/pkg/registry/registry.go
index 1692eaf83..1adf6593e 100644
--- a/pkg/registry/registry.go
+++ b/pkg/registry/registry.go
@@ -13,8 +13,8 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/echo"
 	"github.com/cozy/httpcache"
+	"github.com/labstack/echo/v4"
 )
 
 const defaultLimit = 100
diff --git a/scripts/lint.sh b/scripts/lint.sh
index e76375aad..0af845023 100755
--- a/scripts/lint.sh
+++ b/scripts/lint.sh
@@ -4,17 +4,14 @@ set -ev
 if git grep -l \
   -e 'github.com/labstack/gommon/log' \
   -e 'github.com/dgrijalva/jwt-go' \
-  -e 'github.com/labstack/echo' \
-  -e 'github.com/spf13/afero' \
   -e 'github.com/cozy/statik' \
-  -e 'github.com/go-redis/redis' \
   -- '*.go'; then
   echo "Forbidden packages"
   exit 1
 fi
 
-go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
-golangci-lint run -E gofmt -E unconvert -E misspell
+curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s v1.17.1
+bin/golangci-lint run -E gofmt -E unconvert -E misspell
 
 npm install eslint@5.16.0 prettier eslint-plugin-prettier eslint-config-cozy-app
 ./node_modules/.bin/eslint "assets/scripts/**"
diff --git a/tests/testutils/test_utils.go b/tests/testutils/test_utils.go
index 3f776437f..95bdafd29 100644
--- a/tests/testutils/test_utils.go
+++ b/tests/testutils/test_utils.go
@@ -21,8 +21,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/echo"
-	"github.com/cozy/swift/swifttest"
+	"github.com/labstack/echo/v4"
+	"github.com/ncw/swift/swifttest"
 	"github.com/spf13/viper"
 )
 
diff --git a/web/accounts/oauth.go b/web/accounts/oauth.go
index 5b4a3f944..494eaba5a 100644
--- a/web/accounts/oauth.go
+++ b/web/accounts/oauth.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiAccount struct {
diff --git a/web/accounts/oauth_test.go b/web/accounts/oauth_test.go
index 2b8c2fcb7..9ba59e1ae 100644
--- a/web/accounts/oauth_test.go
+++ b/web/accounts/oauth_test.go
@@ -18,7 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/tests/testutils"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/accounts/statestore.go b/web/accounts/statestore.go
index 41ca01091..c7f1fd4ac 100644
--- a/web/accounts/statestore.go
+++ b/web/accounts/statestore.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 const stateTTL = 15 * time.Minute
diff --git a/web/apps/apps.go b/web/apps/apps.go
index 6407e2e3f..59510ff5b 100644
--- a/web/apps/apps.go
+++ b/web/apps/apps.go
@@ -20,7 +20,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // JSMimeType is the content-type for javascript
diff --git a/web/apps/apps_test.go b/web/apps/apps_test.go
index 6e9a2404c..34ac5ece2 100644
--- a/web/apps/apps_test.go
+++ b/web/apps/apps_test.go
@@ -36,7 +36,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web"
 	webApps "github.com/cozy/cozy-stack/web/apps"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/stretchr/testify/assert"
 )
diff --git a/web/apps/serve.go b/web/apps/serve.go
index d1503e8de..af214ce2f 100644
--- a/web/apps/serve.go
+++ b/web/apps/serve.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Serve is an handler for serving files from the VFS for a client-side app
diff --git a/web/auth/auth.go b/web/auth/auth.go
index aa260b717..e6468b426 100644
--- a/web/auth/auth.go
+++ b/web/auth/auth.go
@@ -16,8 +16,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 const (
diff --git a/web/auth/auth_test.go b/web/auth/auth_test.go
index e35cf59ea..edb279df1 100644
--- a/web/auth/auth_test.go
+++ b/web/auth/auth_test.go
@@ -36,7 +36,7 @@ import (
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
diff --git a/web/auth/oauth.go b/web/auth/oauth.go
index f1f6d5175..e6519ee78 100644
--- a/web/auth/oauth.go
+++ b/web/auth/oauth.go
@@ -21,7 +21,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/registry"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type webappParams struct {
diff --git a/web/auth/passphrase.go b/web/auth/passphrase.go
index 94c728a6b..7f4e43d1e 100644
--- a/web/auth/passphrase.go
+++ b/web/auth/passphrase.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func passphraseResetForm(c echo.Context) error {
diff --git a/web/auth/register.go b/web/auth/register.go
index 6de1b0efc..dbde19c2a 100644
--- a/web/auth/register.go
+++ b/web/auth/register.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func registerClient(c echo.Context) error {
diff --git a/web/auth/twofactor.go b/web/auth/twofactor.go
index a9c590473..c14e9e6c0 100644
--- a/web/auth/twofactor.go
+++ b/web/auth/twofactor.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/model/oauth"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/compat/compat.go b/web/compat/compat.go
index ad1badd1c..db7fda986 100644
--- a/web/compat/compat.go
+++ b/web/compat/compat.go
@@ -4,7 +4,7 @@ import (
 	"net/http"
 
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Compat display a page with web browsers compatibility informations
diff --git a/web/data/accounts.go b/web/data/accounts.go
index 851f68878..24e80441b 100644
--- a/web/data/accounts.go
+++ b/web/data/accounts.go
@@ -12,7 +12,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // TODO: make specific routes for managing accounts. The overriding of the
diff --git a/web/data/data.go b/web/data/data.go
index d32225381..6eac4aa29 100644
--- a/web/data/data.go
+++ b/web/data/data.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/files"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func paramIsTrue(c echo.Context, param string) bool {
diff --git a/web/data/replication.go b/web/data/replication.go
index dd1193fab..a1e7ce948 100644
--- a/web/data/replication.go
+++ b/web/data/replication.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func proxy(c echo.Context, path string) error {
diff --git a/web/dev.go b/web/dev.go
index 6efc87355..3169b1a5b 100644
--- a/web/dev.go
+++ b/web/dev.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
 	"github.com/cozy/cozy-stack/worker/mails"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // devMailHandler allow to easily render a mail from a route of the stack. The
diff --git a/web/errors/errors.go b/web/errors/errors.go
index 14c26eaad..b38bd949b 100644
--- a/web/errors/errors.go
+++ b/web/errors/errors.go
@@ -15,7 +15,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/web/middlewares"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/sirupsen/logrus"
 )
 
@@ -95,12 +95,12 @@ func HTMLErrorHandler(err error, c echo.Context) {
 	var he *echo.HTTPError
 	if he, ok = err.(*echo.HTTPError); ok {
 		status = he.Code
-		if he.Inner != nil {
-			err = he.Inner
+		if he.Internal != nil {
+			err = he.Internal
 		}
 	} else {
 		he = echo.NewHTTPError(status, err)
-		he.Inner = err
+		he.Internal = err
 	}
 
 	var title, value string
diff --git a/web/files/files.go b/web/files/files.go
index 4032fb593..dbce1a143 100644
--- a/web/files/files.go
+++ b/web/files/files.go
@@ -32,7 +32,7 @@ import (
 	web_utils "github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/worker/thumbnail"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type docPatch struct {
diff --git a/web/files/files_test.go b/web/files/files_test.go
index bf52d65fe..807a9bdc0 100644
--- a/web/files/files_test.go
+++ b/web/files/files_test.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 
 	_ "github.com/cozy/cozy-stack/worker/thumbnail"
@@ -1204,7 +1204,8 @@ func TestArchiveNoFiles(t *testing.T) {
 	assert.Equal(t, 400, res.StatusCode)
 	msg, err := ioutil.ReadAll(res.Body)
 	assert.NoError(t, err)
-	assert.Equal(t, `"Can't create an archive with no files"`, string(msg))
+	actual := strings.TrimSpace(string(msg))
+	assert.Equal(t, `"Can't create an archive with no files"`, actual)
 }
 
 func TestArchiveDirectDownload(t *testing.T) {
diff --git a/web/files/paginated.go b/web/files/paginated.go
index 8c50310d4..64038f224 100644
--- a/web/files/paginated.go
+++ b/web/files/paginated.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/files/permissions_test.go b/web/files/permissions_test.go
index 35a5dccca..e47169df0 100644
--- a/web/files/permissions_test.go
+++ b/web/files/permissions_test.go
@@ -8,7 +8,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/files/referencedby.go b/web/files/referencedby.go
index f25128f24..1ee6b06a1 100644
--- a/web/files/referencedby.go
+++ b/web/files/referencedby.go
@@ -7,7 +7,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // AddReferencedHandler is the echo.handler for adding referenced_by to
diff --git a/web/files/referencedby_test.go b/web/files/referencedby_test.go
index dc8fa5e5a..1d82ecfe8 100644
--- a/web/files/referencedby_test.go
+++ b/web/files/referencedby_test.go
@@ -8,7 +8,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/files/references.go b/web/files/references.go
index 4f66fd7eb..ab08eab73 100644
--- a/web/files/references.go
+++ b/web/files/references.go
@@ -14,7 +14,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/instances/client.go b/web/instances/client.go
index 43025c299..277d3b2a6 100644
--- a/web/instances/client.go
+++ b/web/instances/client.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/model/oauth"
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func createToken(c echo.Context) error {
diff --git a/web/instances/instances.go b/web/instances/instances.go
index 4262ea8b2..02d9188c8 100644
--- a/web/instances/instances.go
+++ b/web/instances/instances.go
@@ -27,7 +27,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/worker/updates"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiInstance struct {
diff --git a/web/instances/move.go b/web/instances/move.go
index e1701de50..33c5a5f84 100644
--- a/web/instances/move.go
+++ b/web/instances/move.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/model/move"
 	"github.com/cozy/cozy-stack/pkg/mail"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func exporter(c echo.Context) error {
diff --git a/web/intents/intents.go b/web/intents/intents.go
index c83499e0b..2c6a74c31 100644
--- a/web/intents/intents.go
+++ b/web/intents/intents.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiIntent struct {
diff --git a/web/intents/intents_test.go b/web/intents/intents_test.go
index 322026060..18ec83795 100644
--- a/web/intents/intents_test.go
+++ b/web/intents/intents_test.go
@@ -18,7 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/jobs/jobs.go b/web/jobs/jobs.go
index fbd0318b2..30b000940 100644
--- a/web/jobs/jobs.go
+++ b/web/jobs/jobs.go
@@ -20,8 +20,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/metadata"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/labstack/echo/v4"
 
 	// import workers
 	_ "github.com/cozy/cozy-stack/worker/archive"
diff --git a/web/jobs/jobs_test.go b/web/jobs/jobs_test.go
index cb6b49def..08d048979 100644
--- a/web/jobs/jobs_test.go
+++ b/web/jobs/jobs_test.go
@@ -18,7 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/middlewares/assets.go b/web/middlewares/assets.go
index 501557979..113812098 100644
--- a/web/middlewares/assets.go
+++ b/web/middlewares/assets.go
@@ -5,7 +5,7 @@ import (
 	"html/template"
 
 	"github.com/cozy/cozy-stack/model/instance"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // FuncsMap is a the helper functions used in templates.
diff --git a/web/middlewares/assets_test.go b/web/middlewares/assets_test.go
index 87e484e10..f2626e92e 100644
--- a/web/middlewares/assets_test.go
+++ b/web/middlewares/assets_test.go
@@ -19,7 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/web"
 	"github.com/cozy/cozy-stack/web/apps"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/stretchr/testify/assert"
 )
diff --git a/web/middlewares/basic_auth.go b/web/middlewares/basic_auth.go
index cd422b24e..815f94cb2 100644
--- a/web/middlewares/basic_auth.go
+++ b/web/middlewares/basic_auth.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // BasicAuth use HTTP basic authentication to authenticate a user. The secret
diff --git a/web/middlewares/cache.go b/web/middlewares/cache.go
index 04bc119f3..c5794c2fb 100644
--- a/web/middlewares/cache.go
+++ b/web/middlewares/cache.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"time"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // CacheMode is an enum to define a cache-control mode
diff --git a/web/middlewares/cors.go b/web/middlewares/cors.go
index 9c51ab55c..228b19172 100644
--- a/web/middlewares/cors.go
+++ b/web/middlewares/cors.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // MaxAgeCORS is used to cache the CORS header for 12 hours
diff --git a/web/middlewares/cors_test.go b/web/middlewares/cors_test.go
index 02cc33d89..6139323d7 100644
--- a/web/middlewares/cors_test.go
+++ b/web/middlewares/cors_test.go
@@ -5,7 +5,7 @@ import (
 	"net/http/httptest"
 	"testing"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/middlewares/instance.go b/web/middlewares/instance.go
index 9044f3990..69bab64c8 100644
--- a/web/middlewares/instance.go
+++ b/web/middlewares/instance.go
@@ -7,7 +7,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/model/permission"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // NeedInstance is an echo middleware which will display an error
@@ -28,7 +28,7 @@ func NeedInstance(next echo.HandlerFunc) echo.HandlerFunc {
 			default:
 				errHTTP = echo.NewHTTPError(http.StatusInternalServerError, err)
 			}
-			errHTTP.Inner = err
+			errHTTP.Internal = err
 			return errHTTP
 		}
 		c.Set("instance", i.WithContextualDomain(c.Request().Host))
diff --git a/web/middlewares/json_headers.go b/web/middlewares/json_headers.go
index c63c43161..0bd0b1361 100644
--- a/web/middlewares/json_headers.go
+++ b/web/middlewares/json_headers.go
@@ -5,7 +5,7 @@ import (
 	"strings"
 
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/golang/gddo/httputil"
 )
diff --git a/web/middlewares/middlewares.go b/web/middlewares/middlewares.go
index ffcf493b0..77bc415a2 100644
--- a/web/middlewares/middlewares.go
+++ b/web/middlewares/middlewares.go
@@ -4,7 +4,7 @@ import (
 	"strings"
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Compose can be used to compose a list of middlewares together with a main
diff --git a/web/middlewares/permissions.go b/web/middlewares/permissions.go
index 2ca5613a7..e22988a33 100644
--- a/web/middlewares/permissions.go
+++ b/web/middlewares/permissions.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/crypto"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
 
diff --git a/web/middlewares/recover.go b/web/middlewares/recover.go
index 00fbee15c..571fb7a68 100644
--- a/web/middlewares/recover.go
+++ b/web/middlewares/recover.go
@@ -5,8 +5,8 @@ import (
 	"runtime"
 
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 // RecoverConfig defines the config for Recover middleware.
diff --git a/web/middlewares/secure.go b/web/middlewares/secure.go
index 1cc2d3bc3..150a8fa66 100644
--- a/web/middlewares/secure.go
+++ b/web/middlewares/secure.go
@@ -7,7 +7,7 @@ import (
 	"time"
 
 	build "github.com/cozy/cozy-stack/pkg/config"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type (
diff --git a/web/middlewares/secure_test.go b/web/middlewares/secure_test.go
index a8a8bc085..2a78884cd 100644
--- a/web/middlewares/secure_test.go
+++ b/web/middlewares/secure_test.go
@@ -6,7 +6,7 @@ import (
 	"testing"
 	"time"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/middlewares/session.go b/web/middlewares/session.go
index bb84a23cb..6fb55fdb1 100644
--- a/web/middlewares/session.go
+++ b/web/middlewares/session.go
@@ -2,7 +2,7 @@ package middlewares
 
 import (
 	"github.com/cozy/cozy-stack/model/session"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const sessionKey = "session"
diff --git a/web/middlewares/user_agent.go b/web/middlewares/user_agent.go
index e1e3ed088..0d44e05b2 100644
--- a/web/middlewares/user_agent.go
+++ b/web/middlewares/user_agent.go
@@ -5,7 +5,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/mssola/user_agent"
 )
 
diff --git a/web/middlewares/user_agent_test.go b/web/middlewares/user_agent_test.go
index e45b05414..199ea9d15 100644
--- a/web/middlewares/user_agent_test.go
+++ b/web/middlewares/user_agent_test.go
@@ -7,7 +7,7 @@ import (
 	"testing"
 
 	"github.com/cozy/cozy-stack/model/instance"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/move/move.go b/web/move/move.go
index 5a7e11c91..b749ec3d8 100644
--- a/web/move/move.go
+++ b/web/move/move.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/worker/move"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func exportHandler(c echo.Context) error {
diff --git a/web/notifications/notifications.go b/web/notifications/notifications.go
index 4bf49e01f..9df353bb1 100644
--- a/web/notifications/notifications.go
+++ b/web/notifications/notifications.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiNotif struct {
diff --git a/web/oidc/oidc.go b/web/oidc/oidc.go
index 385a95b9b..a23a337c8 100644
--- a/web/oidc/oidc.go
+++ b/web/oidc/oidc.go
@@ -22,7 +22,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Start is the route to start the OpenID Connect dance.
diff --git a/web/oidc/oidc_test.go b/web/oidc/oidc_test.go
index 387ce61a8..c68139b3d 100644
--- a/web/oidc/oidc_test.go
+++ b/web/oidc/oidc_test.go
@@ -16,7 +16,7 @@ import (
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/oidc/statestore.go b/web/oidc/statestore.go
index 6c9f0eaa3..3cfed5e3b 100644
--- a/web/oidc/statestore.go
+++ b/web/oidc/statestore.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 const stateTTL = 15 * time.Minute
diff --git a/web/permissions/permissions.go b/web/permissions/permissions.go
index 8f7e9a5e4..3e8736afe 100644
--- a/web/permissions/permissions.go
+++ b/web/permissions/permissions.go
@@ -16,8 +16,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/metadata"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
 	"github.com/justincampbell/bigduration"
+	"github.com/labstack/echo/v4"
 )
 
 // ErrPatchCodeOrSet is returned when an attempt is made to patch both
diff --git a/web/permissions/permissions_test.go b/web/permissions/permissions_test.go
index 179af99a9..b33dc8679 100644
--- a/web/permissions/permissions_test.go
+++ b/web/permissions/permissions_test.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
diff --git a/web/public/public.go b/web/public/public.go
index 3a1ddab68..b376bc9c1 100644
--- a/web/public/public.go
+++ b/web/public/public.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/assets"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Avatar returns the default avatar currently.
diff --git a/web/realtime/realtime.go b/web/realtime/realtime.go
index b906dca5d..d0b7440ce 100644
--- a/web/realtime/realtime.go
+++ b/web/realtime/realtime.go
@@ -14,8 +14,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
 	"github.com/gorilla/websocket"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/registry/registry.go b/web/registry/registry.go
index 9b4fc0dbc..2362bc1a0 100644
--- a/web/registry/registry.go
+++ b/web/registry/registry.go
@@ -7,8 +7,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/registry"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 type authType int
diff --git a/web/remote/remote.go b/web/remote/remote.go
index 9f8d37d96..b5a54ed00 100644
--- a/web/remote/remote.go
+++ b/web/remote/remote.go
@@ -5,7 +5,7 @@ import (
 	"github.com/cozy/cozy-stack/model/remote"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func remoteGet(c echo.Context) error {
diff --git a/web/routing.go b/web/routing.go
index 7ba5b3962..63882e07c 100644
--- a/web/routing.go
+++ b/web/routing.go
@@ -35,8 +35,8 @@ import (
 	"github.com/cozy/cozy-stack/web/statik"
 	"github.com/cozy/cozy-stack/web/status"
 	"github.com/cozy/cozy-stack/web/version"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
diff --git a/web/routing_test.go b/web/routing_test.go
index 96580c355..5730dc38c 100644
--- a/web/routing_test.go
+++ b/web/routing_test.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/server.go b/web/server.go
index f0baeb806..e309ec9e1 100644
--- a/web/server.go
+++ b/web/server.go
@@ -21,8 +21,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/apps"
 
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 // ReadHeaderTimeout is the amount of time allowed to read request headers for
diff --git a/web/settings/clients.go b/web/settings/clients.go
index cf4b552cc..20bc8aa29 100644
--- a/web/settings/clients.go
+++ b/web/settings/clients.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
 
diff --git a/web/settings/context.go b/web/settings/context.go
index 73450ac7a..a2395244c 100644
--- a/web/settings/context.go
+++ b/web/settings/context.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiContext struct {
diff --git a/web/settings/disk_usage.go b/web/settings/disk_usage.go
index dbfc08fbb..8d6a827b3 100644
--- a/web/settings/disk_usage.go
+++ b/web/settings/disk_usage.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiDiskUsage struct {
diff --git a/web/settings/instance.go b/web/settings/instance.go
index ae63a9f9d..0cece507c 100644
--- a/web/settings/instance.go
+++ b/web/settings/instance.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiInstance struct {
diff --git a/web/settings/passphrase.go b/web/settings/passphrase.go
index bd8d95142..2a00a0732 100644
--- a/web/settings/passphrase.go
+++ b/web/settings/passphrase.go
@@ -16,7 +16,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func registerPassphrase(c echo.Context) error {
diff --git a/web/settings/settings.go b/web/settings/settings.go
index 89a8d9087..70073cfa8 100644
--- a/web/settings/settings.go
+++ b/web/settings/settings.go
@@ -12,7 +12,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiSession struct {
diff --git a/web/settings/settings_test.go b/web/settings/settings_test.go
index 39e816f9d..321d2f8f7 100644
--- a/web/settings/settings_test.go
+++ b/web/settings/settings_test.go
@@ -20,7 +20,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/errors"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 
 	_ "github.com/cozy/cozy-stack/worker/mails"
diff --git a/web/sharings/readonly.go b/web/sharings/readonly.go
index b269aa774..d4ec78dd1 100644
--- a/web/sharings/readonly.go
+++ b/web/sharings/readonly.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/sharing"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // AddReadOnly is used to downgrade a read-write member to read-only
diff --git a/web/sharings/replicator.go b/web/sharings/replicator.go
index 5db511140..fe91979e6 100644
--- a/web/sharings/replicator.go
+++ b/web/sharings/replicator.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // RevsDiff is part of the replicator
diff --git a/web/sharings/replicator_test.go b/web/sharings/replicator_test.go
index d863cf061..34b76e15b 100644
--- a/web/sharings/replicator_test.go
+++ b/web/sharings/replicator_test.go
@@ -15,8 +15,8 @@ import (
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
-	uuid "github.com/satori/go.uuid"
+	"github.com/gofrs/uuid"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/sharings/revoke.go b/web/sharings/revoke.go
index e6304930c..78f58919f 100644
--- a/web/sharings/revoke.go
+++ b/web/sharings/revoke.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/sharing"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // RevokeSharing is used to revoke a sharing by the sharer, for all recipients
diff --git a/web/sharings/sharings.go b/web/sharings/sharings.go
index 34b2ec729..ecdecf576 100644
--- a/web/sharings/sharings.go
+++ b/web/sharings/sharings.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // CreateSharing initializes a new sharing (on the sharer)
diff --git a/web/sharings/sharings_test.go b/web/sharings/sharings_test.go
index 3d38fd242..68455250d 100644
--- a/web/sharings/sharings_test.go
+++ b/web/sharings/sharings_test.go
@@ -32,7 +32,7 @@ import (
 	"github.com/cozy/cozy-stack/web/permissions"
 	"github.com/cozy/cozy-stack/web/sharings"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/statik/handler.go b/web/statik/handler.go
index 0cd9e64be..206a78946 100644
--- a/web/statik/handler.go
+++ b/web/statik/handler.go
@@ -23,7 +23,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/utils"
 	web_utils "github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/sirupsen/logrus"
 )
diff --git a/web/status/status.go b/web/status/status.go
index e0901eb74..2ea5c220b 100644
--- a/web/status/status.go
+++ b/web/status/status.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/assets/dynamic"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Status responds with the status of the service
diff --git a/web/status/status_test.go b/web/status/status_test.go
index 0ea137085..b6db3317e 100644
--- a/web/status/status_test.go
+++ b/web/status/status_test.go
@@ -10,7 +10,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/web/errors"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/version/version.go b/web/version/version.go
index 4e576771c..38208c059 100644
--- a/web/version/version.go
+++ b/web/version/version.go
@@ -6,7 +6,7 @@ import (
 	"runtime"
 
 	build "github.com/cozy/cozy-stack/pkg/config"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Version responds with the git commit used at the build
diff --git a/worker/exec/konnector.go b/worker/exec/konnector.go
index 3346fd26d..86316caaf 100644
--- a/worker/exec/konnector.go
+++ b/worker/exec/konnector.go
@@ -12,7 +12,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/account"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance"
@@ -28,6 +27,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/pkg/registry"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 )
 
 const (
diff --git a/worker/exec/konnector_test.go b/worker/exec/konnector_test.go
index cd64fc47d..56be9d7dc 100644
--- a/worker/exec/konnector_test.go
+++ b/worker/exec/konnector_test.go
@@ -7,7 +7,6 @@ import (
 	"sync"
 	"testing"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/account"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance"
@@ -20,6 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/tests/testutils"
+	"github.com/spf13/afero"
 	"github.com/stretchr/testify/assert"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
diff --git a/worker/exec/service.go b/worker/exec/service.go
index 17434aac1..317ec36ef 100644
--- a/worker/exec/service.go
+++ b/worker/exec/service.go
@@ -8,13 +8,13 @@ import (
 	"os"
 	"path"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance"
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 )
 
 // ServiceOptions contains the options to execute a service.
diff --git a/worker/mails/exec.go b/worker/mails/exec.go
index 287ba2b5a..a227cbdb8 100644
--- a/worker/mails/exec.go
+++ b/worker/mails/exec.go
@@ -5,12 +5,12 @@ import (
 	"io"
 	"os"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/pkg/assets"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/worker/exec"
+	"github.com/spf13/afero"
 )
 
 func execMjml(ctx *job.WorkerContext, template []byte) ([]byte, error) {
diff --git a/worker/migrations/migrations.go b/worker/migrations/migrations.go
index 55882c377..e862fed85 100644
--- a/worker/migrations/migrations.go
+++ b/worker/migrations/migrations.go
@@ -14,8 +14,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 )
 
 const (
diff --git a/worker/move/archiver.go b/worker/move/archiver.go
index 04f34d66d..1d7e6c378 100644
--- a/worker/move/archiver.go
+++ b/worker/move/archiver.go
@@ -8,12 +8,12 @@ import (
 	"strconv"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/instance"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 var (
diff --git a/worker/move/export.go b/worker/move/export.go
index a76a21e42..b6343918b 100644
--- a/worker/move/export.go
+++ b/worker/move/export.go
@@ -25,7 +25,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
-- 
GitLab