From dee203608a59a1428c1b1b7305c63daaf216aae5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 12 Nov 2022 22:26:26 +0000
Subject: [PATCH 01/26] build(deps): update module github.com/jackc/pgx/v5 to
v5.1.0 (#4365)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 4afe02097..7f5ce2f55 100644
--- a/go.mod
+++ b/go.mod
@@ -19,7 +19,7 @@ require (
github.com/golang-jwt/jwt/v4 v4.4.2
github.com/golang/mock v1.6.0
github.com/google/uuid v1.3.0
- github.com/jackc/pgx/v5 v5.0.4
+ github.com/jackc/pgx/v5 v5.1.0
github.com/jmoiron/sqlx v1.3.5
github.com/knadh/koanf v1.4.4
github.com/mattn/go-sqlite3 v1.14.16
diff --git a/go.sum b/go.sum
index ee6a1f735..128d97443 100644
--- a/go.sum
+++ b/go.sum
@@ -800,8 +800,8 @@ github.com/jackc/pgx/v4 v4.6.0/go.mod h1:vPh43ZzxijXUVJ+t/EmXBtFmbFVO72cuneCT9oA
github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o=
github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg=
github.com/jackc/pgx/v4 v4.10.1/go.mod h1:QlrWebbs3kqEZPHCTGyxecvzG6tvIsYu+A5b1raylkA=
-github.com/jackc/pgx/v5 v5.0.4 h1:r5O6y84qHX/z/HZV40JBdx2obsHz7/uRj5b+CcYEdeY=
-github.com/jackc/pgx/v5 v5.0.4/go.mod h1:U0ynklHtgg43fue9Ly30w3OCSTDPlXjig9ghrNGaguQ=
+github.com/jackc/pgx/v5 v5.1.0 h1:Z7pLKUb65HK6m18No8GGKT87K34NhIIEHa86rRdjxbU=
+github.com/jackc/pgx/v5 v5.1.0/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk=
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
From 7a0067e5720f56b41b3ef63090c70871339a30db Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 13 Nov 2022 09:58:54 +1100
Subject: [PATCH 02/26] docs: add smkent as a contributor for code, design, and
ideas (#4367)
* update README.md
* update .all-contributorsrc
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
---
.all-contributorsrc | 4 +++-
README.md | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 7dcf00357..94f7625c7 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -821,7 +821,9 @@
"avatar_url": "https://avatars.githubusercontent.com/u/2831985?v=4",
"profile": "https://github.com/smkent",
"contributions": [
- "ideas"
+ "ideas",
+ "code",
+ "design"
]
}
],
diff --git a/README.md b/README.md
index 9faedeae5..e800faaee 100644
--- a/README.md
+++ b/README.md
@@ -306,7 +306,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Paul Ohl 📖 |
- Stephen Kent 🤔 |
+ Stephen Kent 🤔 💻 🎨 |
From ad68f33aeb402d84e6e4ba5038aba9c0e85b26bc Mon Sep 17 00:00:00 2001
From: James Elliott
Date: Sun, 13 Nov 2022 14:26:10 +1100
Subject: [PATCH 03/26] build(deps): update module github.com/ory/fosite to
v0.43.0 (#4269)
This updates fosite and refactors our usage out of compose.
---
go.mod | 43 +-
go.sum | 1165 ++---------------
.../handlers/handler_oauth_introspection.go | 4 +-
internal/handlers/handler_oauth_revocation.go | 2 +-
.../handlers/handler_oidc_authorization.go | 14 +-
.../handler_oidc_authorization_consent.go | 12 +-
...ler_oidc_authorization_consent_explicit.go | 12 +-
...ler_oidc_authorization_consent_implicit.go | 20 +-
...dc_authorization_consent_pre_configured.go | 26 +-
internal/handlers/handler_oidc_token.go | 6 +-
internal/oidc/config.go | 583 +++++++++
internal/oidc/const.go | 16 +
internal/oidc/hmac.go | 129 ++
internal/oidc/keys.go | 12 +-
internal/oidc/provider.go | 74 +-
internal/oidc/store.go | 4 +-
internal/oidc/store_test.go | 10 +-
internal/oidc/types.go | 23 +-
internal/storage/const.go | 30 +-
internal/storage/sql_provider.go | 20 +-
20 files changed, 989 insertions(+), 1216 deletions(-)
create mode 100644 internal/oidc/config.go
create mode 100644 internal/oidc/hmac.go
diff --git a/go.mod b/go.mod
index 7f5ce2f55..ac80903fb 100644
--- a/go.mod
+++ b/go.mod
@@ -19,14 +19,16 @@ require (
github.com/golang-jwt/jwt/v4 v4.4.2
github.com/golang/mock v1.6.0
github.com/google/uuid v1.3.0
+ github.com/hashicorp/go-retryablehttp v0.7.1
github.com/jackc/pgx/v5 v5.1.0
github.com/jmoiron/sqlx v1.3.5
github.com/knadh/koanf v1.4.4
github.com/mattn/go-sqlite3 v1.14.16
github.com/mitchellh/mapstructure v1.5.0
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
- github.com/ory/fosite v0.42.2
+ github.com/ory/fosite v0.43.0
github.com/ory/herodot v0.9.13
+ github.com/ory/x v0.0.507
github.com/otiai10/copy v1.9.0
github.com/pkg/errors v0.9.1
github.com/pquerna/otp v1.3.0
@@ -51,37 +53,40 @@ require (
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
+ github.com/cristalhq/jwt/v4 v4.0.2 // indirect
+ github.com/dave/jennifer v1.6.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/dgraph-io/ristretto v0.1.0 // indirect
+ github.com/dgraph-io/ristretto v0.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/dlclark/regexp2 v1.4.0 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
+ github.com/ecordell/optgen v0.0.6 // indirect
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
github.com/go-crypt/x v0.1.3 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-webauthn/revoke v0.1.6 // indirect
- github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
+ github.com/golang/glog v1.0.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/go-tpm v0.3.3 // indirect
- github.com/gorilla/websocket v1.4.2 // indirect
+ github.com/gorilla/websocket v1.5.0 // indirect
+ github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
github.com/jandelgado/gcov2lcov v1.0.5 // indirect
github.com/klauspost/compress v1.15.9 // indirect
- github.com/magiconair/properties v1.8.5 // indirect
- github.com/mattn/goveralls v0.0.6 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+ github.com/magiconair/properties v1.8.6 // indirect
+ github.com/mattn/goveralls v0.0.11 // indirect
+ github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/ory/go-acc v0.2.6 // indirect
+ github.com/ory/go-acc v0.2.8 // indirect
github.com/ory/go-convenience v0.1.0 // indirect
github.com/ory/viper v1.7.5 // indirect
- github.com/ory/x v0.0.288 // indirect
github.com/pborman/uuid v1.2.1 // indirect
- github.com/pelletier/go-toml v1.9.4 // indirect
+ github.com/pelletier/go-toml v1.9.5 // indirect
github.com/philhofer/fwd v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
@@ -90,10 +95,10 @@ require (
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/savsgio/dictpool v0.0.0-20220406081701-03de5edb2e6d // indirect
github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d // indirect
- github.com/spf13/afero v1.6.0 // indirect
- github.com/spf13/cast v1.4.1 // indirect
+ github.com/spf13/afero v1.9.2 // indirect
+ github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
- github.com/subosito/gotenv v1.2.0 // indirect
+ github.com/subosito/gotenv v1.4.1 // indirect
github.com/test-go/testify v1.1.4 // indirect
github.com/tinylib/msgp v1.1.6 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
@@ -102,14 +107,16 @@ require (
github.com/ysmood/gson v0.7.1 // indirect
github.com/ysmood/leakless v0.8.0 // indirect
golang.org/x/crypto v0.1.0 // indirect
- golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
+ golang.org/x/mod v0.6.0 // indirect
golang.org/x/net v0.1.0 // indirect
+ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
golang.org/x/sys v0.2.0 // indirect
- golang.org/x/tools v0.1.12 // indirect
- google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect
- google.golang.org/grpc v1.42.0 // indirect
+ golang.org/x/tools v0.2.0 // indirect
+ google.golang.org/appengine v1.6.7 // indirect
+ google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 // indirect
+ google.golang.org/grpc v1.50.1 // indirect
google.golang.org/protobuf v1.28.1 // indirect
- gopkg.in/ini.v1 v1.66.2 // indirect
+ gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
diff --git a/go.sum b/go.sum
index 128d97443..704977bdc 100644
--- a/go.sum
+++ b/go.sum
@@ -1,10 +1,9 @@
-bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.41.0/go.mod h1:OauMR7DV8fzvZIl2qg6rkaIhD/vmgk4iwEw/h6ercmg=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -15,6 +14,9 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
+cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
+cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -23,7 +25,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
@@ -33,32 +34,15 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e h1:NeAW1fUYUEWhft7pkxDf6WoUvEZJ/uOKsvtpjLnn8MU=
github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
-github.com/DataDog/datadog-go v4.0.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/Gurpartap/logrus-stack v0.0.0-20170710170904-89c00d8a28f4 h1:vdT7QwBhJJEVNFMBNhRSFDRCB6O16T28VhvqRgqFyn8=
github.com/Gurpartap/logrus-stack v0.0.0-20170710170904-89c00d8a28f4/go.mod h1:SvXOG8ElV28oAiG9zv91SDe5+9PfIr7PPccpr8YyXNs=
-github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
-github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
-github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
-github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
-github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
-github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
-github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
-github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
-github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -67,24 +51,13 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
-github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
-github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
-github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
-github.com/aws/aws-sdk-go v1.23.19/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw=
github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ=
@@ -94,24 +67,15 @@ github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZk
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8=
github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk=
github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g=
-github.com/aws/aws-xray-sdk-go v0.9.4/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04=
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
-github.com/bmatcuk/doublestar/v2 v2.0.3/go.mod h1:QMmcs3H2AUQICWhfzLXz+IYln8lRQmTZRptLie8RgRw=
-github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
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/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
-github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
-github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
-github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -120,49 +84,32 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
-github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
-github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk=
-github.com/cockroachdb/cockroach-go v0.0.0-20190925194419-606b3d062051/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk=
-github.com/cockroachdb/cockroach-go v0.0.0-20200312223839-f565e4789405/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk=
-github.com/cockroachdb/cockroach-go/v2 v2.1.1/go.mod h1:7NtUnP6eK+l6k483WSYNrq3Kb23bWV10IRV1TyeSpwM=
-github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
-github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
-github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0=
-github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
-github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
-github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
-github.com/containerd/continuity v0.0.0-20200107194136-26c1120b8d41/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY=
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/etcd v3.3.13+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-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
-github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/cucumber/godog v0.8.1/go.mod h1:vSh3r/lM+psC1BPXvdkSEuNjmXfpVqrMGYAElF6hxnA=
+github.com/cristalhq/jwt/v4 v4.0.2 h1:g/AD3h0VicDamtlM70GWGElp8kssQEv+5wYd7L9WOhU=
+github.com/cristalhq/jwt/v4 v4.0.2/go.mod h1:HnYraSNKDRag1DZP92rYHyrjyQHnVEHPNqesmzs+miQ=
+github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
+github.com/dave/jennifer v1.6.0 h1:MQ/6emI2xM7wt0tJzJzyUik2Q3Tcn2eE0vtYgh4GPVI=
+github.com/dave/jennifer v1.6.0/go.mod h1:AxTG893FiZKqxy3FP1kL80VMshSMuz2G+EgvszgGRnk=
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=
@@ -170,9 +117,8 @@ github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsP
github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
github.com/dgraph-io/ristretto v0.0.1/go.mod h1:T40EBc7CJke8TkpiYfGGKAeFjSaxuFXhuXRyumBd6RE=
github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
-github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
-github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI=
-github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug=
+github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
+github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
@@ -181,29 +127,16 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
-github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v17.12.0-ce-rc1.0.20201201034508-7d75c1d40d88+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
-github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/duosecurity/duo_api_golang v0.0.0-20220927171823-f4576e85b96c h1:SndVaMnkMWHtn0TyWx8kX7Oees7wPhCCx+wFDWHXsac=
github.com/duosecurity/duo_api_golang v0.0.0-20220927171823-f4576e85b96c/go.mod h1:jI+QUTOK3wqIOrUl0Cwnwlgc/P6vs6pZOuQY3aKggwg=
-github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
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/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
-github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
-github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
-github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/elastic/go-licenser v0.3.1/go.mod h1:D8eNQk70FOCVBl3smCGQt/lv7meBeQno2eI1S5apiHQ=
-github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0=
-github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU=
-github.com/elazarl/goproxy v0.0.0-20181003060214-f58a169a71a5/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
+github.com/ecordell/optgen v0.0.6 h1:aSknPe6ZUBrjwHGp2+6XfmfCGYGD6W0ZDfCmmsrS7s4=
+github.com/ecordell/optgen v0.0.6/go.mod h1:bAPkLVWcBlTX5EkXW0UTPRj3+yjq2I6VLgH8OasuQEM=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
@@ -217,12 +150,9 @@ github.com/fasthttp/session/v2 v2.4.13 h1:I/j3w8UrXX1haXE+iraAbQuGihNVeTq6b8sp6L
github.com/fasthttp/session/v2 v2.4.13/go.mod h1:bAE6Bjl6ofQbkOpqcSuOVt/1R1LnbNLnFMHjGQcYP5M=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
-github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
+github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
-github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
-github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
-github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
-github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
@@ -230,11 +160,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS
github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88=
github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A=
github.com/go-asn1-ber/asn1-ber v1.5.4/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
-github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo=
github.com/go-crypt/crypt v0.1.14 h1:Pd8iBYlbwDXJNi0lz8CS/qYvpvxCfP0XO/f5PYvVQ4o=
github.com/go-crypt/crypt v0.1.14/go.mod h1:VNLdWMD0go46arq5WVZB2MV/9Vw02FOWhKDORXl7K2c=
github.com/go-crypt/x v0.1.3 h1:3YSlHqOZsw4gcPzfqrcc5kg4GIhTKmkjl/ZVqJ3CbbU=
@@ -244,7 +171,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
@@ -254,68 +180,10 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
-github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
-github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
-github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
-github.com/go-openapi/errors v0.20.0/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
-github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
-github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
-github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
-github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
-github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
-github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
-github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
-github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
-github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
-github.com/go-openapi/runtime v0.19.26/go.mod h1:BvrQtn6iVb2QmiVXRsFAm6ZCAZBpbVKFfN6QWCp582M=
-github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
-github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
-github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
-github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
-github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
-github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
-github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
-github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
-github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
-github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
-github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
-github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
-github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-rod/rod v0.112.0 h1:U9Yc+quw4hxZ6GrdbWFBeylvaYElEKM9ijFW2LYkGlA=
github.com/go-rod/rod v0.112.0/go.mod h1:GZDtmEs6RpF6kBRYpGCZXxXlKNneKVPiKOjaMbmVVjE=
-github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
@@ -325,274 +193,15 @@ github.com/go-webauthn/revoke v0.1.6 h1:3tv+itza9WpX5tryRQx4GwxCCBrCIiJ8GIkOhxiA
github.com/go-webauthn/revoke v0.1.6/go.mod h1:TB4wuW4tPlwgF3znujA96F70/YSQXHPPWl7vgY09Iy8=
github.com/go-webauthn/webauthn v0.5.0 h1:Tbmp37AGIhYbQmcy2hEffo3U3cgPClqvxJ7cLUnF7Rc=
github.com/go-webauthn/webauthn v0.5.0/go.mod h1:0CBq/jNfPS9l033j4AxMk8K8MluiMsde9uGNSPFLEVE=
-github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
-github.com/gobuffalo/attrs v0.1.0/go.mod h1:fmNpaWyHM0tRm8gCZWKx8yY9fvaNLo2PyzBNSrBZ5Hw=
-github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY=
-github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4=
-github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs=
-github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4=
-github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY=
-github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w=
-github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI=
-github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI=
-github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk=
-github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw=
-github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q=
-github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960=
-github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U=
-github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI=
-github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI=
-github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg=
-github.com/gobuffalo/buffalo-plugins v1.15.0/go.mod h1:BqSx01nwgKUQr/MArXzFkSD0QvdJidiky1OKgyfgrK8=
-github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8=
-github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
-github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
-github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc=
-github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
-github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
-github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
-github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
-github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
-github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo=
-github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg=
-github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0=
-github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
-github.com/gobuffalo/envy v1.8.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
-github.com/gobuffalo/envy v1.9.0/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
-github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw=
-github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ=
-github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs=
-github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk=
-github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A=
-github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0=
-github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY=
-github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8=
-github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM=
-github.com/gobuffalo/events v1.3.1/go.mod h1:9JOkQVoyRtailYVE/JJ2ZQ/6i4gTjM5t2HsZK4C1cSA=
-github.com/gobuffalo/events v1.4.1/go.mod h1:SjXgWKpeSuvQDvGhgMz5IXx3Czu+IbL+XPLR41NvVQY=
-github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc=
-github.com/gobuffalo/fizz v1.9.8/go.mod h1:w1FEn1yKNVCc49KnADGyYGRPH7jFON3ak4Bj1yUudHo=
-github.com/gobuffalo/fizz v1.10.0/go.mod h1:J2XGPO0AfJ1zKw7+2BA+6FEGAkyEsdCOLvN93WCT2WI=
-github.com/gobuffalo/fizz v1.13.1-0.20201104174146-3416f0e6618f/go.mod h1:cXLjhE5p3iuIes6AGZ/9+dfyOkehlB2Vldj0Iw2Uu38=
-github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
-github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI=
-github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk=
-github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk=
-github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k=
-github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
-github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80=
-github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80=
-github.com/gobuffalo/flect v0.2.1/go.mod h1:vmkQwuZYhN5Pc4ljYQZzP+1sq+NEkK+lh20jmEmX3jc=
-github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g=
-github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM=
-github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM=
-github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA=
-github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA=
-github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA=
-github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE=
-github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI=
-github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA=
-github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w=
-github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU=
-github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU=
-github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng=
-github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E=
-github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ=
-github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU=
-github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM=
-github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM=
-github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM=
-github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8=
-github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM=
-github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY=
-github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo=
-github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
-github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
-github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
-github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
-github.com/gobuffalo/genny v0.2.0/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
-github.com/gobuffalo/genny v0.3.0/go.mod h1:ywJ2CoXrTZj7rbS8HTbzv7uybnLKlsNSBhEQ+yFI3E8=
-github.com/gobuffalo/genny v0.6.0/go.mod h1:Vigx9VDiNscYpa/LwrURqGXLSIbzTfapt9+K6gF1kTA=
-github.com/gobuffalo/genny/v2 v2.0.5/go.mod h1:kRkJuAw9mdI37AiEYjV4Dl+TgkBDYf8HZVjLkqe5eBg=
-github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
-github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I=
-github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY=
-github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI=
-github.com/gobuffalo/github_flavored_markdown v1.1.0/go.mod h1:TSpTKWcRTI0+v7W3x8dkSKMLJSUpuVitlptCkpeY8ic=
-github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
-github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
-github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
-github.com/gobuffalo/gogen v0.2.0/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
-github.com/gobuffalo/helpers v0.2.2/go.mod h1:xYbzUdCUpVzLwLnqV8HIjT6hmG0Cs7YIBCJkNM597jw=
-github.com/gobuffalo/helpers v0.2.4/go.mod h1:NX7v27yxPDOPTgUFYmJ5ow37EbxdoLraucOGvMNawyk=
-github.com/gobuffalo/helpers v0.5.0/go.mod h1:stpgxJ2C7T99NLyAxGUnYMM2zAtBk5NKQR0SIbd05j4=
-github.com/gobuffalo/helpers v0.6.0/go.mod h1:pncVrer7x/KRvnL5aJABLAuT/RhKRR9klL6dkUOhyv8=
-github.com/gobuffalo/helpers v0.6.1/go.mod h1:wInbDi0vTJKZBviURTLRMFLE4+nF2uRuuL2fnlYo7w4=
-github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM=
-github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E=
-github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w=
-github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw=
-github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0=
-github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk=
-github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE=
-github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU=
-github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM=
-github.com/gobuffalo/licenser v1.1.0/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY=
-github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo=
-github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8=
-github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8=
-github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew=
-github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I=
-github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U=
-github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
-github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
-github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
-github.com/gobuffalo/logger v1.0.3/go.mod h1:SoeejUwldiS7ZsyCBphOGURmWdwUFXs0J7TCjEhjKxM=
-github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw=
-github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/mapi v1.1.0/go.mod h1:pqQ1XAqvpy/JYtRwoieNps2yU8MFiMxBUpAm2FBtQ50=
-github.com/gobuffalo/mapi v1.2.1/go.mod h1:giGJ2AUESRepOFYAzWpq8Gf/s/QDryxoEHisQtFN3cY=
-github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM=
-github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE=
-github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg=
-github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE=
-github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8=
-github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM=
-github.com/gobuffalo/meta v0.0.0-20190329152330-e161e8a93e3b/go.mod h1:mCRSy5F47tjK8yaIDcJad4oe9fXxY5gLrx3Xx2spK+0=
-github.com/gobuffalo/meta v0.3.0/go.mod h1:cpr6mrUX5H/B4wEP86Gdq568TK4+dKUD8oRPl698RUw=
-github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0=
-github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No=
-github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo=
-github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ=
-github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4=
-github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME=
-github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c=
-github.com/gobuffalo/nulls v0.2.0/go.mod h1:w4q8RoSCEt87Q0K0sRIZWYeIxkxog5mh3eN3C/n+dUc=
-github.com/gobuffalo/nulls v0.3.0/go.mod h1:UP49vd/k+bcaz6m0cHMyuk8oQ7XgLnkfxeiVoPAvBSs=
-github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc=
-github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc=
-github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc=
-github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
-github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
-github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
-github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
-github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8=
-github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA=
-github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA=
-github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packd v0.2.0/go.mod h1:k2CkHP3bjbqL2GwxwhxUy1DgnlbW644hkLC9iIUvZwY=
-github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q=
-github.com/gobuffalo/packd v1.0.0/go.mod h1:6VTc4htmJRFB7u1m/4LeMTWjFoYrUiBkU9Fdec9hrhI=
-github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24=
-github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI=
-github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE=
-github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU=
-github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw=
-github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0=
-github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8=
-github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs=
-github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
-github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
-github.com/gobuffalo/packr/v2 v2.4.0/go.mod h1:ra341gygw9/61nSjAbfwcwh8IrYL4WmR4IsPkPBhQiY=
-github.com/gobuffalo/packr/v2 v2.5.2/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08=
-github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc=
-github.com/gobuffalo/packr/v2 v2.8.0/go.mod h1:PDk2k3vGevNE3SwVyVRgQCCXETC9SaONCNSXT1Q8M1g=
-github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.8.2+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush v3.8.3+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
-github.com/gobuffalo/plush/v4 v4.0.0/go.mod h1:ErFS3UxKqEb8fpFJT7lYErfN/Nw6vHGiDMTjxpk5bQ0=
-github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4=
-github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs=
-github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0=
-github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc=
-github.com/gobuffalo/plushgen v0.1.2/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk=
-github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
-github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
-github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
-github.com/gobuffalo/pop v4.13.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
-github.com/gobuffalo/pop/v5 v5.0.11/go.mod h1:mZJHJbA3cy2V18abXYuVop2ldEJ8UZ2DK6qOekC5u5g=
-github.com/gobuffalo/pop/v5 v5.2.0/go.mod h1:Hj586Cr7FoTFNmvzyNdUcajv3r0A+W+bkil4RIX/zKo=
-github.com/gobuffalo/pop/v5 v5.3.1/go.mod h1:vcEDhh6cJ3WVENqJDFt/6z7zNb7lLnlN8vj3n5G9rYA=
-github.com/gobuffalo/pop/v5 v5.3.3/go.mod h1:Ey1hqzDLkWQKNEfsnafaz+3P1h/TrS++W9PmpGsNxvk=
-github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4=
-github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4=
-github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug=
-github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug=
-github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA=
-github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc=
-github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24=
-github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU=
-github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg=
-github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E=
-github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0=
-github.com/gobuffalo/release v1.7.0/go.mod h1:xH2NjAueVSY89XgC4qx24ojEQ4zQ9XCGVs5eXwJTkEs=
-github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA=
-github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4=
-github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/gobuffalo/syncx v0.1.0/go.mod h1:Mg/s+5pv7IgxEp6sA+NFpqS4o2x+R9dQNwbwT0iuOGQ=
-github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
-github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
-github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
-github.com/gobuffalo/tags v2.1.0+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
-github.com/gobuffalo/tags v2.1.7+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
-github.com/gobuffalo/tags/v3 v3.0.2/go.mod h1:ZQeN6TCTiwAFnS0dNcbDtSgZDwNKSpqajvVtt6mlYpA=
-github.com/gobuffalo/tags/v3 v3.1.0/go.mod h1:ZQeN6TCTiwAFnS0dNcbDtSgZDwNKSpqajvVtt6mlYpA=
-github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
-github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
-github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
-github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM=
-github.com/gobuffalo/validate v2.0.4+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM=
-github.com/gobuffalo/validate/v3 v3.0.0/go.mod h1:HFpjq+AIiA2RHoQnQVTFKF/ZpUPXwyw82LgyDPxQ9r0=
-github.com/gobuffalo/validate/v3 v3.1.0/go.mod h1:HFpjq+AIiA2RHoQnQVTFKF/ZpUPXwyw82LgyDPxQ9r0=
-github.com/gobuffalo/validate/v3 v3.2.0/go.mod h1:PrhDOdDHxtN8KUgMvF3TDL0r1YZXV4sQnyFX/EmeETY=
-github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc=
-github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gofrs/uuid/v3 v3.1.2/go.mod h1:xPwMqoocQ1L5G6pXX5BcE7N5jlzn2o19oqAKxwZW/kI=
-github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs=
github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
-github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
-github.com/golang/gddo v0.0.0-20180828051604-96d2a289f41e/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
-github.com/golang/gddo v0.0.0-20190904175337-72a348e765d2/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
+github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -604,10 +213,8 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
-github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
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/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -625,7 +232,6 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -642,8 +248,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
-github.com/google/go-jsonnet v0.16.0/go.mod h1:sOcuej3UW1vpPTZOr8L7RQimqai1a57bt5j22LzGZCw=
-github.com/google/go-jsonnet v0.17.0/go.mod h1:sOcuej3UW1vpPTZOr8L7RQimqai1a57bt5j22LzGZCw=
github.com/google/go-tpm v0.1.2-0.20190725015402-ae6dd98980d4/go.mod h1:H9HbmUG2YgV/PHITkO7p6wxEEj/v5nlsVWIwumwH2NI=
github.com/google/go-tpm v0.3.0/go.mod h1:iVLWvrPp/bHeEkxTFi9WG6K9w0iy2yIszHwZGHPbzAw=
github.com/google/go-tpm v0.3.3 h1:P/ZFNBZYXRxc+z7i5uyd8VP7MaDteuLZInzrH2idRGo=
@@ -653,6 +257,7 @@ github.com/google/go-tpm-tools v0.2.0/go.mod h1:npUd03rQ60lxN7tzeBJreG38RvWwme2N
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
@@ -660,52 +265,38 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/gopherjs/gopherjs v0.0.0-20181004151105-1babbf986f6f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
-github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY=
-github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
-github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
-github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
-github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
-github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gotestyourself/gotestyourself v1.3.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
-github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/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/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
-github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ=
-github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
-github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
+github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM=
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
@@ -713,8 +304,8 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
-github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
-github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ=
+github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
@@ -723,18 +314,13 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
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/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
-github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
-github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
-github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
@@ -743,131 +329,45 @@ github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKe
github.com/hjson/hjson-go/v4 v4.0.0 h1:wlm6IYYqHjOdXH1gHev4VoXCaW20HdQAGCxdOEEg2cs=
github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
-github.com/inhies/go-bytesize v0.0.0-20201103132853-d0aed0d254f8/go.mod h1:KrtyD5PFj++GKkFS/7/RRrfnRhAMGQwy75GLCHWrCNs=
-github.com/instana/go-sensor v1.29.0/go.mod h1:Uh9j3eF2mBw/FLk2MxISmVDIj8mtJBFRj2S19M6CVyQ=
-github.com/instana/testify v1.6.2-0.20200721153833-94b1851f4d65/go.mod h1:nYhEREG/B7HUY7P+LKOrqy53TpIqmJ9JyUShcaEKtGw=
-github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
-github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
-github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
-github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
-github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA=
-github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE=
-github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s=
-github.com/jackc/pgconn v1.3.2/go.mod h1:LvCquS3HbBKwgl7KbX9KyqEIumJAbm1UMcTvGaIf3bM=
-github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk=
-github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI=
-github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI=
-github.com/jackc/pgconn v1.6.0/go.mod h1:yeseQo4xhQbgyJs2c87RAXOH2i624N0Fh1KSPJya7qo=
-github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o=
-github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
-github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78=
-github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA=
-github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg=
-github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
-github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
-github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
-github.com/jackc/pgproto3/v2 v2.0.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
-github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
-github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
-github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
-github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
-github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
-github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0=
-github.com/jackc/pgtype v1.3.0/go.mod h1:b0JqxHvPmljG+HQ5IsvQ0yqeSi4nGcDTVjFoiLDb0Ik=
-github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po=
-github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ=
-github.com/jackc/pgtype v1.6.2/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig=
-github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
-github.com/jackc/pgx v3.6.2+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
-github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y=
-github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
-github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
-github.com/jackc/pgx/v4 v4.4.1/go.mod h1:6iSW+JznC0YT+SgBn7rNxoEBsBgSmnC5FwyCekOGUiE=
-github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA=
-github.com/jackc/pgx/v4 v4.6.0/go.mod h1:vPh43ZzxijXUVJ+t/EmXBtFmbFVO72cuneCT9oAlxAg=
-github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o=
-github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg=
-github.com/jackc/pgx/v4 v4.10.1/go.mod h1:QlrWebbs3kqEZPHCTGyxecvzG6tvIsYu+A5b1raylkA=
github.com/jackc/pgx/v5 v5.1.0 h1:Z7pLKUb65HK6m18No8GGKT87K34NhIIEHa86rRdjxbU=
github.com/jackc/pgx/v5 v5.1.0/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk=
-github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jandelgado/gcov2lcov v1.0.4-0.20210120124023-b83752c6dc08/go.mod h1:NnSxK6TMlg1oGDBfGelGbjgorT5/L3cchlbtgFYZSss=
-github.com/jandelgado/gcov2lcov v1.0.4/go.mod h1:NnSxK6TMlg1oGDBfGelGbjgorT5/L3cchlbtgFYZSss=
github.com/jandelgado/gcov2lcov v1.0.5 h1:rkBt40h0CVK4oCb8Dps950gvfd1rYvQ8+cWa346lVU0=
github.com/jandelgado/gcov2lcov v1.0.5/go.mod h1:NnSxK6TMlg1oGDBfGelGbjgorT5/L3cchlbtgFYZSss=
-github.com/jcchavezs/porto v0.1.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A=
-github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
-github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU=
-github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
-github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
-github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak=
-github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
-github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
+github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
-github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
-github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
-github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
-github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
-github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
-github.com/karrick/godirwalk v1.10.9/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
-github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
-github.com/karrick/godirwalk v1.15.3/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
-github.com/karrick/godirwalk v1.15.5/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
-github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
-github.com/knadh/koanf v0.14.1-0.20201201075439-e0853799f9ec/go.mod h1:H5mEFsTeWizwFXHKtsITL5ipsLTuAMQoGuQpp+1JL9U=
-github.com/knadh/koanf v1.2.2/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY=
github.com/knadh/koanf v1.4.4 h1:d2jY5nCCeoaiqvEKSBW9rEc93EfNy/XWgWsSB3j7JEA=
github.com/knadh/koanf v1.4.4/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs=
-github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
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/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
@@ -875,89 +375,34 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
-github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
-github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/looplab/fsm v0.1.0/go.mod h1:m2VaOfDHxqXBBMgc26m6yUOwkFn8H2AlJDE+jd/uafI=
-github.com/luna-duclos/instrumentedsql v0.0.0-20181127104832-b7d587d28109/go.mod h1:PWUIzhtavmOR965zfawVsHXbEuU1G29BPZ/CB3C7jXk=
-github.com/luna-duclos/instrumentedsql v1.1.2/go.mod h1:4LGbEqDnopzNAiyxPPDXhLspyunZxgPTMJBKtC6U0BQ=
-github.com/luna-duclos/instrumentedsql v1.1.3/go.mod h1:9J1njvFds+zN7y85EDhN9XNQLANWwZt2ULeIC8yMNYs=
-github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
-github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
-github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM=
-github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM=
-github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE=
-github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc=
-github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c=
-github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs=
-github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c=
-github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88=
-github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk=
-github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
-github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
-github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI=
-github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI=
-github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc=
-github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
-github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
-github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc=
-github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w=
+github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
+github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
-github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
-github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
-github.com/mattn/goveralls v0.0.6 h1:cr8Y0VMo/MnEZBjxNN/vh6G90SZ7IMb6lms1dzMoO+Y=
-github.com/mattn/goveralls v0.0.6/go.mod h1:h8b4ow6FxSPMQHF6o2ve3qsclnffZjYTNEKmLesRwqw=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/mattn/goveralls v0.0.11 h1:eJXea6R6IFlL1QMKNMzDvvHv/hwGrnvyig4N+0+XiMM=
+github.com/mattn/goveralls v0.0.11/go.mod h1:gU8SyhNswsJKchEV93xRQxX6X3Ei4PJdQk/6ZHvrvRk=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
-github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
-github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
+github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
@@ -965,26 +410,18 @@ github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXx
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
-github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
-github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ=
-github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
@@ -992,104 +429,39 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
-github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/moul/http2curl v0.0.0-20170919181001-9ac6cf4d929b/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
-github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
-github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
-github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
-github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
-github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
-github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
-github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/oleiade/reflections v1.0.0/go.mod h1:RbATFBbKYkVdqmSFtx13Bb/tVhR0lgOBXunWTZKeL4w=
github.com/oleiade/reflections v1.0.1 h1:D1XO3LVEYroYskEsoSiGItp9RUxG6jWnCVvrqH0HHQM=
-github.com/oleiade/reflections v1.0.1/go.mod h1:rdFxbxq4QXVZWj0F+e9jqjDkc7dbp97vkRixKo2JR60=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
-github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
-github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
-github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
-github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
-github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
-github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
-github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
-github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
-github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
-github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
-github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/ory/analytics-go/v4 v4.0.0/go.mod h1:FMx9cLRD9xN+XevPvZ5FDMfignpmcqPP6FUKnJ9/MmE=
-github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs=
-github.com/ory/dockertest/v3 v3.5.4/go.mod h1:J8ZUbNB2FOhm1cFZW9xBpDsODqsSWcyYgtJYVPcnF70=
-github.com/ory/dockertest/v3 v3.6.3/go.mod h1:EFLcVUOl8qCwp9NyDAcCDtq/QviLtYswW/VbWzUnTNE=
-github.com/ory/dockertest/v3 v3.6.5/go.mod h1:iYKQSRlYrt/2s5fJWYdB98kCQG6g/LjBMvzEYii63vg=
-github.com/ory/fosite v0.29.0/go.mod h1:0atSZmXO7CAcs6NPMI/Qtot8tmZYj04Nddoold4S2h0=
-github.com/ory/fosite v0.42.2 h1:fKfGAgMmmeM1C0DXCyt5TOzQWrKmLOL+PApEC4bIv2o=
-github.com/ory/fosite v0.42.2/go.mod h1:qggrqm3ZWQF9i2f/d3RLH5mHHPtv44hsiltkVKLsCYo=
-github.com/ory/go-acc v0.0.0-20181118080137-ddc355013f90/go.mod h1:sxnvPCxChFuSmTJGj8FdMupeq1BezCiEpDjTUXQ4hf4=
-github.com/ory/go-acc v0.2.6 h1:YfI+L9dxI7QCtWn2RbawqO0vXhiThdXu/RgizJBbaq0=
+github.com/ory/fosite v0.43.0 h1:9H1O3I7CFxS2Y6j9FDAx2W3I5uAyEubc9hECS0UTOgI=
+github.com/ory/fosite v0.43.0/go.mod h1:BTd8+oG1mRtezZbQq0S4D2HBc815bedZHjjs2KRs39Y=
github.com/ory/go-acc v0.2.6/go.mod h1:4Kb/UnPcT8qRAk3IAxta+hvVapdxTLWtrr7bFLlEgpw=
+github.com/ory/go-acc v0.2.8 h1:rOHHAPQjf0u7eHFGWpiXK+gIu/e0GRSJNr9pDukdNC4=
+github.com/ory/go-acc v0.2.8/go.mod h1:iCRZUdGb/7nqvSn8xWZkhfVrtXRZ9Wru2E5rabCjFPI=
github.com/ory/go-convenience v0.1.0 h1:zouLKfF2GoSGnJwGq+PE/nJAE6dj2Zj5QlTgmMTsTS8=
github.com/ory/go-convenience v0.1.0/go.mod h1:uEY/a60PL5c12nYz4V5cHY03IBmwIAEm8TWB0yn9KNs=
-github.com/ory/gojsonreference v0.0.0-20190720135523-6b606c2d8ee8/go.mod h1:wsH1C4nIeeQClDtD5AH7kF1uTS6zWyqfjVDTmB0Em7A=
-github.com/ory/gojsonschema v1.1.1-0.20190919112458-f254ca73d5e9/go.mod h1:BNZpdJgB74KOLSsWFvzw6roXg1I6O51WO8roMmW+T7Y=
-github.com/ory/herodot v0.6.2/go.mod h1:3BOneqcyBsVybCPAJoi92KN2BpJHcmDqAMcAAaJiJow=
-github.com/ory/herodot v0.7.0/go.mod h1:YXKOfAXYdQojDP5sD8m0ajowq3+QXNdtxA+QiUXBwn0=
-github.com/ory/herodot v0.8.3/go.mod h1:rvLjxOAlU5omtmgjCfazQX2N82EpMfl3BytBWc1jjsk=
-github.com/ory/herodot v0.9.2/go.mod h1:Da2HXR8mpwPbPrH+Gv9qV8mM5gI3v+PoJ69BA4l2RAk=
-github.com/ory/herodot v0.9.6/go.mod h1:g3yAI/d6wPdGnOt3dbYUj5JGTZBNuUVLuuDqHnfc1lM=
github.com/ory/herodot v0.9.13 h1:cN/Z4eOkErl/9W7hDIDLb79IO/bfsH+8yscBjRpB4IU=
github.com/ory/herodot v0.9.13/go.mod h1:IWDs9kSvFQqw/cQ8zi5ksyYvITiUU4dI7glUrhZcJYo=
-github.com/ory/jsonschema/v3 v3.0.1/go.mod h1:jgLHekkFk0uiGdEWGleC+tOm6JSSP8cbf17PnBuGXlw=
-github.com/ory/jsonschema/v3 v3.0.3/go.mod h1:JvXwbx7IxAkIAo7Qo5OSC1lea+w12DtYGV8h+MTAfnA=
-github.com/ory/viper v1.5.6/go.mod h1:TYmpFpKLxjQwvT4f0QPpkOn4sDXU1kDgAwJpgLYiQ28=
-github.com/ory/viper v1.7.4/go.mod h1:T6sodNZKNGPpashUOk7EtXz2isovz8oCd57GNVkkNmE=
github.com/ory/viper v1.7.5 h1:+xVdq7SU3e1vNaCsk/ixsfxE4zylk1TJUiJrY647jUE=
github.com/ory/viper v1.7.5/go.mod h1:ypOuyJmEUb3oENywQZRgeAMwqgOyDqwboO1tj3DjTaM=
-github.com/ory/x v0.0.84/go.mod h1:RXLPBG7B+hAViONVg0sHwK+U/ie1Y/NeXrq1JcARfoE=
-github.com/ory/x v0.0.93/go.mod h1:lfcTaGXpTZs7IEQAW00r9EtTCOxD//SiP5uWtNiz31g=
-github.com/ory/x v0.0.110/go.mod h1:DJfkE3GdakhshNhw4zlKoRaL/ozg/lcTahA9OCih2BE=
-github.com/ory/x v0.0.127/go.mod h1:FwUujfFuCj5d+xgLn4fGMYPnzriR5bdAIulFXMtnK0M=
-github.com/ory/x v0.0.205/go.mod h1:A1s4iwmFIppRXZLF3J9GGWeY/HpREVm0Dk5z/787iek=
-github.com/ory/x v0.0.214/go.mod h1:aRl57gzyD4GF0HQCekovXhv0xTZgAgiht3o8eVhsm9Q=
-github.com/ory/x v0.0.288 h1:WoEEgDg2QrJeNpPRXV9J19ZkHfxXEjO5oJA5Fm/tPs0=
-github.com/ory/x v0.0.288/go.mod h1:APpShLyJcVzKw1kTgrHI+j/L9YM+8BRjHlcYObc7C1U=
+github.com/ory/x v0.0.507 h1:y1mFaDMIDVDHLeMJcmKNYvm8UUqY6w46TdUEvPFVwPs=
+github.com/ory/x v0.0.507/go.mod h1:xUtRpoiRARyJNPVk/fcCNKzyp25Foxt9GPlj8pd7egY=
github.com/otiai10/copy v1.9.0 h1:7KFNiCgZ91Ru4qW4CWPf/7jqtxLagGRmIxWldPP9VY4=
github.com/otiai10/copy v1.9.0/go.mod h1:hsfX19wcn0UWIHUQ3/4fHuehhk2UyArQ9dVFAn3FczI=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
@@ -1097,36 +469,26 @@ github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
github.com/otiai10/mint v1.4.0 h1:umwcf7gbpEwf7WFzqmWwSv0CzbeMsae2u9ZvpP8j2q4=
github.com/otiai10/mint v1.4.0/go.mod h1:gifjb2MYOoULtKLqUAEILUG/9KONW6f7YsJ6vQLTlFI=
-github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
-github.com/parnurzeal/gorequest v0.2.15/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw=
github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
-github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
-github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
-github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
-github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
+github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
+github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
-github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ=
github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
-github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
-github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
+github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
@@ -1134,69 +496,42 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg
github.com/pquerna/otp v1.3.0 h1:oJV/SkzR33anKXwQU3Of42rL4wbrffP4uvUf1SvS5Xs=
github.com/pquerna/otp v1.3.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-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
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.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE=
github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
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/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
-github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
-github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
-github.com/rhnvrm/simples3 v0.5.0/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w=
-github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
-github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
-github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
-github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
-github.com/rubenv/sql-migrate v0.0.0-20190212093014-1007f53448d7/go.mod h1:WS0rl9eEliYI8DPnr3TOwz4439pay+qNgzJoVya/DmY=
+github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -1204,151 +539,68 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
-github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
-github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4=
-github.com/santhosh-tekuri/jsonschema/v2 v2.1.0/go.mod h1:yzJzKUGV4RbWqWIBBP4wSOBqavX5saE02yirLS0OTyg=
-github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/savsgio/dictpool v0.0.0-20220406081701-03de5edb2e6d h1:ICMDEgNgR5xFW6ZDeMKTtmh07YiLr7GkDw897I2DwKg=
github.com/savsgio/dictpool v0.0.0-20220406081701-03de5edb2e6d/go.mod h1:jrsy/bTK2n5uybo7bAvtLGzmuzAbxp+nKS8bzgrZURE=
github.com/savsgio/gotils v0.0.0-20220401102855-e56b59f40436/go.mod h1:Gy+0tqhJvgGlqnTF8CVGP0AaGRjwBtXs/a5PA0Y3+A4=
github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d h1:Q+gqLBOPkFGHyCJxXMRqtUgUbTjI8/Ze8vu8GGyNFwo=
github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d/go.mod h1:Gy+0tqhJvgGlqnTF8CVGP0AaGRjwBtXs/a5PA0Y3+A4=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/seatgeek/logrus-gelf-formatter v0.0.0-20210219220335-367fa274be2c/go.mod h1:/THDZYi7F/BsVEcYzYPqdcWFQ+1C2InkawTKfLOAnzg=
-github.com/seatgeek/logrus-gelf-formatter v0.0.0-20210414080842-5b05eb8ff761/go.mod h1:/THDZYi7F/BsVEcYzYPqdcWFQ+1C2InkawTKfLOAnzg=
-github.com/segmentio/analytics-go v3.0.1+incompatible/go.mod h1:C7CYBtQWk4vRk2RyLu0qOcbHJ18E3F1HV2C/8JvKN48=
-github.com/segmentio/analytics-go v3.1.0+incompatible/go.mod h1:C7CYBtQWk4vRk2RyLu0qOcbHJ18E3F1HV2C/8JvKN48=
-github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c/go.mod h1:kJ9mm9YmoWSkk+oQ+5Cj8DEoRCX2JT6As4kEtIIOp1M=
-github.com/segmentio/backo-go v0.0.0-20200129164019-23eae7c10bd3/go.mod h1:9/Rh6yILuLysoQnZ2oNooD2g7aBnvM7r/fNVxRNWfBc=
-github.com/segmentio/conf v1.2.0/go.mod h1:Y3B9O/PqqWqjyxyWWseyj/quPEtMu1zDp/kVbSWWaB0=
-github.com/segmentio/go-snakecase v1.1.0/go.mod h1:jk1miR5MS7Na32PZUykG89Arm+1BUSYhuGR6b7+hJto=
-github.com/segmentio/objconv v1.0.1/go.mod h1:auayaH5k3137Cl4SoXTgrzQcuQDmvuVtZgS0fb1Ahys=
-github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs=
-github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
-github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
-github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
-github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
-github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
-github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU=
-github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag=
-github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ=
-github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A=
-github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
-github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
-github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
-github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
-github.com/spf13/afero v1.5.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
-github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
-github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
-github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
+github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw=
+github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cast v1.3.2-0.20200723214538-8d17101741c8/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
-github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
-github.com/spf13/cobra v0.0.7/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
-github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
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.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI=
-github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
-github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
-github.com/sqs/goreturns v0.0.0-20181028201513-538ac6014518/go.mod h1:CKI4AZ4XmGV240rTHfO0hfE83S6/a3/Q1siZJ/vXf7A=
-github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693/go.mod h1:6hSY48PjDm4UObWmGLyJE9DxYVKTgR9kbCspXXJEhcU=
-github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
-github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
-github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
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/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/subosito/gotenv v1.1.1/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
+github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE=
github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU=
-github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls=
-github.com/tidwall/gjson v1.6.8/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI=
-github.com/tidwall/gjson v1.7.1/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk=
-github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
-github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tidwall/sjson v1.0.4/go.mod h1:bURseu1nuBkFpIES5cz6zBtjmYeOQmEESshn7VpF15Y=
-github.com/tidwall/sjson v1.1.5/go.mod h1:VuJzsZnTowhSxWdOgsAnb886i4AjEyTkk7tNtsL7EYE=
-github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw=
github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/trustelem/zxcvbn v1.0.1 h1:mp4JFtzdDYGj9WYSD3KQSkwwUumWNFzXaAjckaTYpsc=
github.com/trustelem/zxcvbn v1.0.1/go.mod h1:zonUyKeh7sw6psPf/e3DtRqkRyZvAbOfjNz/aO7YQ5s=
-github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
-github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
-github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
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/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
-github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
-github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
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/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I=
@@ -1357,12 +609,8 @@ github.com/valyala/fasthttp v1.41.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seB
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
-github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
-github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
-github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c/go.mod h1:UrdRz5enIKZ63MEE3IF9l2/ebyx59GyGgPi+tICQdmM=
github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ=
github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18=
github.com/ysmood/got v0.31.3 h1:UvvF+TDVsZLO7MSzm/Bd/H4HVp+7S5YwsxgdwaKq8uA=
@@ -1379,115 +627,40 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
-github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
-go.elastic.co/apm v1.8.0/go.mod h1:tCw6CkOJgkWnzEthFN9HUP1uL3Gjc/Ur6m7gRPLaoH0=
-go.elastic.co/apm v1.13.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY=
-go.elastic.co/apm/module/apmhttp v1.8.0/go.mod h1:9LPFlEON51/lRbnWDfqAWErihIiAFDUMfMV27YjoWQ8=
-go.elastic.co/apm/module/apmhttp v1.13.0/go.mod h1:DSiQ5MvOgy/VP0WaPkJ17TXxQai//SfvhKfbndVVXNc=
-go.elastic.co/apm/module/apmot v1.8.0/go.mod h1:Q5Xzabte8G/fkvDjr1jlDuOSUt9hkVWNZEHh6ZNaTjI=
-go.elastic.co/apm/module/apmot v1.13.0/go.mod h1:3cbev1aAjRfJmWAVgqTO0iec2RsGRx6/HrEcIp4nyaQ=
-go.elastic.co/fastjson v1.0.0/go.mod h1:PmeUOMMtLHQr9ZS9J9owrAVg0FkaZDRZJEFTTGHtchs=
-go.elastic.co/fastjson v1.1.0/go.mod h1:boNGISWMjQsUPy/t6yqt2/1Wx4YNPSe+mZjlyw9vKKI=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
-go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
-go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
-go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
-go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opentelemetry.io/contrib v0.18.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
-go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
-go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.13.0/go.mod h1:TwTkyRaTam1pOIb2wxcAiC2hkMVbokXkt6DEt5nDkD8=
-go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.18.0/go.mod h1:iK1G0FgHurSJ/aYLg5LpnPI0pqdanM73S3dhyDp0Lk4=
-go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.20.0/go.mod h1:OFd9uK8rOqNvUtgeLz7/5MeIRDZPPbjnVdN4jK80j10=
-go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY=
-go.opentelemetry.io/otel v0.18.0/go.mod h1:PT5zQj4lTsR1YeARt8YNKcFb88/c2IKoSABK9mX0r78=
-go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
-go.opentelemetry.io/otel/metric v0.18.0/go.mod h1:kEH2QtzAyBy3xDVQfGZKIcok4ZZFvd5xyKPfPcuK6pE=
-go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
-go.opentelemetry.io/otel/oteltest v0.18.0/go.mod h1:NyierCU3/G8DLTva7KRzGii2fdxdR89zXKH1bNWY7Bo=
-go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
-go.opentelemetry.io/otel/trace v0.18.0/go.mod h1:FzdUu3BPwZSZebfQ1vl5/tAa8LyMLXSJN57AXIt/iDk=
-go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
+go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
-go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
-go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
-golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20180830192347-182538f80094/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/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-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
-golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200320181102-891825fb96df/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
-golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
@@ -1496,7 +669,6 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1519,31 +691,19 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=
+golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180816102801-aaf60122140d/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-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181207154023-610586996380/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-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -1553,14 +713,10 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200219183655-46282727080f/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -1570,11 +726,13 @@ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
@@ -1588,11 +746,14 @@ golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfS
golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20181003184128-c57b0facaced/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
@@ -1600,7 +761,6 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1610,66 +770,38 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/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-20180831094639-fa5fdf94c789/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-20180906133057-8cf3aee42992/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-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/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-20181122145206-62eef0e2fa9b/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-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1686,18 +818,20 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1706,12 +840,13 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM=
@@ -1722,130 +857,79 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/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-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190613204242-ed0dc450797f/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190624190245-7f2218787638/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190711191110-9a621aea19f8/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191224055732-dd894d0a8a40/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200203215610-ab391d50b528/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200308013534-11ec41452d41/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
-golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=
+golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
-gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
-gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
-gonum.org/v1/netlib v0.0.0-20191229114700-bbb4dff026f8/go.mod h1:2IgXn/sJaRbePPBA1wRj8OE+QLvVaH0q8SK6TSTKlnk=
-gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
-gonum.org/v1/plot v0.0.0-20200111075622-4abb28f724d5/go.mod h1:+HbaZVpsa73UwN7kXGCECULRHovLRJjH+t5cFPgxErs=
-google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -1862,23 +946,23 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
+google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
+google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
-google.golang.org/genproto v0.0.0-20190626174449-989357319d63/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
-google.golang.org/genproto v0.0.0-20190708153700-3bdd9d9f5532/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
@@ -1905,21 +989,24 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0=
-google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 h1:GEgb2jF5zxsFJpJfg9RoDDWm7tiwc/DDSTE2BtLUkXU=
+google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
-google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
@@ -1928,12 +1015,17 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-google.golang.org/grpc v1.42.0 h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A=
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
+google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=
+google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc/examples v0.0.0-20210304020650-930c79186c99 h1:qA8rMbz1wQ4DOFfM2ouD29DG9aHWBm6ZOy9BGxiUMmY=
google.golang.org/grpc/examples v0.0.0-20210304020650-930c79186c99/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
@@ -1951,68 +1043,38 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/DataDog/dd-trace-go.v1 v1.27.0/go.mod h1:Sp1lku8WJMvNV0kjDI4Ni/T7J/U3BO5ct5kEaoVU8+I=
-gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
-gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
-gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
-gopkg.in/go-playground/mold.v2 v2.2.0/go.mod h1:XMyyRsGtakkDPbxXbrA5VODo6bUXyvoDjLd5l3T0XoA=
-gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
-gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw=
-gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/ini.v1 v1.55.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
-gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
-gopkg.in/square/go-jose.v2 v2.1.9/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/square/go-jose.v2 v2.5.2-0.20210529014059-a5c7eec3c614/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI=
gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
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/validator.v2 v2.0.0-20180514200540-135c24b11c19/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/driver/postgres v1.0.8/go.mod h1:4eOzrI1MUfm6ObJU/UcmbXyiHSs8jSwH95G5P5dxcAg=
-gorm.io/gorm v1.20.12/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
-gorm.io/gorm v1.21.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
-gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
-gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
-honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -2020,16 +1082,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
-modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
-modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
-modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
-modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
-modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/internal/handlers/handler_oauth_introspection.go b/internal/handlers/handler_oauth_introspection.go
index a131f7398..0a86774bf 100644
--- a/internal/handlers/handler_oauth_introspection.go
+++ b/internal/handlers/handler_oauth_introspection.go
@@ -25,7 +25,7 @@ func OAuthIntrospectionPOST(ctx *middlewares.AutheliaCtx, rw http.ResponseWriter
ctx.Logger.Errorf("Introspection Request failed with error: %s", rfc.WithExposeDebug(true).GetDescription())
- ctx.Providers.OpenIDConnect.WriteIntrospectionError(rw, err)
+ ctx.Providers.OpenIDConnect.WriteIntrospectionError(ctx, rw, err)
return
}
@@ -34,5 +34,5 @@ func OAuthIntrospectionPOST(ctx *middlewares.AutheliaCtx, rw http.ResponseWriter
ctx.Logger.Tracef("Introspection Request yeilded a %s (active: %t) requested at %s created with request id '%s' on client with id '%s'", responder.GetTokenUse(), responder.IsActive(), requester.GetRequestedAt().String(), requester.GetID(), requester.GetClient().GetID())
- ctx.Providers.OpenIDConnect.WriteIntrospectionResponse(rw, responder)
+ ctx.Providers.OpenIDConnect.WriteIntrospectionResponse(ctx, rw, responder)
}
diff --git a/internal/handlers/handler_oauth_revocation.go b/internal/handlers/handler_oauth_revocation.go
index 89d423311..b09ba6c44 100644
--- a/internal/handlers/handler_oauth_revocation.go
+++ b/internal/handlers/handler_oauth_revocation.go
@@ -20,5 +20,5 @@ func OAuthRevocationPOST(ctx *middlewares.AutheliaCtx, rw http.ResponseWriter, r
ctx.Logger.Errorf("Revocation Request failed with error: %s", rfc.WithExposeDebug(true).GetDescription())
}
- ctx.Providers.OpenIDConnect.WriteRevocationResponse(rw, err)
+ ctx.Providers.OpenIDConnect.WriteRevocationResponse(ctx, rw, err)
}
diff --git a/internal/handlers/handler_oidc_authorization.go b/internal/handlers/handler_oidc_authorization.go
index df919e074..567999e01 100644
--- a/internal/handlers/handler_oidc_authorization.go
+++ b/internal/handlers/handler_oidc_authorization.go
@@ -31,7 +31,7 @@ func OpenIDConnectAuthorization(ctx *middlewares.AutheliaCtx, rw http.ResponseWr
ctx.Logger.Errorf("Authorization Request failed with error: %s", rfc.WithExposeDebug(true).GetDescription())
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, err)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, err)
return
}
@@ -47,7 +47,7 @@ func OpenIDConnectAuthorization(ctx *middlewares.AutheliaCtx, rw http.ResponseWr
ctx.Logger.Errorf("Authorization Request with id '%s' on client with id '%s' could not be processed: failed to find client: %+v", requester.GetID(), clientID, err)
}
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, err)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, err)
return
}
@@ -55,7 +55,7 @@ func OpenIDConnectAuthorization(ctx *middlewares.AutheliaCtx, rw http.ResponseWr
if issuer, err = ctx.IssuerURL(); err != nil {
ctx.Logger.Errorf("Authorization Request with id '%s' on client with id '%s' could not be processed: error occurred determining issuer: %+v", requester.GetID(), clientID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrIssuerCouldNotDerive)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrIssuerCouldNotDerive)
return
}
@@ -76,7 +76,7 @@ func OpenIDConnectAuthorization(ctx *middlewares.AutheliaCtx, rw http.ResponseWr
if authTime, err = userSession.AuthenticatedTime(client.Policy); err != nil {
ctx.Logger.Errorf("Authorization Request with id '%s' on client with id '%s' could not be processed: error occurred checking authentication time: %+v", requester.GetID(), client.GetID(), err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, fosite.ErrServerError.WithHint("Could not obtain the authentication time."))
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, fosite.ErrServerError.WithHint("Could not obtain the authentication time."))
return
}
@@ -94,7 +94,7 @@ func OpenIDConnectAuthorization(ctx *middlewares.AutheliaCtx, rw http.ResponseWr
ctx.Logger.Errorf("Authorization Response for Request with id '%s' on client with id '%s' could not be created: %s", requester.GetID(), clientID, rfc.WithExposeDebug(true).GetDescription())
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, err)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, err)
return
}
@@ -102,10 +102,10 @@ func OpenIDConnectAuthorization(ctx *middlewares.AutheliaCtx, rw http.ResponseWr
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSessionGranted(ctx, consent.ID); err != nil {
ctx.Logger.Errorf("Authorization Request with id '%s' on client with id '%s' could not be processed: error occurred saving consent session: %+v", requester.GetID(), client.GetID(), err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return
}
- ctx.Providers.OpenIDConnect.WriteAuthorizeResponse(rw, requester, responder)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeResponse(ctx, rw, requester, responder)
}
diff --git a/internal/handlers/handler_oidc_authorization_consent.go b/internal/handlers/handler_oidc_authorization_consent.go
index 04dfacbb1..9d366cb0b 100644
--- a/internal/handlers/handler_oidc_authorization_consent.go
+++ b/internal/handlers/handler_oidc_authorization_consent.go
@@ -37,7 +37,7 @@ func handleOIDCAuthorizationConsent(ctx *middlewares.AutheliaCtx, issuer *url.UR
if subject, err = ctx.Providers.OpenIDConnect.GetSubject(ctx, client.GetSectorIdentifier(), userSession.Username); err != nil {
ctx.Logger.Errorf(logFmtErrConsentCantGetSubject, requester.GetID(), client.GetID(), client.Consent, userSession.Username, client.GetSectorIdentifier(), err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrSubjectCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrSubjectCouldNotLookup)
return nil, true
}
@@ -52,7 +52,7 @@ func handleOIDCAuthorizationConsent(ctx *middlewares.AutheliaCtx, issuer *url.UR
default:
ctx.Logger.Errorf(logFmtErrConsentCantDetermineConsentMode, requester.GetID(), client.GetID())
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, fosite.ErrServerError.WithHint("Could not determine the client consent mode."))
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, fosite.ErrServerError.WithHint("Could not determine the client consent mode."))
return nil, true
}
@@ -60,7 +60,7 @@ func handleOIDCAuthorizationConsent(ctx *middlewares.AutheliaCtx, issuer *url.UR
if subject, err = ctx.Providers.OpenIDConnect.GetSubject(ctx, client.GetSectorIdentifier(), userSession.Username); err != nil {
ctx.Logger.Errorf(logFmtErrConsentCantGetSubject, requester.GetID(), client.GetID(), client.Consent, userSession.Username, client.GetSectorIdentifier(), err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrSubjectCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrSubjectCouldNotLookup)
return nil, true
}
@@ -93,7 +93,7 @@ func handleOIDCAuthorizationConsentGenerate(ctx *middlewares.AutheliaCtx, issuer
if len(ctx.QueryArgs().PeekBytes(qryArgConsentID)) != 0 {
ctx.Logger.Errorf(logFmtErrConsentGenerateError, requester.GetID(), client.GetID(), client.Consent, "generating", errors.New("consent id value was present when it should be absent"))
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotGenerate)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotGenerate)
return nil, true
}
@@ -101,7 +101,7 @@ func handleOIDCAuthorizationConsentGenerate(ctx *middlewares.AutheliaCtx, issuer
if consent, err = model.NewOAuth2ConsentSession(subject, requester); err != nil {
ctx.Logger.Errorf(logFmtErrConsentGenerateError, requester.GetID(), client.GetID(), client.Consent, "generating", err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotGenerate)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotGenerate)
return nil, true
}
@@ -109,7 +109,7 @@ func handleOIDCAuthorizationConsentGenerate(ctx *middlewares.AutheliaCtx, issuer
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSession(ctx, *consent); err != nil {
ctx.Logger.Errorf(logFmtErrConsentGenerateError, requester.GetID(), client.GetID(), client.Consent, "saving", err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
diff --git a/internal/handlers/handler_oidc_authorization_consent_explicit.go b/internal/handlers/handler_oidc_authorization_consent_explicit.go
index c6aed268c..9388c74d8 100644
--- a/internal/handlers/handler_oidc_authorization_consent_explicit.go
+++ b/internal/handlers/handler_oidc_authorization_consent_explicit.go
@@ -30,7 +30,7 @@ func handleOIDCAuthorizationConsentModeExplicit(ctx *middlewares.AutheliaCtx, is
if consentID, err = uuid.ParseBytes(bytesConsentID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentParseChallengeID, requester.GetID(), client.GetID(), client.Consent, bytesConsentID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentMalformedChallengeID)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentMalformedChallengeID)
return nil, true
}
@@ -49,7 +49,7 @@ func handleOIDCAuthorizationConsentModeExplicitWithID(ctx *middlewares.AutheliaC
if consentID.ID() == 0 {
ctx.Logger.Errorf(logFmtErrConsentZeroID, requester.GetID(), client.GetID(), client.Consent)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -57,7 +57,7 @@ func handleOIDCAuthorizationConsentModeExplicitWithID(ctx *middlewares.AutheliaC
if consent, err = ctx.Providers.StorageProvider.LoadOAuth2ConsentSessionByChallengeID(ctx, consentID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentLookupLoadingSession, requester.GetID(), client.GetID(), client.Consent, consentID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -65,7 +65,7 @@ func handleOIDCAuthorizationConsentModeExplicitWithID(ctx *middlewares.AutheliaC
if subject.ID() != consent.Subject.UUID.ID() {
ctx.Logger.Errorf(logFmtErrConsentSessionSubjectNotAuthorized, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, userSession.Username, subject, consent.Subject.UUID)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -73,7 +73,7 @@ func handleOIDCAuthorizationConsentModeExplicitWithID(ctx *middlewares.AutheliaC
if !consent.CanGrant() {
ctx.Logger.Errorf(logFmtErrConsentCantGrant, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, "explicit")
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotPerform)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotPerform)
return nil, true
}
@@ -82,7 +82,7 @@ func handleOIDCAuthorizationConsentModeExplicitWithID(ctx *middlewares.AutheliaC
if consent.Responded() {
ctx.Logger.Errorf(logFmtErrConsentCantGrantRejected, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, fosite.ErrAccessDenied)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, fosite.ErrAccessDenied)
return nil, true
}
diff --git a/internal/handlers/handler_oidc_authorization_consent_implicit.go b/internal/handlers/handler_oidc_authorization_consent_implicit.go
index b9017f9b8..5ec5b3ad1 100644
--- a/internal/handlers/handler_oidc_authorization_consent_implicit.go
+++ b/internal/handlers/handler_oidc_authorization_consent_implicit.go
@@ -28,7 +28,7 @@ func handleOIDCAuthorizationConsentModeImplicit(ctx *middlewares.AutheliaCtx, is
if consentID, err = uuid.ParseBytes(bytesConsentID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentParseChallengeID, requester.GetID(), client.GetID(), client.Consent, bytesConsentID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentMalformedChallengeID)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentMalformedChallengeID)
return nil, true
}
@@ -47,7 +47,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithID(ctx *middlewares.AutheliaC
if consentID.ID() == 0 {
ctx.Logger.Errorf(logFmtErrConsentZeroID, requester.GetID(), client.GetID(), client.Consent)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -55,7 +55,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithID(ctx *middlewares.AutheliaC
if consent, err = ctx.Providers.StorageProvider.LoadOAuth2ConsentSessionByChallengeID(ctx, consentID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentLookupLoadingSession, requester.GetID(), client.GetID(), client.Consent, consentID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -63,7 +63,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithID(ctx *middlewares.AutheliaC
if subject.ID() != consent.Subject.UUID.ID() {
ctx.Logger.Errorf(logFmtErrConsentSessionSubjectNotAuthorized, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, userSession.Username, subject, consent.Subject.UUID)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -71,7 +71,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithID(ctx *middlewares.AutheliaC
if !consent.CanGrant() {
ctx.Logger.Errorf(logFmtErrConsentCantGrant, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, "implicit")
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotPerform)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotPerform)
return nil, true
}
@@ -81,7 +81,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithID(ctx *middlewares.AutheliaC
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSessionResponse(ctx, *consent, false); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSessionResponse, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
@@ -99,7 +99,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithoutID(ctx *middlewares.Authel
if consent, err = model.NewOAuth2ConsentSession(subject, requester); err != nil {
ctx.Logger.Errorf(logFmtErrConsentGenerate, requester.GetID(), client.GetID(), client.Consent, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotGenerate)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotGenerate)
return nil, true
}
@@ -107,7 +107,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithoutID(ctx *middlewares.Authel
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSession(ctx, *consent); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSession, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
@@ -115,7 +115,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithoutID(ctx *middlewares.Authel
if consent, err = ctx.Providers.StorageProvider.LoadOAuth2ConsentSessionByChallengeID(ctx, consent.ChallengeID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSession, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
@@ -125,7 +125,7 @@ func handleOIDCAuthorizationConsentModeImplicitWithoutID(ctx *middlewares.Authel
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSessionResponse(ctx, *consent, false); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSessionResponse, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
diff --git a/internal/handlers/handler_oidc_authorization_consent_pre_configured.go b/internal/handlers/handler_oidc_authorization_consent_pre_configured.go
index e8dbdbc0d..0b8b26229 100644
--- a/internal/handlers/handler_oidc_authorization_consent_pre_configured.go
+++ b/internal/handlers/handler_oidc_authorization_consent_pre_configured.go
@@ -34,7 +34,7 @@ func handleOIDCAuthorizationConsentModePreConfigured(ctx *middlewares.AutheliaCt
if consentID, err = uuid.ParseBytes(bytesConsentID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentParseChallengeID, requester.GetID(), client.GetID(), client.Consent, bytesConsentID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentMalformedChallengeID)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentMalformedChallengeID)
return nil, true
}
@@ -54,7 +54,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if consentID.ID() == 0 {
ctx.Logger.Errorf(logFmtErrConsentZeroID, requester.GetID(), client.GetID(), client.Consent)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -62,7 +62,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if consent, err = ctx.Providers.StorageProvider.LoadOAuth2ConsentSessionByChallengeID(ctx, consentID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentLookupLoadingSession, requester.GetID(), client.GetID(), client.Consent, consentID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -70,7 +70,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if subject.ID() != consent.Subject.UUID.ID() {
ctx.Logger.Errorf(logFmtErrConsentSessionSubjectNotAuthorized, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, userSession.Username, subject, consent.Subject.UUID)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -78,7 +78,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if !consent.CanGrant() {
ctx.Logger.Errorf(logFmtErrConsentCantGrantPreConf, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotPerform)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotPerform)
return nil, true
}
@@ -86,7 +86,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if config, err = handleOIDCAuthorizationConsentModePreConfiguredGetPreConfig(ctx, client, subject, requester); err != nil {
ctx.Logger.Errorf(logFmtErrConsentPreConfLookup, requester.GetID(), client.GetID(), client.Consent, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -99,7 +99,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSessionResponse(ctx, *consent, false); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSessionResponse, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
@@ -111,7 +111,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithID(ctx *middlewares.Auth
if consent.Responded() {
ctx.Logger.Errorf(logFmtErrConsentCantGrantRejected, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, fosite.ErrAccessDenied)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, fosite.ErrAccessDenied)
return nil, true
}
@@ -135,7 +135,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithoutID(ctx *middlewares.A
if config, err = handleOIDCAuthorizationConsentModePreConfiguredGetPreConfig(ctx, client, subject, requester); err != nil {
ctx.Logger.Errorf(logFmtErrConsentPreConfLookup, requester.GetID(), client.GetID(), client.Consent, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotLookup)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotLookup)
return nil, true
}
@@ -147,7 +147,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithoutID(ctx *middlewares.A
if consent, err = model.NewOAuth2ConsentSession(subject, requester); err != nil {
ctx.Logger.Errorf(logFmtErrConsentGenerate, requester.GetID(), client.GetID(), client.Consent, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotGenerate)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotGenerate)
return nil, true
}
@@ -155,7 +155,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithoutID(ctx *middlewares.A
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSession(ctx, *consent); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSession, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
@@ -163,7 +163,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithoutID(ctx *middlewares.A
if consent, err = ctx.Providers.StorageProvider.LoadOAuth2ConsentSessionByChallengeID(ctx, consent.ChallengeID); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSession, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
@@ -175,7 +175,7 @@ func handleOIDCAuthorizationConsentModePreConfiguredWithoutID(ctx *middlewares.A
if err = ctx.Providers.StorageProvider.SaveOAuth2ConsentSessionResponse(ctx, *consent, false); err != nil {
ctx.Logger.Errorf(logFmtErrConsentSaveSessionResponse, requester.GetID(), client.GetID(), client.Consent, consent.ChallengeID, err)
- ctx.Providers.OpenIDConnect.WriteAuthorizeError(rw, requester, oidc.ErrConsentCouldNotSave)
+ ctx.Providers.OpenIDConnect.WriteAuthorizeError(ctx, rw, requester, oidc.ErrConsentCouldNotSave)
return nil, true
}
diff --git a/internal/handlers/handler_oidc_token.go b/internal/handlers/handler_oidc_token.go
index b7fe94efe..a60aaf0c3 100644
--- a/internal/handlers/handler_oidc_token.go
+++ b/internal/handlers/handler_oidc_token.go
@@ -26,7 +26,7 @@ func OpenIDConnectTokenPOST(ctx *middlewares.AutheliaCtx, rw http.ResponseWriter
ctx.Logger.Errorf("Access Request failed with error: %s", rfc.WithExposeDebug(true).GetDescription())
- ctx.Providers.OpenIDConnect.WriteAccessError(rw, requester, err)
+ ctx.Providers.OpenIDConnect.WriteAccessError(ctx, rw, requester, err)
return
}
@@ -51,7 +51,7 @@ func OpenIDConnectTokenPOST(ctx *middlewares.AutheliaCtx, rw http.ResponseWriter
ctx.Logger.Errorf("Access Response for Request with id '%s' failed to be created with error: %s", requester.GetID(), rfc.WithExposeDebug(true).GetDescription())
- ctx.Providers.OpenIDConnect.WriteAccessError(rw, requester, err)
+ ctx.Providers.OpenIDConnect.WriteAccessError(ctx, rw, requester, err)
return
}
@@ -60,5 +60,5 @@ func OpenIDConnectTokenPOST(ctx *middlewares.AutheliaCtx, rw http.ResponseWriter
ctx.Logger.Tracef("Access Request with id '%s' on client with id '%s' produced the following claims: %+v", requester.GetID(), client.GetID(), responder.ToMap())
- ctx.Providers.OpenIDConnect.WriteAccessResponse(rw, requester, responder)
+ ctx.Providers.OpenIDConnect.WriteAccessResponse(ctx, rw, requester, responder)
}
diff --git a/internal/oidc/config.go b/internal/oidc/config.go
new file mode 100644
index 000000000..5be51eed8
--- /dev/null
+++ b/internal/oidc/config.go
@@ -0,0 +1,583 @@
+package oidc
+
+import (
+ "context"
+ "crypto/sha512"
+ "hash"
+ "html/template"
+ "net/url"
+ "time"
+
+ "github.com/hashicorp/go-retryablehttp"
+ "github.com/ory/fosite"
+ "github.com/ory/fosite/handler/oauth2"
+ "github.com/ory/fosite/handler/openid"
+ "github.com/ory/fosite/handler/par"
+ "github.com/ory/fosite/handler/pkce"
+ "github.com/ory/fosite/i18n"
+ "github.com/ory/fosite/token/hmac"
+ "github.com/ory/fosite/token/jwt"
+
+ "github.com/authelia/authelia/v4/internal/configuration/schema"
+ "github.com/authelia/authelia/v4/internal/utils"
+)
+
+func NewConfig(config *schema.OpenIDConnectConfiguration) *Config {
+ c := &Config{
+ GlobalSecret: []byte(utils.HashSHA256FromString(config.HMACSecret)),
+ SendDebugMessagesToClients: config.EnableClientDebugMessages,
+ MinParameterEntropy: config.MinimumParameterEntropy,
+ Lifespans: LifespanConfig{
+ AccessToken: config.AccessTokenLifespan,
+ AuthorizeCode: config.AuthorizeCodeLifespan,
+ IDToken: config.IDTokenLifespan,
+ RefreshToken: config.RefreshTokenLifespan,
+ },
+ ProofKeyCodeExchange: ProofKeyCodeExchangeConfig{
+ Enforce: config.EnforcePKCE == "always",
+ EnforcePublicClients: config.EnforcePKCE != "never",
+ AllowPlainChallengeMethod: config.EnablePKCEPlainChallenge,
+ },
+ }
+
+ prefix := "authelia_%s_"
+ c.Strategy.Core = &HMACCoreStrategy{
+ Enigma: &hmac.HMACStrategy{Config: c},
+ Config: c,
+ prefix: &prefix,
+ }
+
+ return c
+}
+
+type Config struct {
+ // GlobalSecret is the global secret used to sign and verify signatures.
+ GlobalSecret []byte
+
+ // RotatedGlobalSecrets is a list of global secrets that are used to verify signatures.
+ RotatedGlobalSecrets [][]byte
+
+ Issuers IssuersConfig
+
+ SendDebugMessagesToClients bool
+ DisableRefreshTokenValidation bool
+ OmitRedirectScopeParameter bool
+
+ JWTScopeField jwt.JWTScopeFieldEnum
+ JWTMaxDuration time.Duration
+
+ Hash HashConfig
+ Strategy StrategyConfig
+ PAR PARConfig
+ Handlers HandlersConfig
+ Lifespans LifespanConfig
+ ProofKeyCodeExchange ProofKeyCodeExchangeConfig
+ GrantTypeJWTBearer GrantTypeJWTBearerConfig
+
+ TokenURL string
+ TokenEntropy int
+ MinParameterEntropy int
+
+ SanitationWhiteList []string
+ AllowedPrompts []string
+ RefreshTokenScopes []string
+
+ HTTPClient *retryablehttp.Client
+ FormPostHTMLTemplate *template.Template
+ MessageCatalog i18n.MessageCatalog
+}
+
+type HashConfig struct {
+ ClientSecrets fosite.Hasher
+ HMAC func() (h hash.Hash)
+}
+
+type StrategyConfig struct {
+ Core oauth2.CoreStrategy
+ OpenID openid.OpenIDConnectTokenStrategy
+ Audience fosite.AudienceMatchingStrategy
+ Scope fosite.ScopeStrategy
+ JWKSFetcher fosite.JWKSFetcherStrategy
+ ClientAuthentication fosite.ClientAuthenticationStrategy
+}
+
+type PARConfig struct {
+ Enforced bool
+ URIPrefix string
+ ContextLifespan time.Duration
+}
+
+type IssuersConfig struct {
+ IDToken string
+ AccessToken string
+}
+
+type HandlersConfig struct {
+ // ResponseMode provides an extension handler for custom response modes.
+ ResponseMode fosite.ResponseModeHandler
+
+ // AuthorizeEndpoint is a list of handlers that are called before the authorization endpoint is served.
+ AuthorizeEndpoint fosite.AuthorizeEndpointHandlers
+
+ // TokenEndpoint is a list of handlers that are called before the token endpoint is served.
+ TokenEndpoint fosite.TokenEndpointHandlers
+
+ // TokenIntrospection is a list of handlers that are called before the token introspection endpoint is served.
+ TokenIntrospection fosite.TokenIntrospectionHandlers
+
+ // Revocation is a list of handlers that are called before the revocation endpoint is served.
+ Revocation fosite.RevocationHandlers
+
+ // PushedAuthorizeEndpoint is a list of handlers that are called before the PAR endpoint is served.
+ PushedAuthorizeEndpoint fosite.PushedAuthorizeEndpointHandlers
+}
+
+type GrantTypeJWTBearerConfig struct {
+ OptionalClientAuth bool
+ OptionalJTIClaim bool
+ OptionalIssuedDate bool
+}
+
+type ProofKeyCodeExchangeConfig struct {
+ Enforce bool
+ EnforcePublicClients bool
+ AllowPlainChallengeMethod bool
+}
+
+type LifespanConfig struct {
+ AccessToken time.Duration
+ AuthorizeCode time.Duration
+ IDToken time.Duration
+ RefreshToken time.Duration
+}
+
+const (
+ PromptNone = none
+ PromptLogin = "login"
+ PromptConsent = "consent"
+)
+
+func (c *Config) LoadHandlers(store *Store, strategy jwt.Signer) {
+ validator := openid.NewOpenIDConnectRequestValidator(strategy, c)
+
+ handlers := []any{
+ &oauth2.AuthorizeExplicitGrantHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ RefreshTokenStrategy: c.Strategy.Core,
+ AuthorizeCodeStrategy: c.Strategy.Core,
+ CoreStorage: store,
+ TokenRevocationStorage: store,
+ Config: c,
+ },
+ &oauth2.AuthorizeImplicitGrantTypeHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ AccessTokenStorage: store,
+ Config: c,
+ },
+ &oauth2.ClientCredentialsGrantHandler{
+ HandleHelper: &oauth2.HandleHelper{
+ AccessTokenStrategy: c.Strategy.Core,
+ AccessTokenStorage: store,
+ Config: c,
+ },
+ Config: c,
+ },
+ &oauth2.RefreshTokenGrantHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ RefreshTokenStrategy: c.Strategy.Core,
+ TokenRevocationStorage: store,
+ Config: c,
+ },
+ &openid.OpenIDConnectExplicitHandler{
+ IDTokenHandleHelper: &openid.IDTokenHandleHelper{
+ IDTokenStrategy: c.Strategy.OpenID,
+ },
+ OpenIDConnectRequestValidator: validator,
+ OpenIDConnectRequestStorage: store,
+ Config: c,
+ },
+ &openid.OpenIDConnectImplicitHandler{
+ AuthorizeImplicitGrantTypeHandler: &oauth2.AuthorizeImplicitGrantTypeHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ AccessTokenStorage: store,
+ Config: c,
+ },
+ IDTokenHandleHelper: &openid.IDTokenHandleHelper{
+ IDTokenStrategy: c.Strategy.OpenID,
+ },
+ OpenIDConnectRequestValidator: validator,
+ Config: c,
+ },
+ &openid.OpenIDConnectHybridHandler{
+ AuthorizeExplicitGrantHandler: &oauth2.AuthorizeExplicitGrantHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ RefreshTokenStrategy: c.Strategy.Core,
+ AuthorizeCodeStrategy: c.Strategy.Core,
+ CoreStorage: store,
+ Config: c,
+ },
+ Config: c,
+ AuthorizeImplicitGrantTypeHandler: &oauth2.AuthorizeImplicitGrantTypeHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ AccessTokenStorage: store,
+ Config: c,
+ },
+ IDTokenHandleHelper: &openid.IDTokenHandleHelper{
+ IDTokenStrategy: c.Strategy.OpenID,
+ },
+ OpenIDConnectRequestValidator: validator,
+ OpenIDConnectRequestStorage: store,
+ },
+ &openid.OpenIDConnectRefreshHandler{
+ IDTokenHandleHelper: &openid.IDTokenHandleHelper{
+ IDTokenStrategy: c.Strategy.OpenID,
+ },
+ Config: c,
+ },
+ &oauth2.CoreValidator{
+ CoreStrategy: c.Strategy.Core,
+ CoreStorage: store,
+ Config: c,
+ },
+ &oauth2.TokenRevocationHandler{
+ AccessTokenStrategy: c.Strategy.Core,
+ RefreshTokenStrategy: c.Strategy.Core,
+ TokenRevocationStorage: store,
+ },
+ &pkce.Handler{
+ AuthorizeCodeStrategy: c.Strategy.Core,
+ Storage: store,
+ Config: c,
+ },
+ &par.PushedAuthorizeHandler{
+ Storage: store,
+ Config: c,
+ },
+ }
+
+ x := HandlersConfig{}
+
+ for _, handler := range handlers {
+ if h, ok := handler.(fosite.AuthorizeEndpointHandler); ok {
+ x.AuthorizeEndpoint.Append(h)
+ }
+
+ if h, ok := handler.(fosite.TokenEndpointHandler); ok {
+ x.TokenEndpoint.Append(h)
+ }
+
+ if h, ok := handler.(fosite.TokenIntrospector); ok {
+ x.TokenIntrospection.Append(h)
+ }
+
+ if h, ok := handler.(fosite.RevocationHandler); ok {
+ x.Revocation.Append(h)
+ }
+ }
+
+ c.Handlers = x
+}
+
+// GetAllowedPrompts returns the allowed prompts.
+func (c *Config) GetAllowedPrompts(ctx context.Context) (prompts []string) {
+ if len(c.AllowedPrompts) == 0 {
+ c.AllowedPrompts = []string{PromptNone, PromptLogin, PromptConsent}
+ }
+
+ return c.AllowedPrompts
+}
+
+// GetEnforcePKCE returns the enforcement of PKCE.
+func (c *Config) GetEnforcePKCE(ctx context.Context) (enforce bool) {
+ return c.ProofKeyCodeExchange.Enforce
+}
+
+// GetEnforcePKCEForPublicClients returns the enforcement of PKCE for public clients.
+func (c *Config) GetEnforcePKCEForPublicClients(ctx context.Context) (enforce bool) {
+ return c.GetEnforcePKCE(ctx) || c.ProofKeyCodeExchange.EnforcePublicClients
+}
+
+// GetEnablePKCEPlainChallengeMethod returns the enable PKCE plain challenge method.
+func (c *Config) GetEnablePKCEPlainChallengeMethod(ctx context.Context) (enable bool) {
+ return c.ProofKeyCodeExchange.AllowPlainChallengeMethod
+}
+
+// GetGrantTypeJWTBearerCanSkipClientAuth returns the grant type JWT bearer can skip client auth.
+func (c *Config) GetGrantTypeJWTBearerCanSkipClientAuth(ctx context.Context) (skip bool) {
+ return c.GrantTypeJWTBearer.OptionalClientAuth
+}
+
+// GetGrantTypeJWTBearerIDOptional returns the grant type JWT bearer ID optional.
+func (c *Config) GetGrantTypeJWTBearerIDOptional(ctx context.Context) (optional bool) {
+ return c.GrantTypeJWTBearer.OptionalJTIClaim
+}
+
+// GetGrantTypeJWTBearerIssuedDateOptional returns the grant type JWT bearer issued date optional.
+func (c *Config) GetGrantTypeJWTBearerIssuedDateOptional(ctx context.Context) (optional bool) {
+ return c.GrantTypeJWTBearer.OptionalIssuedDate
+}
+
+// GetJWTMaxDuration returns the JWT max duration.
+func (c *Config) GetJWTMaxDuration(ctx context.Context) (duration time.Duration) {
+ if c.JWTMaxDuration == 0 {
+ c.JWTMaxDuration = time.Hour * 24
+ }
+
+ return c.JWTMaxDuration
+}
+
+// GetRedirectSecureChecker returns the redirect URL security validator.
+func (c *Config) GetRedirectSecureChecker(ctx context.Context) func(context.Context, *url.URL) (secure bool) {
+ return fosite.IsRedirectURISecure
+}
+
+// GetOmitRedirectScopeParam must be set to true if the scope query param is to be omitted
+// in the authorization's redirect URI.
+func (c *Config) GetOmitRedirectScopeParam(ctx context.Context) (omit bool) {
+ return c.OmitRedirectScopeParameter
+}
+
+// GetSanitationWhiteList is a whitelist of form values that are required by the token endpoint. These values
+// are safe for storage in a database (cleartext).
+func (c *Config) GetSanitationWhiteList(ctx context.Context) (whitelist []string) {
+ return c.SanitationWhiteList
+}
+
+// GetJWTScopeField returns the JWT scope field.
+func (c *Config) GetJWTScopeField(ctx context.Context) (field jwt.JWTScopeFieldEnum) {
+ if c.JWTScopeField == jwt.JWTScopeFieldUnset {
+ c.JWTScopeField = jwt.JWTScopeFieldList
+ }
+
+ return c.JWTScopeField
+}
+
+// GetIDTokenIssuer returns the ID token issuer.
+func (c *Config) GetIDTokenIssuer(ctx context.Context) (issuer string) {
+ return c.Issuers.IDToken
+}
+
+// GetAccessTokenIssuer returns the access token issuer.
+func (c *Config) GetAccessTokenIssuer(ctx context.Context) (issuer string) {
+ return c.Issuers.AccessToken
+}
+
+// GetDisableRefreshTokenValidation returns the disable refresh token validation flag.
+func (c *Config) GetDisableRefreshTokenValidation(ctx context.Context) (disable bool) {
+ return c.DisableRefreshTokenValidation
+}
+
+// GetAuthorizeCodeLifespan returns the authorization code lifespan.
+func (c *Config) GetAuthorizeCodeLifespan(ctx context.Context) (lifespan time.Duration) {
+ if c.Lifespans.AuthorizeCode <= 0 {
+ c.Lifespans.AccessToken = lifespanAuthorizeCodeDefault
+ }
+
+ return c.Lifespans.AuthorizeCode
+}
+
+// GetRefreshTokenLifespan returns the refresh token lifespan.
+func (c *Config) GetRefreshTokenLifespan(ctx context.Context) (lifespan time.Duration) {
+ if c.Lifespans.RefreshToken <= 0 {
+ c.Lifespans.AccessToken = lifespanRefreshTokenDefault
+ }
+
+ return c.Lifespans.RefreshToken
+}
+
+// GetIDTokenLifespan returns the ID token lifespan.
+func (c *Config) GetIDTokenLifespan(ctx context.Context) (lifespan time.Duration) {
+ if c.Lifespans.IDToken <= 0 {
+ c.Lifespans.AccessToken = lifespanTokenDefault
+ }
+
+ return c.Lifespans.IDToken
+}
+
+// GetAccessTokenLifespan returns the access token lifespan.
+func (c *Config) GetAccessTokenLifespan(ctx context.Context) (lifespan time.Duration) {
+ if c.Lifespans.AccessToken <= 0 {
+ c.Lifespans.AccessToken = lifespanTokenDefault
+ }
+
+ return c.Lifespans.AccessToken
+}
+
+// GetTokenEntropy returns the token entropy.
+func (c *Config) GetTokenEntropy(ctx context.Context) (entropy int) {
+ if c.TokenEntropy == 0 {
+ c.TokenEntropy = 32
+ }
+
+ return c.TokenEntropy
+}
+
+// GetGlobalSecret returns the global secret.
+func (c *Config) GetGlobalSecret(ctx context.Context) (secret []byte) {
+ return c.GlobalSecret
+}
+
+// GetRotatedGlobalSecrets returns the rotated global secrets.
+func (c *Config) GetRotatedGlobalSecrets(ctx context.Context) (secrets [][]byte) {
+ return c.RotatedGlobalSecrets
+}
+
+// GetHTTPClient returns the HTTP client provider.
+func (c *Config) GetHTTPClient(ctx context.Context) (client *retryablehttp.Client) {
+ if c.HTTPClient == nil {
+ c.HTTPClient = retryablehttp.NewClient()
+ }
+
+ return c.HTTPClient
+}
+
+// GetRefreshTokenScopes returns the refresh token scopes.
+func (c *Config) GetRefreshTokenScopes(ctx context.Context) (scopes []string) {
+ if c.RefreshTokenScopes == nil {
+ c.RefreshTokenScopes = []string{ScopeOffline, ScopeOfflineAccess}
+ }
+
+ return c.RefreshTokenScopes
+}
+
+// GetScopeStrategy returns the scope strategy.
+func (c *Config) GetScopeStrategy(ctx context.Context) (strategy fosite.ScopeStrategy) {
+ if c.Strategy.Scope == nil {
+ c.Strategy.Scope = fosite.ExactScopeStrategy
+ }
+
+ return c.Strategy.Scope
+}
+
+// GetAudienceStrategy returns the audience strategy.
+func (c *Config) GetAudienceStrategy(ctx context.Context) (strategy fosite.AudienceMatchingStrategy) {
+ if c.Strategy.Audience == nil {
+ c.Strategy.Audience = fosite.DefaultAudienceMatchingStrategy
+ }
+
+ return c.Strategy.Audience
+}
+
+// GetMinParameterEntropy returns the minimum parameter entropy.
+func (c *Config) GetMinParameterEntropy(_ context.Context) (entropy int) {
+ if c.MinParameterEntropy == 0 {
+ c.MinParameterEntropy = fosite.MinParameterEntropy
+ }
+
+ return c.MinParameterEntropy
+}
+
+// GetHMACHasher returns the hash function.
+func (c *Config) GetHMACHasher(ctx context.Context) func() (h hash.Hash) {
+ if c.Hash.HMAC == nil {
+ c.Hash.HMAC = sha512.New512_256
+ }
+
+ return c.Hash.HMAC
+}
+
+// GetSendDebugMessagesToClients returns the send debug messages to clients.
+func (c *Config) GetSendDebugMessagesToClients(ctx context.Context) (send bool) {
+ return c.SendDebugMessagesToClients
+}
+
+// GetJWKSFetcherStrategy returns the JWKS fetcher strategy.
+func (c *Config) GetJWKSFetcherStrategy(ctx context.Context) (strategy fosite.JWKSFetcherStrategy) {
+ if c.Strategy.JWKSFetcher == nil {
+ c.Strategy.JWKSFetcher = fosite.NewDefaultJWKSFetcherStrategy()
+ }
+
+ return c.Strategy.JWKSFetcher
+}
+
+// GetClientAuthenticationStrategy returns the client authentication strategy.
+func (c *Config) GetClientAuthenticationStrategy(ctx context.Context) (strategy fosite.ClientAuthenticationStrategy) {
+ return c.Strategy.ClientAuthentication
+}
+
+// GetMessageCatalog returns the message catalog.
+func (c *Config) GetMessageCatalog(ctx context.Context) (catalog i18n.MessageCatalog) {
+ return c.MessageCatalog
+}
+
+// GetFormPostHTMLTemplate returns the form post HTML template.
+func (c *Config) GetFormPostHTMLTemplate(ctx context.Context) (tmpl *template.Template) {
+ return c.FormPostHTMLTemplate
+}
+
+// GetTokenURL returns the token URL.
+func (c *Config) GetTokenURL(ctx context.Context) (tokenURL string) {
+ return c.TokenURL
+}
+
+// GetSecretsHasher returns the client secrets hashing function.
+func (c *Config) GetSecretsHasher(ctx context.Context) (hasher fosite.Hasher) {
+ if c.Hash.ClientSecrets == nil {
+ c.Hash.ClientSecrets = &AdaptiveHasher{}
+ }
+
+ return c.Hash.ClientSecrets
+}
+
+// GetUseLegacyErrorFormat returns whether to use the legacy error format.
+//
+// Deprecated: Do not use this flag anymore.
+func (c *Config) GetUseLegacyErrorFormat(ctx context.Context) (use bool) {
+ return false
+}
+
+// GetAuthorizeEndpointHandlers returns the authorize endpoint handlers.
+func (c *Config) GetAuthorizeEndpointHandlers(ctx context.Context) (handlers fosite.AuthorizeEndpointHandlers) {
+ return c.Handlers.AuthorizeEndpoint
+}
+
+// GetTokenEndpointHandlers returns the token endpoint handlers.
+func (c *Config) GetTokenEndpointHandlers(ctx context.Context) (handlers fosite.TokenEndpointHandlers) {
+ return c.Handlers.TokenEndpoint
+}
+
+// GetTokenIntrospectionHandlers returns the token introspection handlers.
+func (c *Config) GetTokenIntrospectionHandlers(ctx context.Context) (handlers fosite.TokenIntrospectionHandlers) {
+ return c.Handlers.TokenIntrospection
+}
+
+// GetRevocationHandlers returns the revocation handlers.
+func (c *Config) GetRevocationHandlers(ctx context.Context) (handlers fosite.RevocationHandlers) {
+ return c.Handlers.Revocation
+}
+
+// GetPushedAuthorizeEndpointHandlers returns the handlers.
+func (c *Config) GetPushedAuthorizeEndpointHandlers(ctx context.Context) fosite.PushedAuthorizeEndpointHandlers {
+ return c.Handlers.PushedAuthorizeEndpoint
+}
+
+// GetResponseModeHandlerExtension returns the response mode handler extension.
+func (c *Config) GetResponseModeHandlerExtension(ctx context.Context) (handler fosite.ResponseModeHandler) {
+ return c.Handlers.ResponseMode
+}
+
+// GetPushedAuthorizeRequestURIPrefix is the request URI prefix. This is
+// usually 'urn:ietf:params:oauth:request_uri:'.
+func (c *Config) GetPushedAuthorizeRequestURIPrefix(ctx context.Context) string {
+ if c.PAR.URIPrefix == "" {
+ c.PAR.URIPrefix = urnPARPrefix
+ }
+
+ return c.PAR.URIPrefix
+}
+
+// EnforcePushedAuthorize indicates if PAR is enforced. In this mode, a client
+// cannot pass authorize parameters at the 'authorize' endpoint. The 'authorize' endpoint
+// must contain the PAR request_uri.
+func (c *Config) EnforcePushedAuthorize(ctx context.Context) bool {
+ return c.PAR.Enforced
+}
+
+// GetPushedAuthorizeContextLifespan is the lifespan of the short-lived PAR context.
+func (c *Config) GetPushedAuthorizeContextLifespan(ctx context.Context) (lifespan time.Duration) {
+ if c.PAR.ContextLifespan == 0 {
+ c.PAR.ContextLifespan = lifespanPARContextDefault
+ }
+
+ return c.PAR.ContextLifespan
+}
diff --git a/internal/oidc/const.go b/internal/oidc/const.go
index c61396d4a..91647013e 100644
--- a/internal/oidc/const.go
+++ b/internal/oidc/const.go
@@ -1,8 +1,13 @@
package oidc
+import (
+ "time"
+)
+
// Scope strings.
const (
ScopeOfflineAccess = "offline_access"
+ ScopeOffline = "offline"
ScopeOpenID = "openid"
ScopeProfile = "profile"
ScopeEmail = "email"
@@ -35,6 +40,17 @@ const (
ClaimClientIdentifier = "client_id"
)
+const (
+ lifespanTokenDefault = time.Hour
+ lifespanRefreshTokenDefault = time.Hour * 24 * 30
+ lifespanAuthorizeCodeDefault = time.Minute * 15
+ lifespanPARContextDefault = time.Minute * 5
+)
+
+const (
+ urnPARPrefix = "urn:ietf:params:oauth:request_uri:"
+)
+
const (
// ClaimEmailAlts is an unregistered/custom claim.
// It represents the emails which are not considered primary.
diff --git a/internal/oidc/hmac.go b/internal/oidc/hmac.go
new file mode 100644
index 000000000..976ddec07
--- /dev/null
+++ b/internal/oidc/hmac.go
@@ -0,0 +1,129 @@
+package oidc
+
+import (
+ "context"
+ "fmt"
+ "strings"
+ "time"
+
+ "github.com/ory/fosite"
+ "github.com/ory/fosite/token/hmac"
+ "github.com/ory/x/errorsx"
+)
+
+// HMACCoreStrategy implements oauth2.CoreStrategy. It's a copy of the oauth2.HMACSHAStrategy.
+type HMACCoreStrategy struct {
+ Enigma *hmac.HMACStrategy
+ Config interface {
+ fosite.AccessTokenLifespanProvider
+ fosite.RefreshTokenLifespanProvider
+ fosite.AuthorizeCodeLifespanProvider
+ }
+ prefix *string
+}
+
+// AccessTokenSignature implements oauth2.AccessTokenStrategy.
+func (h *HMACCoreStrategy) AccessTokenSignature(ctx context.Context, token string) string {
+ return h.Enigma.Signature(token)
+}
+
+// GenerateAccessToken implements oauth2.AccessTokenStrategy.
+func (h *HMACCoreStrategy) GenerateAccessToken(ctx context.Context, _ fosite.Requester) (token string, signature string, err error) {
+ token, sig, err := h.Enigma.Generate(ctx)
+ if err != nil {
+ return "", "", err
+ }
+
+ return h.setPrefix(token, "at"), sig, nil
+}
+
+// ValidateAccessToken implements oauth2.AccessTokenStrategy.
+func (h *HMACCoreStrategy) ValidateAccessToken(ctx context.Context, r fosite.Requester, token string) (err error) {
+ var exp = r.GetSession().GetExpiresAt(fosite.AccessToken)
+ if exp.IsZero() && r.GetRequestedAt().Add(h.Config.GetAccessTokenLifespan(ctx)).Before(time.Now().UTC()) {
+ return errorsx.WithStack(fosite.ErrTokenExpired.WithHintf("Access token expired at '%s'.", r.GetRequestedAt().Add(h.Config.GetAccessTokenLifespan(ctx))))
+ }
+
+ if !exp.IsZero() && exp.Before(time.Now().UTC()) {
+ return errorsx.WithStack(fosite.ErrTokenExpired.WithHintf("Access token expired at '%s'.", exp))
+ }
+
+ return h.Enigma.Validate(ctx, h.trimPrefix(token, "at"))
+}
+
+// RefreshTokenSignature implements oauth2.RefreshTokenStrategy.
+func (h *HMACCoreStrategy) RefreshTokenSignature(ctx context.Context, token string) string {
+ return h.Enigma.Signature(token)
+}
+
+// GenerateRefreshToken implements oauth2.RefreshTokenStrategy.
+func (h *HMACCoreStrategy) GenerateRefreshToken(ctx context.Context, _ fosite.Requester) (token string, signature string, err error) {
+ token, sig, err := h.Enigma.Generate(ctx)
+ if err != nil {
+ return "", "", err
+ }
+
+ return h.setPrefix(token, "rt"), sig, nil
+}
+
+// ValidateRefreshToken implements oauth2.RefreshTokenStrategy.
+func (h *HMACCoreStrategy) ValidateRefreshToken(ctx context.Context, r fosite.Requester, token string) (err error) {
+ var exp = r.GetSession().GetExpiresAt(fosite.RefreshToken)
+ if exp.IsZero() {
+ return h.Enigma.Validate(ctx, h.trimPrefix(token, "rt"))
+ }
+
+ if !exp.IsZero() && exp.Before(time.Now().UTC()) {
+ return errorsx.WithStack(fosite.ErrTokenExpired.WithHintf("Refresh token expired at '%s'.", exp))
+ }
+
+ return h.Enigma.Validate(ctx, h.trimPrefix(token, "rt"))
+}
+
+// AuthorizeCodeSignature implements oauth2.AuthorizeCodeStrategy.
+func (h *HMACCoreStrategy) AuthorizeCodeSignature(ctx context.Context, token string) string {
+ return h.Enigma.Signature(token)
+}
+
+// GenerateAuthorizeCode implements oauth2.AuthorizeCodeStrategy.
+func (h *HMACCoreStrategy) GenerateAuthorizeCode(ctx context.Context, _ fosite.Requester) (token string, signature string, err error) {
+ token, sig, err := h.Enigma.Generate(ctx)
+ if err != nil {
+ return "", "", err
+ }
+
+ return h.setPrefix(token, "ac"), sig, nil
+}
+
+// ValidateAuthorizeCode implements oauth2.AuthorizeCodeStrategy.
+func (h *HMACCoreStrategy) ValidateAuthorizeCode(ctx context.Context, r fosite.Requester, token string) (err error) {
+ var exp = r.GetSession().GetExpiresAt(fosite.AuthorizeCode)
+ if exp.IsZero() && r.GetRequestedAt().Add(h.Config.GetAuthorizeCodeLifespan(ctx)).Before(time.Now().UTC()) {
+ return errorsx.WithStack(fosite.ErrTokenExpired.WithHintf("Authorize code expired at '%s'.", r.GetRequestedAt().Add(h.Config.GetAuthorizeCodeLifespan(ctx))))
+ }
+
+ if !exp.IsZero() && exp.Before(time.Now().UTC()) {
+ return errorsx.WithStack(fosite.ErrTokenExpired.WithHintf("Authorize code expired at '%s'.", exp))
+ }
+
+ return h.Enigma.Validate(ctx, h.trimPrefix(token, "ac"))
+}
+
+func (h *HMACCoreStrategy) getPrefix(part string) string {
+ if h.prefix == nil {
+ prefix := "ory_%s_"
+ h.prefix = &prefix
+ } else if len(*h.prefix) == 0 {
+ return ""
+ }
+
+ return fmt.Sprintf(*h.prefix, part)
+}
+
+func (h *HMACCoreStrategy) trimPrefix(token, part string) string {
+ return strings.TrimPrefix(token, h.getPrefix(part))
+}
+
+func (h *HMACCoreStrategy) setPrefix(token, part string) string {
+ return h.getPrefix(part) + token
+}
diff --git a/internal/oidc/keys.go b/internal/oidc/keys.go
index 7f5e3d86a..f3b0928cc 100644
--- a/internal/oidc/keys.go
+++ b/internal/oidc/keys.go
@@ -34,7 +34,7 @@ func NewKeyManager() (manager *KeyManager) {
}
// Strategy returns the fosite jwt.JWTStrategy.
-func (m *KeyManager) Strategy() (strategy jwt.JWTStrategy) {
+func (m *KeyManager) Strategy() (strategy jwt.Signer) {
if m.jwk == nil {
return nil
}
@@ -98,7 +98,7 @@ func (m *KeyManager) AddActiveJWK(chain schema.X509CertificateChain, key *rsa.Pr
// JWTStrategy is a decorator struct for the fosite jwt.JWTStrategy.
type JWTStrategy struct {
- jwt.JWTStrategy
+ jwt.Signer
id string
}
@@ -157,8 +157,12 @@ type JWK struct {
}
// Strategy returns the relevant jwt.JWTStrategy for this JWT.
-func (j *JWK) Strategy() (strategy jwt.JWTStrategy) {
- return &JWTStrategy{id: j.id, JWTStrategy: &jwt.RS256JWTStrategy{PrivateKey: j.key}}
+func (j *JWK) Strategy() (strategy jwt.Signer) {
+ return &JWTStrategy{id: j.id, Signer: &jwt.DefaultSigner{GetPrivateKey: j.GetPrivateKey}}
+}
+
+func (j *JWK) GetPrivateKey(ctx context.Context) (key any, err error) {
+ return j.key, nil
}
// JSONWebKey returns the relevant *jose.JSONWebKey for this JWT.
diff --git a/internal/oidc/provider.go b/internal/oidc/provider.go
index 9273df318..32b95a61a 100644
--- a/internal/oidc/provider.go
+++ b/internal/oidc/provider.go
@@ -1,18 +1,14 @@
package oidc
import (
- "crypto/sha512"
"fmt"
- "github.com/ory/fosite/compose"
- "github.com/ory/fosite/handler/oauth2"
+ "github.com/ory/fosite"
"github.com/ory/fosite/handler/openid"
- "github.com/ory/fosite/token/hmac"
"github.com/ory/herodot"
"github.com/authelia/authelia/v4/internal/configuration/schema"
"github.com/authelia/authelia/v4/internal/storage"
- "github.com/authelia/authelia/v4/internal/utils"
)
// NewOpenIDConnectProvider new-ups a OpenIDConnectProvider.
@@ -23,76 +19,22 @@ func NewOpenIDConnectProvider(config *schema.OpenIDConnectConfiguration, store s
provider = &OpenIDConnectProvider{
JSONWriter: herodot.NewJSONWriter(nil),
- Store: NewOpenIDConnectStore(config, store),
+ Store: NewStore(config, store),
+ Config: NewConfig(config),
}
- cconfig := &compose.Config{
- AccessTokenLifespan: config.AccessTokenLifespan,
- AuthorizeCodeLifespan: config.AuthorizeCodeLifespan,
- IDTokenLifespan: config.IDTokenLifespan,
- RefreshTokenLifespan: config.RefreshTokenLifespan,
- SendDebugMessagesToClients: config.EnableClientDebugMessages,
- MinParameterEntropy: config.MinimumParameterEntropy,
- EnforcePKCE: config.EnforcePKCE == "always",
- EnforcePKCEForPublicClients: config.EnforcePKCE != "never",
- EnablePKCEPlainChallengeMethod: config.EnablePKCEPlainChallenge,
- }
+ provider.OAuth2Provider = fosite.NewOAuth2Provider(provider.Store, provider.Config)
if provider.KeyManager, err = NewKeyManagerWithConfiguration(config); err != nil {
return nil, err
}
- jwtStrategy := provider.KeyManager.Strategy()
-
- strategy := &compose.CommonStrategy{
- CoreStrategy: &oauth2.HMACSHAStrategy{
- Enigma: &hmac.HMACStrategy{
- GlobalSecret: []byte(utils.HashSHA256FromString(config.HMACSecret)),
- RotatedGlobalSecrets: nil,
- TokenEntropy: cconfig.GetTokenEntropy(),
- Hash: sha512.New512_256,
- },
- AccessTokenLifespan: cconfig.GetAccessTokenLifespan(),
- AuthorizeCodeLifespan: cconfig.GetAuthorizeCodeLifespan(),
- RefreshTokenLifespan: cconfig.GetRefreshTokenLifespan(),
- },
- OpenIDConnectTokenStrategy: &openid.DefaultStrategy{
- JWTStrategy: jwtStrategy,
- Expiry: cconfig.GetIDTokenLifespan(),
- Issuer: cconfig.IDTokenIssuer,
- MinParameterEntropy: cconfig.GetMinParameterEntropy(),
- },
- JWTStrategy: jwtStrategy,
+ provider.Config.Strategy.OpenID = &openid.DefaultStrategy{
+ Signer: provider.KeyManager.Strategy(),
+ Config: provider.Config,
}
- provider.OAuth2Provider = compose.Compose(
- cconfig,
- provider.Store,
- strategy,
- AdaptiveHasher{},
-
- /*
- These are the OAuth2 and OpenIDConnect factories. Order is important (the OAuth2 factories at the top must
- be before the OpenIDConnect factories) and taken directly from fosite.compose.ComposeAllEnabled. The
- commented factories are not enabled as we don't yet use them but are still here for reference purposes.
- */
- compose.OAuth2AuthorizeExplicitFactory,
- compose.OAuth2AuthorizeImplicitFactory,
- compose.OAuth2ClientCredentialsGrantFactory,
- compose.OAuth2RefreshTokenGrantFactory,
- // compose.OAuth2ResourceOwnerPasswordCredentialsFactory,
- // compose.RFC7523AssertionGrantFactory,.
-
- compose.OpenIDConnectExplicitFactory,
- compose.OpenIDConnectImplicitFactory,
- compose.OpenIDConnectHybridFactory,
- compose.OpenIDConnectRefreshFactory,
-
- compose.OAuth2TokenIntrospectionFactory,
- compose.OAuth2TokenRevocationFactory,
-
- compose.OAuth2PKCEFactory,
- )
+ provider.Config.LoadHandlers(provider.Store, provider.KeyManager.Strategy())
provider.discovery = NewOpenIDConnectWellKnownConfiguration(config.EnablePKCEPlainChallenge, provider.Store.clients)
diff --git a/internal/oidc/store.go b/internal/oidc/store.go
index 1974e057f..910b7bd4b 100644
--- a/internal/oidc/store.go
+++ b/internal/oidc/store.go
@@ -18,8 +18,8 @@ import (
"github.com/authelia/authelia/v4/internal/storage"
)
-// NewOpenIDConnectStore returns a Store when provided with a schema.OpenIDConnectConfiguration and storage.Provider.
-func NewOpenIDConnectStore(config *schema.OpenIDConnectConfiguration, provider storage.Provider) (store *Store) {
+// NewStore returns a Store when provided with a schema.OpenIDConnectConfiguration and storage.Provider.
+func NewStore(config *schema.OpenIDConnectConfiguration, provider storage.Provider) (store *Store) {
logger := logging.Logger()
store = &Store{
diff --git a/internal/oidc/store_test.go b/internal/oidc/store_test.go
index adba95453..c5bff5b0c 100644
--- a/internal/oidc/store_test.go
+++ b/internal/oidc/store_test.go
@@ -12,7 +12,7 @@ import (
)
func TestOpenIDConnectStore_GetClientPolicy(t *testing.T) {
- s := NewOpenIDConnectStore(&schema.OpenIDConnectConfiguration{
+ s := NewStore(&schema.OpenIDConnectConfiguration{
IssuerCertificateChain: schema.X509CertificateChain{},
IssuerPrivateKey: mustParseRSAPrivateKey(exampleIssuerPrivateKey),
Clients: []schema.OpenIDConnectClientConfiguration{
@@ -44,7 +44,7 @@ func TestOpenIDConnectStore_GetClientPolicy(t *testing.T) {
}
func TestOpenIDConnectStore_GetInternalClient(t *testing.T) {
- s := NewOpenIDConnectStore(&schema.OpenIDConnectConfiguration{
+ s := NewStore(&schema.OpenIDConnectConfiguration{
IssuerCertificateChain: schema.X509CertificateChain{},
IssuerPrivateKey: mustParseRSAPrivateKey(exampleIssuerPrivateKey),
Clients: []schema.OpenIDConnectClientConfiguration{
@@ -77,7 +77,7 @@ func TestOpenIDConnectStore_GetInternalClient_ValidClient(t *testing.T) {
Secret: MustDecodeSecret("$plaintext$mysecret"),
}
- s := NewOpenIDConnectStore(&schema.OpenIDConnectConfiguration{
+ s := NewStore(&schema.OpenIDConnectConfiguration{
IssuerCertificateChain: schema.X509CertificateChain{},
IssuerPrivateKey: mustParseRSAPrivateKey(exampleIssuerPrivateKey),
Clients: []schema.OpenIDConnectClientConfiguration{c1},
@@ -105,7 +105,7 @@ func TestOpenIDConnectStore_GetInternalClient_InvalidClient(t *testing.T) {
Secret: MustDecodeSecret("$plaintext$mysecret"),
}
- s := NewOpenIDConnectStore(&schema.OpenIDConnectConfiguration{
+ s := NewStore(&schema.OpenIDConnectConfiguration{
IssuerCertificateChain: schema.X509CertificateChain{},
IssuerPrivateKey: mustParseRSAPrivateKey(exampleIssuerPrivateKey),
Clients: []schema.OpenIDConnectClientConfiguration{c1},
@@ -117,7 +117,7 @@ func TestOpenIDConnectStore_GetInternalClient_InvalidClient(t *testing.T) {
}
func TestOpenIDConnectStore_IsValidClientID(t *testing.T) {
- s := NewOpenIDConnectStore(&schema.OpenIDConnectConfiguration{
+ s := NewStore(&schema.OpenIDConnectConfiguration{
IssuerCertificateChain: schema.X509CertificateChain{},
IssuerPrivateKey: mustParseRSAPrivateKey(exampleIssuerPrivateKey),
Clients: []schema.OpenIDConnectClientConfiguration{
diff --git a/internal/oidc/types.go b/internal/oidc/types.go
index 97d84542a..41f35373b 100644
--- a/internal/oidc/types.go
+++ b/internal/oidc/types.go
@@ -9,7 +9,7 @@ import (
"github.com/ory/fosite/handler/openid"
"github.com/ory/fosite/token/jwt"
"github.com/ory/herodot"
- jose "gopkg.in/square/go-jose.v2"
+ "gopkg.in/square/go-jose.v2"
"github.com/authelia/authelia/v4/internal/authorization"
"github.com/authelia/authelia/v4/internal/model"
@@ -82,6 +82,7 @@ type OpenIDConnectProvider struct {
fosite.OAuth2Provider
*herodot.JSONWriter
*Store
+ *Config
KeyManager *KeyManager
@@ -607,16 +608,36 @@ type OpenIDConnectBackChannelLogoutDiscoveryOptions struct {
BackChannelLogoutSessionSupported bool `json:"backchannel_logout_session_supported"`
}
+// PushedAuthorizationDiscoveryOptions represents the well known discovery document specific to the
+// OAuth 2.0 Pushed Authorization Requests (RFC9126) implementation.
+//
+// OAuth 2.0 Pushed Authorization Requests: https://datatracker.ietf.org/doc/html/rfc9126#section-5
+type PushedAuthorizationDiscoveryOptions struct {
+ /*
+ The URL of the pushed authorization request endpoint at which a client can post an authorization request to
+ exchange for a "request_uri" value usable at the authorization server.
+ */
+ PushedAuthorizationRequestEndpoint string `json:"pushed_authorization_request_endpoint,omitempty"`
+
+ /*
+ Boolean parameter indicating whether the authorization server accepts authorization request data only via PAR.
+ If omitted, the default value is "false".
+ */
+ RequirePushedAuthorizationRequests bool `json:"require_pushed_authorization_requests"`
+}
+
// OAuth2WellKnownConfiguration represents the well known discovery document specific to OAuth 2.0.
type OAuth2WellKnownConfiguration struct {
CommonDiscoveryOptions
OAuth2DiscoveryOptions
+ PushedAuthorizationDiscoveryOptions
}
// OpenIDConnectWellKnownConfiguration represents the well known discovery document specific to OpenID Connect.
type OpenIDConnectWellKnownConfiguration struct {
CommonDiscoveryOptions
OAuth2DiscoveryOptions
+ PushedAuthorizationDiscoveryOptions
OpenIDConnectDiscoveryOptions
OpenIDConnectFrontChannelLogoutDiscoveryOptions
OpenIDConnectBackChannelLogoutDiscoveryOptions
diff --git a/internal/storage/const.go b/internal/storage/const.go
index 39645979d..d899c82f9 100644
--- a/internal/storage/const.go
+++ b/internal/storage/const.go
@@ -29,17 +29,35 @@ const (
)
// OAuth2SessionType represents the potential OAuth 2.0 session types.
-type OAuth2SessionType string
+type OAuth2SessionType int
// Representation of specific OAuth 2.0 session types.
const (
- OAuth2SessionTypeAuthorizeCode OAuth2SessionType = "authorization code"
- OAuth2SessionTypeAccessToken OAuth2SessionType = "access token"
- OAuth2SessionTypeRefreshToken OAuth2SessionType = "refresh token"
- OAuth2SessionTypePKCEChallenge OAuth2SessionType = "pkce challenge"
- OAuth2SessionTypeOpenIDConnect OAuth2SessionType = "openid connect"
+ OAuth2SessionTypeAuthorizeCode OAuth2SessionType = iota
+ OAuth2SessionTypeAccessToken
+ OAuth2SessionTypeRefreshToken
+ OAuth2SessionTypePKCEChallenge
+ OAuth2SessionTypeOpenIDConnect
)
+// String returns a string representation of this OAuth2SessionType.
+func (s OAuth2SessionType) String() string {
+ switch s {
+ case OAuth2SessionTypeAuthorizeCode:
+ return "authorization code"
+ case OAuth2SessionTypeAccessToken:
+ return "access token"
+ case OAuth2SessionTypeRefreshToken:
+ return "refresh token"
+ case OAuth2SessionTypePKCEChallenge:
+ return "pkce challenge"
+ case OAuth2SessionTypeOpenIDConnect:
+ return "openid connect"
+ default:
+ return "invalid"
+ }
+}
+
const (
sqlNetworkTypeTCP = "tcp"
sqlNetworkTypeUnixSocket = "unix"
diff --git a/internal/storage/sql_provider.go b/internal/storage/sql_provider.go
index 7ee60ab5c..fd6943e1a 100644
--- a/internal/storage/sql_provider.go
+++ b/internal/storage/sql_provider.go
@@ -547,11 +547,11 @@ func (p *SQLProvider) RevokeOAuth2Session(ctx context.Context, sessionType OAuth
case OAuth2SessionTypeOpenIDConnect:
query = p.sqlRevokeOAuth2OpenIDConnectSession
default:
- return fmt.Errorf("error revoking oauth2 session with signature '%s': unknown oauth2 session type '%s'", signature, sessionType)
+ return fmt.Errorf("error revoking oauth2 session with signature '%s': unknown oauth2 session type '%s'", signature, sessionType.String())
}
if _, err = p.db.ExecContext(ctx, query, signature); err != nil {
- return fmt.Errorf("error revoking oauth2 %s session with signature '%s': %w", sessionType, signature, err)
+ return fmt.Errorf("error revoking oauth2 %s session with signature '%s': %w", sessionType.String(), signature, err)
}
return nil
@@ -573,11 +573,11 @@ func (p *SQLProvider) RevokeOAuth2SessionByRequestID(ctx context.Context, sessio
case OAuth2SessionTypeOpenIDConnect:
query = p.sqlRevokeOAuth2OpenIDConnectSessionByRequestID
default:
- return fmt.Errorf("error revoking oauth2 session with request id '%s': unknown oauth2 session type '%s'", requestID, sessionType)
+ return fmt.Errorf("error revoking oauth2 session with request id '%s': unknown oauth2 session type '%s'", requestID, sessionType.String())
}
if _, err = p.db.ExecContext(ctx, query, requestID); err != nil {
- return fmt.Errorf("error revoking oauth2 %s session with request id '%s': %w", sessionType, requestID, err)
+ return fmt.Errorf("error revoking oauth2 %s session with request id '%s': %w", sessionType.String(), requestID, err)
}
return nil
@@ -599,11 +599,11 @@ func (p *SQLProvider) DeactivateOAuth2Session(ctx context.Context, sessionType O
case OAuth2SessionTypeOpenIDConnect:
query = p.sqlDeactivateOAuth2OpenIDConnectSession
default:
- return fmt.Errorf("error deactivating oauth2 session with signature '%s': unknown oauth2 session type '%s'", signature, sessionType)
+ return fmt.Errorf("error deactivating oauth2 session with signature '%s': unknown oauth2 session type '%s'", signature, sessionType.String())
}
if _, err = p.db.ExecContext(ctx, query, signature); err != nil {
- return fmt.Errorf("error deactivating oauth2 %s session with signature '%s': %w", sessionType, signature, err)
+ return fmt.Errorf("error deactivating oauth2 %s session with signature '%s': %w", sessionType.String(), signature, err)
}
return nil
@@ -625,7 +625,7 @@ func (p *SQLProvider) DeactivateOAuth2SessionByRequestID(ctx context.Context, se
case OAuth2SessionTypeOpenIDConnect:
query = p.sqlDeactivateOAuth2OpenIDConnectSessionByRequestID
default:
- return fmt.Errorf("error deactivating oauth2 session with request id '%s': unknown oauth2 session type '%s'", requestID, sessionType)
+ return fmt.Errorf("error deactivating oauth2 session with request id '%s': unknown oauth2 session type '%s'", requestID, sessionType.String())
}
if _, err = p.db.ExecContext(ctx, query, requestID); err != nil {
@@ -651,17 +651,17 @@ func (p *SQLProvider) LoadOAuth2Session(ctx context.Context, sessionType OAuth2S
case OAuth2SessionTypeOpenIDConnect:
query = p.sqlSelectOAuth2OpenIDConnectSession
default:
- return nil, fmt.Errorf("error selecting oauth2 session: unknown oauth2 session type '%s'", sessionType)
+ return nil, fmt.Errorf("error selecting oauth2 session: unknown oauth2 session type '%s'", sessionType.String())
}
session = &model.OAuth2Session{}
if err = p.db.GetContext(ctx, session, query, signature); err != nil {
- return nil, fmt.Errorf("error selecting oauth2 %s session with signature '%s': %w", sessionType, signature, err)
+ return nil, fmt.Errorf("error selecting oauth2 %s session with signature '%s': %w", sessionType.String(), signature, err)
}
if session.Session, err = p.decrypt(session.Session); err != nil {
- return nil, fmt.Errorf("error decrypting the oauth2 %s session data with signature '%s' for subject '%s' and request id '%s': %w", sessionType, signature, session.Subject, session.RequestID, err)
+ return nil, fmt.Errorf("error decrypting the oauth2 %s session data with signature '%s' for subject '%s' and request id '%s': %w", sessionType.String(), signature, session.Subject, session.RequestID, err)
}
return session, nil
From 3aefcdf05329435797df0038b8d559a2e2f955fe Mon Sep 17 00:00:00 2001
From: Amir Zarrinkafsh
Date: Sun, 13 Nov 2022 21:32:26 +1100
Subject: [PATCH 04/26] refactor(cmd): restrict bootstrap pnpm tasks to dev
environment (#4370)
---
cmd/authelia-scripts/cmd/bootstrap.go | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/cmd/authelia-scripts/cmd/bootstrap.go b/cmd/authelia-scripts/cmd/bootstrap.go
index 47a630818..ce2583e6c 100644
--- a/cmd/authelia-scripts/cmd/bootstrap.go
+++ b/cmd/authelia-scripts/cmd/bootstrap.go
@@ -53,8 +53,11 @@ func cmdBootstrapRun(_ *cobra.Command, _ []string) {
}
createTemporaryDirectory()
- createPNPMDirectory()
- pnpmInstall()
+
+ if os.Getenv("CI") != "true" {
+ createPNPMDirectory()
+ pnpmInstall()
+ }
bootstrapPrintln("Preparing /etc/hosts to serve subdomains of example.com...")
prepareHostsFile()
From 3574d8ab174c1f20659373540df45a0e42ee907b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 13 Nov 2022 12:26:20 +0000
Subject: [PATCH 05/26] build(deps): update alpine docker tag to v3.16.3
(#4362)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
Dockerfile | 2 +-
Dockerfile.coverage | 2 +-
Dockerfile.dev | 2 +-
internal/suites/example/compose/kind/Dockerfile | 2 +-
internal/suites/example/compose/samba/Dockerfile | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 4ecf9b73b..a67b3bf24 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
# ===================================
# ===== Authelia official image =====
# ===================================
-FROM alpine:3.16.2
+FROM alpine:3.16.3
ARG TARGETOS
ARG TARGETARCH
diff --git a/Dockerfile.coverage b/Dockerfile.coverage
index 6db2f7178..6bbf18aa3 100644
--- a/Dockerfile.coverage
+++ b/Dockerfile.coverage
@@ -46,7 +46,7 @@ CGO_ENABLED=1 CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" CGO_LD
# ===================================
# ===== Authelia official image =====
# ===================================
-FROM alpine:3.16.2
+FROM alpine:3.16.3
RUN apk --no-cache add ca-certificates tzdata
diff --git a/Dockerfile.dev b/Dockerfile.dev
index 11f74ea67..c144b90fe 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -43,7 +43,7 @@ CGO_ENABLED=1 CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" CGO_LD
# ===================================
# ===== Authelia official image =====
# ===================================
-FROM alpine:3.16.2
+FROM alpine:3.16.3
WORKDIR /app
diff --git a/internal/suites/example/compose/kind/Dockerfile b/internal/suites/example/compose/kind/Dockerfile
index f866bfd09..21b9689a0 100644
--- a/internal/suites/example/compose/kind/Dockerfile
+++ b/internal/suites/example/compose/kind/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.16.2
+FROM alpine:3.16.3
WORKDIR /kind
diff --git a/internal/suites/example/compose/samba/Dockerfile b/internal/suites/example/compose/samba/Dockerfile
index 0c5164a73..e193cf410 100644
--- a/internal/suites/example/compose/samba/Dockerfile
+++ b/internal/suites/example/compose/samba/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.16.2
+FROM alpine:3.16.3
RUN \
apk add --no-cache \
From 51045fd3fa8c5a3230c3a2b4352099524566a6bc Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 13 Nov 2022 15:08:04 +0000
Subject: [PATCH 06/26] build(deps): update module github.com/ory/x to v0.0.514
(#4368)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index ac80903fb..e4578c6d5 100644
--- a/go.mod
+++ b/go.mod
@@ -28,7 +28,7 @@ require (
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
github.com/ory/fosite v0.43.0
github.com/ory/herodot v0.9.13
- github.com/ory/x v0.0.507
+ github.com/ory/x v0.0.514
github.com/otiai10/copy v1.9.0
github.com/pkg/errors v0.9.1
github.com/pquerna/otp v1.3.0
diff --git a/go.sum b/go.sum
index 704977bdc..c1581b474 100644
--- a/go.sum
+++ b/go.sum
@@ -460,8 +460,8 @@ github.com/ory/herodot v0.9.13 h1:cN/Z4eOkErl/9W7hDIDLb79IO/bfsH+8yscBjRpB4IU=
github.com/ory/herodot v0.9.13/go.mod h1:IWDs9kSvFQqw/cQ8zi5ksyYvITiUU4dI7glUrhZcJYo=
github.com/ory/viper v1.7.5 h1:+xVdq7SU3e1vNaCsk/ixsfxE4zylk1TJUiJrY647jUE=
github.com/ory/viper v1.7.5/go.mod h1:ypOuyJmEUb3oENywQZRgeAMwqgOyDqwboO1tj3DjTaM=
-github.com/ory/x v0.0.507 h1:y1mFaDMIDVDHLeMJcmKNYvm8UUqY6w46TdUEvPFVwPs=
-github.com/ory/x v0.0.507/go.mod h1:xUtRpoiRARyJNPVk/fcCNKzyp25Foxt9GPlj8pd7egY=
+github.com/ory/x v0.0.514 h1:QCRqmZbsqRTMIMA+mR1qjjpStdEeVGTXI0jMO0iTfVw=
+github.com/ory/x v0.0.514/go.mod h1:xUtRpoiRARyJNPVk/fcCNKzyp25Foxt9GPlj8pd7egY=
github.com/otiai10/copy v1.9.0 h1:7KFNiCgZ91Ru4qW4CWPf/7jqtxLagGRmIxWldPP9VY4=
github.com/otiai10/copy v1.9.0/go.mod h1:hsfX19wcn0UWIHUQ3/4fHuehhk2UyArQ9dVFAn3FczI=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
From 36dbc96b148c23555b06b0e8d7a84ddd7322bb27 Mon Sep 17 00:00:00 2001
From: James Elliott
Date: Mon, 14 Nov 2022 12:54:30 +1100
Subject: [PATCH 07/26] refactor: sql formatting (#4371)
* refactor: sql spacing
* refactor editor config
---
.editorconfig | 8 ++------
.../migrations/V0006.ConsentPreConfiguration.mysql.up.sql | 6 +++---
.../V0006.ConsentPreConfiguration.postgres.up.sql | 4 ++--
.../V0006.ConsentPreConfiguration.sqlite.down.sql | 4 ++--
.../V0006.ConsentPreConfiguration.sqlite.up.sql | 6 +++---
5 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/.editorconfig b/.editorconfig
index 8ad12948d..0466ef21c 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -7,15 +7,11 @@ trim_trailing_whitespace = true
end_of_line = lf
insert_final_newline = true
-[.buildkite/hooks/**]
+[{.buildkite/hooks/**,*.sh,*.yml,*.yaml}]
indent_style = space
indent_size = 2
-[*.{sh,yml,yaml}]
-indent_style = space
-indent_size = 2
-
-[web/**]
+[{web/**,*.sql}]
indent_style = space
[{web/package.json,web/pnpm-lock.yaml}]
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql
index a74a42fb9..2e15cdd7f 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql
@@ -2,9 +2,9 @@ CREATE TABLE oauth2_consent_preconfiguration (
id INTEGER AUTO_INCREMENT,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- expires_at TIMESTAMP NULL DEFAULT NULL,
- revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ expires_at TIMESTAMP NULL DEFAULT NULL,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
scopes TEXT NOT NULL,
audience TEXT NULL,
PRIMARY KEY (id),
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql
index 964ddd3d9..21f1319d6 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql
@@ -2,9 +2,9 @@ CREATE TABLE oauth2_consent_preconfiguration (
id SERIAL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
- revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
scopes TEXT NOT NULL,
audience TEXT NULL,
PRIMARY KEY (id),
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql
index e4bfaefeb..c98c1f49a 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql
@@ -19,8 +19,8 @@ CREATE TABLE oauth2_consent_session (
form_data TEXT NOT NULL,
requested_scopes TEXT NOT NULL,
granted_scopes TEXT NOT NULL,
- requested_audience TEXT NULL DEFAULT '',
- granted_audience TEXT NULL DEFAULT '',
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
PRIMARY KEY (id),
CONSTRAINT oauth2_consent_session_subject_fkey
FOREIGN KEY(subject)
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql
index 3f1bccef3..544574e6d 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql
@@ -2,9 +2,9 @@ CREATE TABLE oauth2_consent_preconfiguration (
id INTEGER,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- expires_at TIMESTAMP NULL DEFAULT NULL,
- revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ expires_at TIMESTAMP NULL DEFAULT NULL,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
scopes TEXT NOT NULL,
audience TEXT NULL,
PRIMARY KEY (id),
From 9aec643bc11f0b0d6454680e0c9d0bc175b010ed Mon Sep 17 00:00:00 2001
From: James Elliott
Date: Mon, 14 Nov 2022 14:37:34 +1100
Subject: [PATCH 08/26] docs: clarify cloudflare docs (#4373)
---
.../en/integration/proxies/fowarded-headers/index.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/docs/content/en/integration/proxies/fowarded-headers/index.md b/docs/content/en/integration/proxies/fowarded-headers/index.md
index a209ac9b0..71dc3be90 100644
--- a/docs/content/en/integration/proxies/fowarded-headers/index.md
+++ b/docs/content/en/integration/proxies/fowarded-headers/index.md
@@ -53,7 +53,7 @@ exhaustive guide on using [Cloudflare] transform rules, however it's enough to c
achieve a secure result. Please see the [Cloudflare] documentation on
[transform rules](https://developers.cloudflare.com/rules/transform/) for more information._
-Steps:
+#### Steps
1. Click `Rules`.
2. Click `Transform Rules`.
@@ -73,7 +73,11 @@ Steps:
{{< figure src="cloudflare_1.png" alt="Steps 1 to 4" width="736" >}}
{{< figure src="cloudflare_2.png" alt="Steps 5 to 11" width="736" >}}
-Criteria:
+#### Criteria
+
+This table describes the criteria needed to achieve a desired result. Only one of these options should be chosen. You
+Should look at the desired result column and apply the appropriate field, operator, and value to [step](#steps) 8.
+Generally speaking the `Always Remove` option is the correct option.
| Desired Result | Field | Operator | Value |
|:-----------------------------------:|:-----------------:|:--------------:|:----------------------------------:|
From a9cc8b9fc86461afed8bd20e76ef05af35eadc14 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 14 Nov 2022 22:58:36 +0000
Subject: [PATCH 09/26] build(deps): update dependency @types/react-dom to
v18.0.9 (#4379)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/web/package.json b/web/package.json
index e3d9f6820..bbdd60325 100644
--- a/web/package.json
+++ b/web/package.json
@@ -151,7 +151,7 @@
"@types/node": "18.11.9",
"@types/qrcode.react": "1.0.2",
"@types/react": "18.0.25",
- "@types/react-dom": "18.0.8",
+ "@types/react-dom": "18.0.9",
"@types/zxcvbn": "4.4.1",
"@typescript-eslint/eslint-plugin": "5.42.1",
"@typescript-eslint/parser": "5.42.1",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 3034b4346..b6fc07968 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -19,7 +19,7 @@ specifiers:
'@types/node': 18.11.9
'@types/qrcode.react': 1.0.2
'@types/react': 18.0.25
- '@types/react-dom': 18.0.8
+ '@types/react-dom': 18.0.9
'@types/zxcvbn': 4.4.1
'@typescript-eslint/eslint-plugin': 5.42.1
'@typescript-eslint/parser': 5.42.1
@@ -101,7 +101,7 @@ devDependencies:
'@types/node': 18.11.9
'@types/qrcode.react': 1.0.2
'@types/react': 18.0.25
- '@types/react-dom': 18.0.8
+ '@types/react-dom': 18.0.9
'@types/zxcvbn': 4.4.1
'@typescript-eslint/eslint-plugin': 5.42.1_2udltptbznfmezdozpdoa2aemq
'@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
@@ -3438,7 +3438,7 @@ packages:
dependencies:
'@babel/runtime': 7.18.9
'@testing-library/dom': 8.16.0
- '@types/react-dom': 18.0.8
+ '@types/react-dom': 18.0.9
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
dev: true
@@ -3585,8 +3585,8 @@ packages:
'@types/react': 18.0.25
dev: true
- /@types/react-dom/18.0.8:
- resolution: {integrity: sha512-C3GYO0HLaOkk9dDAz3Dl4sbe4AKUGTCfFIZsz3n/82dPNN8Du533HzKatDxeUYWu24wJgMP1xICqkWk1YOLOIw==}
+ /@types/react-dom/18.0.9:
+ resolution: {integrity: sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==}
dependencies:
'@types/react': 18.0.25
dev: true
From 4c35dcf7886bc5bf37312e0086f82960016d4ed4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 15 Nov 2022 10:40:52 +1100
Subject: [PATCH 10/26] build(deps): update typescript-eslint monorepo to
v5.43.0 (#4380)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 4 +-
web/pnpm-lock.yaml | 102 ++++++++++++++++++++++-----------------------
2 files changed, 53 insertions(+), 53 deletions(-)
diff --git a/web/package.json b/web/package.json
index bbdd60325..00e6ea300 100644
--- a/web/package.json
+++ b/web/package.json
@@ -153,8 +153,8 @@
"@types/react": "18.0.25",
"@types/react-dom": "18.0.9",
"@types/zxcvbn": "4.4.1",
- "@typescript-eslint/eslint-plugin": "5.42.1",
- "@typescript-eslint/parser": "5.42.1",
+ "@typescript-eslint/eslint-plugin": "5.43.0",
+ "@typescript-eslint/parser": "5.43.0",
"@vitejs/plugin-react": "2.2.0",
"esbuild": "0.15.13",
"esbuild-jest": "0.5.0",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index b6fc07968..eb3d84a7e 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -21,8 +21,8 @@ specifiers:
'@types/react': 18.0.25
'@types/react-dom': 18.0.9
'@types/zxcvbn': 4.4.1
- '@typescript-eslint/eslint-plugin': 5.42.1
- '@typescript-eslint/parser': 5.42.1
+ '@typescript-eslint/eslint-plugin': 5.43.0
+ '@typescript-eslint/parser': 5.43.0
'@vitejs/plugin-react': 2.2.0
axios: 1.1.3
broadcast-channel: 4.18.1
@@ -103,8 +103,8 @@ devDependencies:
'@types/react': 18.0.25
'@types/react-dom': 18.0.9
'@types/zxcvbn': 4.4.1
- '@typescript-eslint/eslint-plugin': 5.42.1_2udltptbznfmezdozpdoa2aemq
- '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
+ '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
'@vitejs/plugin-react': 2.2.0_vite@3.2.3
esbuild: 0.15.13
esbuild-jest: 0.5.0_esbuild@0.15.13
@@ -113,7 +113,7 @@ devDependencies:
eslint-config-react-app: 7.0.1_ar3kwoulcryci6535wcfvjpsqy
eslint-formatter-rdjson: 1.0.5
eslint-import-resolver-typescript: 3.5.2_dcpv4nbdr5ks2h5677xdltrk6e
- eslint-plugin-import: 2.26.0_gbipkkcbnjmysmpjttq6vkmfqq
+ eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
eslint-plugin-prettier: 4.2.1_v7o5sx5x3wbs57ifz6wc4f76we
eslint-plugin-react: 7.31.10_eslint@8.27.0
@@ -3651,8 +3651,8 @@ packages:
resolution: {integrity: sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==}
dev: true
- /@typescript-eslint/eslint-plugin/5.42.1_2udltptbznfmezdozpdoa2aemq:
- resolution: {integrity: sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==}
+ /@typescript-eslint/eslint-plugin/5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i:
+ resolution: {integrity: sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@@ -3662,10 +3662,10 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
- '@typescript-eslint/scope-manager': 5.42.1
- '@typescript-eslint/type-utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
- '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/scope-manager': 5.43.0
+ '@typescript-eslint/type-utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
debug: 4.3.4
eslint: 8.27.0
ignore: 5.2.0
@@ -3691,8 +3691,8 @@ packages:
- typescript
dev: true
- /@typescript-eslint/parser/5.42.1_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==}
+ /@typescript-eslint/parser/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ resolution: {integrity: sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -3701,9 +3701,9 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 5.42.1
- '@typescript-eslint/types': 5.42.1
- '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4
+ '@typescript-eslint/scope-manager': 5.43.0
+ '@typescript-eslint/types': 5.43.0
+ '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
debug: 4.3.4
eslint: 8.27.0
typescript: 4.8.4
@@ -3719,16 +3719,16 @@ packages:
'@typescript-eslint/visitor-keys': 5.30.6
dev: true
- /@typescript-eslint/scope-manager/5.42.1:
- resolution: {integrity: sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==}
+ /@typescript-eslint/scope-manager/5.43.0:
+ resolution: {integrity: sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- '@typescript-eslint/types': 5.42.1
- '@typescript-eslint/visitor-keys': 5.42.1
+ '@typescript-eslint/types': 5.43.0
+ '@typescript-eslint/visitor-keys': 5.43.0
dev: true
- /@typescript-eslint/type-utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==}
+ /@typescript-eslint/type-utils/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ resolution: {integrity: sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -3737,8 +3737,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4
- '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
+ '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
debug: 4.3.4
eslint: 8.27.0
tsutils: 3.21.0_typescript@4.8.4
@@ -3752,8 +3752,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /@typescript-eslint/types/5.42.1:
- resolution: {integrity: sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==}
+ /@typescript-eslint/types/5.43.0:
+ resolution: {integrity: sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@@ -3778,8 +3778,8 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/typescript-estree/5.42.1_typescript@4.8.4:
- resolution: {integrity: sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==}
+ /@typescript-eslint/typescript-estree/5.43.0_typescript@4.8.4:
+ resolution: {integrity: sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
typescript: '*'
@@ -3787,8 +3787,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 5.42.1
- '@typescript-eslint/visitor-keys': 5.42.1
+ '@typescript-eslint/types': 5.43.0
+ '@typescript-eslint/visitor-keys': 5.43.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@@ -3817,17 +3817,17 @@ packages:
- typescript
dev: true
- /@typescript-eslint/utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==}
+ /@typescript-eslint/utils/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ resolution: {integrity: sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@types/json-schema': 7.0.11
'@types/semver': 7.3.12
- '@typescript-eslint/scope-manager': 5.42.1
- '@typescript-eslint/types': 5.42.1
- '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4
+ '@typescript-eslint/scope-manager': 5.43.0
+ '@typescript-eslint/types': 5.43.0
+ '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
eslint: 8.27.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.27.0
@@ -3845,11 +3845,11 @@ packages:
eslint-visitor-keys: 3.3.0
dev: true
- /@typescript-eslint/visitor-keys/5.42.1:
- resolution: {integrity: sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==}
+ /@typescript-eslint/visitor-keys/5.43.0:
+ resolution: {integrity: sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- '@typescript-eslint/types': 5.42.1
+ '@typescript-eslint/types': 5.43.0
eslint-visitor-keys: 3.3.0
dev: true
@@ -5365,14 +5365,14 @@ packages:
'@babel/core': 7.18.6
'@babel/eslint-parser': 7.18.2_chvycicpad5erj2yemazgxq6vy
'@rushstack/eslint-patch': 1.1.4
- '@typescript-eslint/eslint-plugin': 5.42.1_2udltptbznfmezdozpdoa2aemq
- '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
+ '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
babel-preset-react-app: 10.0.1
confusing-browser-globals: 1.0.11
eslint: 8.27.0
eslint-plugin-flowtype: 8.0.3_eslint@8.27.0
- eslint-plugin-import: 2.26.0_gbipkkcbnjmysmpjttq6vkmfqq
- eslint-plugin-jest: 25.7.0_kdswgjmqcx7mthqz7ow2zlfevy
+ eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
+ eslint-plugin-jest: 25.7.0_bf5qejdbjbrfwwaumpbpeb3h4e
eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
eslint-plugin-react: 7.31.10_eslint@8.27.0
eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
@@ -5410,7 +5410,7 @@ packages:
debug: 4.3.4
enhanced-resolve: 5.10.0
eslint: 8.27.0
- eslint-plugin-import: 2.26.0_gbipkkcbnjmysmpjttq6vkmfqq
+ eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
get-tsconfig: 4.2.0
globby: 13.1.2
is-core-module: 2.10.0
@@ -5420,7 +5420,7 @@ packages:
- supports-color
dev: true
- /eslint-module-utils/2.7.3_go6mpysrr6ruih3ko533i3mldm:
+ /eslint-module-utils/2.7.3_clahhyedowhj7lywpxe6ohktxi:
resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==}
engines: {node: '>=4'}
peerDependencies:
@@ -5438,7 +5438,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 3.5.2_dcpv4nbdr5ks2h5677xdltrk6e
@@ -5465,7 +5465,7 @@ packages:
string-natural-compare: 3.0.1
dev: true
- /eslint-plugin-import/2.26.0_gbipkkcbnjmysmpjttq6vkmfqq:
+ /eslint-plugin-import/2.26.0_bbzxof3vtngyannf3l4jlcflvy:
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
engines: {node: '>=4'}
peerDependencies:
@@ -5475,14 +5475,14 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
doctrine: 2.1.0
eslint: 8.27.0
eslint-import-resolver-node: 0.3.6
- eslint-module-utils: 2.7.3_go6mpysrr6ruih3ko533i3mldm
+ eslint-module-utils: 2.7.3_clahhyedowhj7lywpxe6ohktxi
has: 1.0.3
is-core-module: 2.9.0
is-glob: 4.0.3
@@ -5496,7 +5496,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-jest/25.7.0_kdswgjmqcx7mthqz7ow2zlfevy:
+ /eslint-plugin-jest/25.7.0_bf5qejdbjbrfwwaumpbpeb3h4e:
resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
peerDependencies:
@@ -5509,7 +5509,7 @@ packages:
jest:
optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 5.42.1_2udltptbznfmezdozpdoa2aemq
+ '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
'@typescript-eslint/experimental-utils': 5.30.6_rmayb2veg2btbq6mbmnyivgasy
eslint: 8.27.0
jest: 29.3.1_@types+node@18.11.9
@@ -5595,7 +5595,7 @@ packages:
peerDependencies:
eslint: ^7.5.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
eslint: 8.27.0
transitivePeerDependencies:
- supports-color
From 13ddeb18dc26c1134acaec83bb2e6e5ca4f2bcd9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 15 Nov 2022 12:19:47 +1100
Subject: [PATCH 11/26] build(deps): update dependency @types/jest to v29.2.3
(#4381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 105 +++------------------------------------------
2 files changed, 8 insertions(+), 99 deletions(-)
diff --git a/web/package.json b/web/package.json
index 00e6ea300..23d4507e1 100644
--- a/web/package.json
+++ b/web/package.json
@@ -147,7 +147,7 @@
"@commitlint/config-conventional": "17.2.0",
"@testing-library/jest-dom": "5.16.5",
"@testing-library/react": "13.4.0",
- "@types/jest": "29.2.2",
+ "@types/jest": "29.2.3",
"@types/node": "18.11.9",
"@types/qrcode.react": "1.0.2",
"@types/react": "18.0.25",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index eb3d84a7e..844f773e2 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -15,7 +15,7 @@ specifiers:
'@mui/styles': 5.10.10
'@testing-library/jest-dom': 5.16.5
'@testing-library/react': 13.4.0
- '@types/jest': 29.2.2
+ '@types/jest': 29.2.3
'@types/node': 18.11.9
'@types/qrcode.react': 1.0.2
'@types/react': 18.0.25
@@ -97,7 +97,7 @@ devDependencies:
'@commitlint/config-conventional': 17.2.0
'@testing-library/jest-dom': 5.16.5
'@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y
- '@types/jest': 29.2.2
+ '@types/jest': 29.2.3
'@types/node': 18.11.9
'@types/qrcode.react': 1.0.2
'@types/react': 18.0.25
@@ -2612,13 +2612,6 @@ packages:
jest-mock: 29.3.1
dev: true
- /@jest/expect-utils/29.2.2:
- resolution: {integrity: sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- jest-get-type: 29.2.0
- dev: true
-
/@jest/expect-utils/29.3.1:
resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -2790,18 +2783,6 @@ packages:
chalk: 4.1.2
dev: true
- /@jest/types/29.2.1:
- resolution: {integrity: sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/schemas': 29.0.0
- '@types/istanbul-lib-coverage': 2.0.4
- '@types/istanbul-reports': 3.0.1
- '@types/node': 18.11.9
- '@types/yargs': 17.0.10
- chalk: 4.1.2
- dev: true
-
/@jest/types/29.3.1:
resolution: {integrity: sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -3530,11 +3511,11 @@ packages:
'@types/istanbul-lib-report': 3.0.0
dev: true
- /@types/jest/29.2.2:
- resolution: {integrity: sha512-og1wAmdxKoS71K2ZwSVqWPX6OVn3ihZ6ZT2qvZvZQm90lJVDyXIjYcu4Khx2CNIeaFv12rOU/YObOsI3VOkzog==}
+ /@types/jest/29.2.3:
+ resolution: {integrity: sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==}
dependencies:
- expect: 29.2.2
- pretty-format: 29.2.1
+ expect: 29.3.1
+ pretty-format: 29.3.1
dev: true
/@types/jsdom/20.0.0:
@@ -3624,7 +3605,7 @@ packages:
/@types/testing-library__jest-dom/5.14.5:
resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==}
dependencies:
- '@types/jest': 29.2.2
+ '@types/jest': 29.2.3
dev: true
/@types/tough-cookie/4.0.2:
@@ -4934,11 +4915,6 @@ packages:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
dev: false
- /diff-sequences/29.2.0:
- resolution: {integrity: sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
-
/diff-sequences/29.3.1:
resolution: {integrity: sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -5790,17 +5766,6 @@ packages:
- supports-color
dev: true
- /expect/29.2.2:
- resolution: {integrity: sha512-hE09QerxZ5wXiOhqkXy5d2G9ar+EqOyifnCXCpMNu+vZ6DG9TJ6CO2c2kPDSLqERTTWrO7OZj8EkYHQqSd78Yw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/expect-utils': 29.2.2
- jest-get-type: 29.2.0
- jest-matcher-utils: 29.2.2
- jest-message-util: 29.2.1
- jest-util: 29.2.1
- dev: true
-
/expect/29.3.1:
resolution: {integrity: sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -6816,16 +6781,6 @@ packages:
- supports-color
dev: true
- /jest-diff/29.2.1:
- resolution: {integrity: sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- chalk: 4.1.2
- diff-sequences: 29.2.0
- jest-get-type: 29.2.0
- pretty-format: 29.2.1
- dev: true
-
/jest-diff/29.3.1:
resolution: {integrity: sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -6944,16 +6899,6 @@ packages:
pretty-format: 29.3.1
dev: true
- /jest-matcher-utils/29.2.2:
- resolution: {integrity: sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- chalk: 4.1.2
- jest-diff: 29.2.1
- jest-get-type: 29.2.0
- pretty-format: 29.2.1
- dev: true
-
/jest-matcher-utils/29.3.1:
resolution: {integrity: sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -6964,21 +6909,6 @@ packages:
pretty-format: 29.3.1
dev: true
- /jest-message-util/29.2.1:
- resolution: {integrity: sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/code-frame': 7.18.6
- '@jest/types': 29.2.1
- '@types/stack-utils': 2.0.1
- chalk: 4.1.2
- graceful-fs: 4.2.10
- micromatch: 4.0.5
- pretty-format: 29.2.1
- slash: 3.0.0
- stack-utils: 2.0.5
- dev: true
-
/jest-message-util/29.3.1:
resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -7170,18 +7100,6 @@ packages:
micromatch: 4.0.5
dev: true
- /jest-util/29.2.1:
- resolution: {integrity: sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.2.1
- '@types/node': 18.11.9
- chalk: 4.1.2
- ci-info: 3.3.2
- graceful-fs: 4.2.10
- picomatch: 2.3.1
- dev: true
-
/jest-util/29.3.1:
resolution: {integrity: sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -8179,15 +8097,6 @@ packages:
react-is: 17.0.2
dev: true
- /pretty-format/29.2.1:
- resolution: {integrity: sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/schemas': 29.0.0
- ansi-styles: 5.2.0
- react-is: 18.2.0
- dev: true
-
/pretty-format/29.3.1:
resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
From 1e558ffa18397db300b943d188c16b6b932810b6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 15 Nov 2022 20:45:42 +1100
Subject: [PATCH 12/26] build(deps): update dependency esbuild to v0.15.14
(#4383)
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 148 ++++++++++++++++++++++-----------------------
2 files changed, 75 insertions(+), 75 deletions(-)
diff --git a/web/package.json b/web/package.json
index 23d4507e1..63308769a 100644
--- a/web/package.json
+++ b/web/package.json
@@ -156,7 +156,7 @@
"@typescript-eslint/eslint-plugin": "5.43.0",
"@typescript-eslint/parser": "5.43.0",
"@vitejs/plugin-react": "2.2.0",
- "esbuild": "0.15.13",
+ "esbuild": "0.15.14",
"esbuild-jest": "0.5.0",
"eslint": "8.27.0",
"eslint-config-prettier": "8.5.0",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 844f773e2..6228111b8 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -27,7 +27,7 @@ specifiers:
axios: 1.1.3
broadcast-channel: 4.18.1
classnames: 2.3.2
- esbuild: 0.15.13
+ esbuild: 0.15.14
esbuild-jest: 0.5.0
eslint: 8.27.0
eslint-config-prettier: 8.5.0
@@ -106,8 +106,8 @@ devDependencies:
'@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
'@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
'@vitejs/plugin-react': 2.2.0_vite@3.2.3
- esbuild: 0.15.13
- esbuild-jest: 0.5.0_esbuild@0.15.13
+ esbuild: 0.15.14
+ esbuild-jest: 0.5.0_esbuild@0.15.14
eslint: 8.27.0
eslint-config-prettier: 8.5.0_eslint@8.27.0
eslint-config-react-app: 7.0.1_ar3kwoulcryci6535wcfvjpsqy
@@ -2436,8 +2436,8 @@ packages:
resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==}
dev: false
- /@esbuild/android-arm/0.15.13:
- resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==}
+ /@esbuild/android-arm/0.15.14:
+ resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@@ -2445,8 +2445,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-loong64/0.15.13:
- resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==}
+ /@esbuild/linux-loong64/0.15.14:
+ resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@@ -5065,8 +5065,8 @@ packages:
is-symbol: 1.0.4
dev: true
- /esbuild-android-64/0.15.13:
- resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==}
+ /esbuild-android-64/0.15.14:
+ resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@@ -5074,8 +5074,8 @@ packages:
dev: true
optional: true
- /esbuild-android-arm64/0.15.13:
- resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==}
+ /esbuild-android-arm64/0.15.14:
+ resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -5083,8 +5083,8 @@ packages:
dev: true
optional: true
- /esbuild-darwin-64/0.15.13:
- resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==}
+ /esbuild-darwin-64/0.15.14:
+ resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -5092,8 +5092,8 @@ packages:
dev: true
optional: true
- /esbuild-darwin-arm64/0.15.13:
- resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==}
+ /esbuild-darwin-arm64/0.15.14:
+ resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -5101,8 +5101,8 @@ packages:
dev: true
optional: true
- /esbuild-freebsd-64/0.15.13:
- resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==}
+ /esbuild-freebsd-64/0.15.14:
+ resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -5110,8 +5110,8 @@ packages:
dev: true
optional: true
- /esbuild-freebsd-arm64/0.15.13:
- resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==}
+ /esbuild-freebsd-arm64/0.15.14:
+ resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -5119,7 +5119,7 @@ packages:
dev: true
optional: true
- /esbuild-jest/0.5.0_esbuild@0.15.13:
+ /esbuild-jest/0.5.0_esbuild@0.15.14:
resolution: {integrity: sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ==}
peerDependencies:
esbuild: '>=0.8.50'
@@ -5127,13 +5127,13 @@ packages:
'@babel/core': 7.18.6
'@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.18.6
babel-jest: 26.6.3_@babel+core@7.18.6
- esbuild: 0.15.13
+ esbuild: 0.15.14
transitivePeerDependencies:
- supports-color
dev: true
- /esbuild-linux-32/0.15.13:
- resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==}
+ /esbuild-linux-32/0.15.14:
+ resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -5141,8 +5141,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-64/0.15.13:
- resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==}
+ /esbuild-linux-64/0.15.14:
+ resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -5150,8 +5150,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-arm/0.15.13:
- resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==}
+ /esbuild-linux-arm/0.15.14:
+ resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -5159,8 +5159,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-arm64/0.15.13:
- resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==}
+ /esbuild-linux-arm64/0.15.14:
+ resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -5168,8 +5168,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-mips64le/0.15.13:
- resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==}
+ /esbuild-linux-mips64le/0.15.14:
+ resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -5177,8 +5177,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-ppc64le/0.15.13:
- resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==}
+ /esbuild-linux-ppc64le/0.15.14:
+ resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -5186,8 +5186,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-riscv64/0.15.13:
- resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==}
+ /esbuild-linux-riscv64/0.15.14:
+ resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@@ -5195,8 +5195,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-s390x/0.15.13:
- resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==}
+ /esbuild-linux-s390x/0.15.14:
+ resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -5204,8 +5204,8 @@ packages:
dev: true
optional: true
- /esbuild-netbsd-64/0.15.13:
- resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==}
+ /esbuild-netbsd-64/0.15.14:
+ resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -5213,8 +5213,8 @@ packages:
dev: true
optional: true
- /esbuild-openbsd-64/0.15.13:
- resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==}
+ /esbuild-openbsd-64/0.15.14:
+ resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -5222,8 +5222,8 @@ packages:
dev: true
optional: true
- /esbuild-sunos-64/0.15.13:
- resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==}
+ /esbuild-sunos-64/0.15.14:
+ resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -5231,8 +5231,8 @@ packages:
dev: true
optional: true
- /esbuild-windows-32/0.15.13:
- resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==}
+ /esbuild-windows-32/0.15.14:
+ resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -5240,8 +5240,8 @@ packages:
dev: true
optional: true
- /esbuild-windows-64/0.15.13:
- resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==}
+ /esbuild-windows-64/0.15.14:
+ resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -5249,8 +5249,8 @@ packages:
dev: true
optional: true
- /esbuild-windows-arm64/0.15.13:
- resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==}
+ /esbuild-windows-arm64/0.15.14:
+ resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -5258,34 +5258,34 @@ packages:
dev: true
optional: true
- /esbuild/0.15.13:
- resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==}
+ /esbuild/0.15.14:
+ resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.15.13
- '@esbuild/linux-loong64': 0.15.13
- esbuild-android-64: 0.15.13
- esbuild-android-arm64: 0.15.13
- esbuild-darwin-64: 0.15.13
- esbuild-darwin-arm64: 0.15.13
- esbuild-freebsd-64: 0.15.13
- esbuild-freebsd-arm64: 0.15.13
- esbuild-linux-32: 0.15.13
- esbuild-linux-64: 0.15.13
- esbuild-linux-arm: 0.15.13
- esbuild-linux-arm64: 0.15.13
- esbuild-linux-mips64le: 0.15.13
- esbuild-linux-ppc64le: 0.15.13
- esbuild-linux-riscv64: 0.15.13
- esbuild-linux-s390x: 0.15.13
- esbuild-netbsd-64: 0.15.13
- esbuild-openbsd-64: 0.15.13
- esbuild-sunos-64: 0.15.13
- esbuild-windows-32: 0.15.13
- esbuild-windows-64: 0.15.13
- esbuild-windows-arm64: 0.15.13
+ '@esbuild/android-arm': 0.15.14
+ '@esbuild/linux-loong64': 0.15.14
+ esbuild-android-64: 0.15.14
+ esbuild-android-arm64: 0.15.14
+ esbuild-darwin-64: 0.15.14
+ esbuild-darwin-arm64: 0.15.14
+ esbuild-freebsd-64: 0.15.14
+ esbuild-freebsd-arm64: 0.15.14
+ esbuild-linux-32: 0.15.14
+ esbuild-linux-64: 0.15.14
+ esbuild-linux-arm: 0.15.14
+ esbuild-linux-arm64: 0.15.14
+ esbuild-linux-mips64le: 0.15.14
+ esbuild-linux-ppc64le: 0.15.14
+ esbuild-linux-riscv64: 0.15.14
+ esbuild-linux-s390x: 0.15.14
+ esbuild-netbsd-64: 0.15.14
+ esbuild-openbsd-64: 0.15.14
+ esbuild-sunos-64: 0.15.14
+ esbuild-windows-32: 0.15.14
+ esbuild-windows-64: 0.15.14
+ esbuild-windows-arm64: 0.15.14
dev: true
/escalade/3.1.1:
@@ -9395,7 +9395,7 @@ packages:
optional: true
dependencies:
'@types/node': 18.11.9
- esbuild: 0.15.13
+ esbuild: 0.15.14
postcss: 8.4.18
resolve: 1.22.1
rollup: 2.79.1
From 7d50f9a5b35736431f0924bfea332c2ed25a1225 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 15 Nov 2022 13:03:46 +0000
Subject: [PATCH 13/26] build(deps): update material-ui monorepo to v5.10.14
(#4385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 6 +-
web/pnpm-lock.yaml | 142 ++++++++++++++++++++++++---------------------
2 files changed, 79 insertions(+), 69 deletions(-)
diff --git a/web/package.json b/web/package.json
index 63308769a..e872e2e55 100644
--- a/web/package.json
+++ b/web/package.json
@@ -25,9 +25,9 @@
"@fortawesome/free-regular-svg-icons": "6.2.0",
"@fortawesome/free-solid-svg-icons": "6.2.0",
"@fortawesome/react-fontawesome": "0.2.0",
- "@mui/icons-material": "5.10.9",
- "@mui/material": "5.10.13",
- "@mui/styles": "5.10.10",
+ "@mui/icons-material": "5.10.14",
+ "@mui/material": "5.10.14",
+ "@mui/styles": "5.10.14",
"axios": "1.1.3",
"broadcast-channel": "4.18.1",
"classnames": "2.3.2",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 6228111b8..031a829f4 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -10,9 +10,9 @@ specifiers:
'@fortawesome/free-regular-svg-icons': 6.2.0
'@fortawesome/free-solid-svg-icons': 6.2.0
'@fortawesome/react-fontawesome': 0.2.0
- '@mui/icons-material': 5.10.9
- '@mui/material': 5.10.13
- '@mui/styles': 5.10.10
+ '@mui/icons-material': 5.10.14
+ '@mui/material': 5.10.14
+ '@mui/styles': 5.10.14
'@testing-library/jest-dom': 5.16.5
'@testing-library/react': 13.4.0
'@types/jest': 29.2.3
@@ -73,9 +73,9 @@ dependencies:
'@fortawesome/free-regular-svg-icons': 6.2.0
'@fortawesome/free-solid-svg-icons': 6.2.0
'@fortawesome/react-fontawesome': 0.2.0_6j2wdqxompc6mcokhxkpep2gqu
- '@mui/icons-material': 5.10.9_4tcfjhohj57yvze6zkot3vymie
- '@mui/material': 5.10.13_thp4wrxo45nyllusrnt46mid4u
- '@mui/styles': 5.10.10_fan5qbzahqtxlm5dzefqlqx5ia
+ '@mui/icons-material': 5.10.14_edp4dc7hnxdrqofuyrrjp2id7y
+ '@mui/material': 5.10.14_thp4wrxo45nyllusrnt46mid4u
+ '@mui/styles': 5.10.14_fan5qbzahqtxlm5dzefqlqx5ia
axios: 1.1.3
broadcast-channel: 4.18.1
classnames: 2.3.2
@@ -2029,14 +2029,14 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
core-js-pure: 3.23.4
- regenerator-runtime: 0.13.9
+ regenerator-runtime: 0.13.10
dev: true
/@babel/runtime/7.18.9:
resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==}
engines: {node: '>=6.9.0'}
dependencies:
- regenerator-runtime: 0.13.9
+ regenerator-runtime: 0.13.10
dev: true
/@babel/runtime/7.19.0:
@@ -2050,6 +2050,13 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.13.9
+ dev: false
+
+ /@babel/runtime/7.20.1:
+ resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.13.10
/@babel/template/7.18.10:
resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==}
@@ -2840,8 +2847,8 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
- /@mui/base/5.0.0-alpha.105_2zx2umvpluuhvlq44va5bta2da:
- resolution: {integrity: sha512-4IPBcJQIgVVXQvN6DQMoCHed52GBtwSqYs0jD0dDcMR3o76AodQtpEeWFz3p7mJoc6f/IHBl9U6jEfL1r/kM4g==}
+ /@mui/base/5.0.0-alpha.106_2zx2umvpluuhvlq44va5bta2da:
+ resolution: {integrity: sha512-xJQQtwPCPwr6hGWTBdvDwHYwExn3Bw7nPQkN8Fuz8kHpZqoMVWQvvaFS557AIkkI2AFLV3DxVIMjbCvrIntBWg==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0 || 18
@@ -2851,10 +2858,10 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
'@emotion/is-prop-valid': 1.2.0
- '@mui/types': 7.2.0_@types+react@18.0.25
- '@mui/utils': 5.10.9_react@18.2.0
+ '@mui/types': 7.2.1_@types+react@18.0.25
+ '@mui/utils': 5.10.14_react@18.2.0
'@popperjs/core': 2.11.6
'@types/react': 18.0.25
clsx: 1.2.1
@@ -2864,12 +2871,12 @@ packages:
react-is: 18.2.0
dev: false
- /@mui/core-downloads-tracker/5.10.13:
- resolution: {integrity: sha512-zWkWPV/SaNdsIdxAWiuVGZ+Ue3BkfSIlU/BFIrJmuUcwiIa7gQsbI/DOpj1KzLvqZhdEe2wC1aG4nCHfzgc1Hg==}
+ /@mui/core-downloads-tracker/5.10.14:
+ resolution: {integrity: sha512-qLgIJNOR9Dre8JiZ/neVzOf4jf88J6YtOkQqugtMrleLjbfRVUSS4LWl9CSOjNq76quYdmYWnSDgfQqOooT2cQ==}
dev: false
- /@mui/icons-material/5.10.9_4tcfjhohj57yvze6zkot3vymie:
- resolution: {integrity: sha512-sqClXdEM39WKQJOQ0ZCPTptaZgqwibhj2EFV9N0v7BU1PO8y4OcX/a2wIQHn4fNuDjIZktJIBrmU23h7aqlGgg==}
+ /@mui/icons-material/5.10.14_edp4dc7hnxdrqofuyrrjp2id7y:
+ resolution: {integrity: sha512-qtH60slQa+7MZRn6kyui8rKuoGDglPqaHX+pzBKNvd8JCOlrnfY5DmGGDdToTXyXl8xJ8nhANZbrbpg7UVKq/Q==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@mui/material': ^5.0.0
@@ -2879,14 +2886,14 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.19.0
- '@mui/material': 5.10.13_thp4wrxo45nyllusrnt46mid4u
+ '@babel/runtime': 7.20.1
+ '@mui/material': 5.10.14_thp4wrxo45nyllusrnt46mid4u
'@types/react': 18.0.25
react: 18.2.0
dev: false
- /@mui/material/5.10.13_thp4wrxo45nyllusrnt46mid4u:
- resolution: {integrity: sha512-TkkT1rNc0/hhL4/+zv4gYcA6egNWBH/1Tz+azoTnQIUdZ32fgwFI2pFX2KVJNTt30xnLznxDWtTv7ilmJQ52xw==}
+ /@mui/material/5.10.14_thp4wrxo45nyllusrnt46mid4u:
+ resolution: {integrity: sha512-HWzKVAykePMx54WtxVwZyL1W4k3xlHYIqwMw0CaXAvgB3UE9yjABZuuGr8vG5Z6CSNWamzd+s1x8u7pQPFl9og==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@@ -2902,14 +2909,14 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
'@emotion/react': 11.10.5_fan5qbzahqtxlm5dzefqlqx5ia
'@emotion/styled': 11.10.5_otcjdfkheatawhug6fwk7ldzni
- '@mui/base': 5.0.0-alpha.105_2zx2umvpluuhvlq44va5bta2da
- '@mui/core-downloads-tracker': 5.10.13
- '@mui/system': 5.10.13_v64nlmo6pkqfmpmxge6otzlg54
- '@mui/types': 7.2.0_@types+react@18.0.25
- '@mui/utils': 5.10.9_react@18.2.0
+ '@mui/base': 5.0.0-alpha.106_2zx2umvpluuhvlq44va5bta2da
+ '@mui/core-downloads-tracker': 5.10.14
+ '@mui/system': 5.10.14_v64nlmo6pkqfmpmxge6otzlg54
+ '@mui/types': 7.2.1_@types+react@18.0.25
+ '@mui/utils': 5.10.14_react@18.2.0
'@types/react': 18.0.25
'@types/react-transition-group': 4.4.5
clsx: 1.2.1
@@ -2921,8 +2928,8 @@ packages:
react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y
dev: false
- /@mui/private-theming/5.10.9_fan5qbzahqtxlm5dzefqlqx5ia:
- resolution: {integrity: sha512-BN7/CnsVPVyBaQpDTij4uV2xGYHHHhOgpdxeYLlIu+TqnsVM7wUeF+37kXvHovxM6xmL5qoaVUD98gDC0IZnHg==}
+ /@mui/private-theming/5.10.14_fan5qbzahqtxlm5dzefqlqx5ia:
+ resolution: {integrity: sha512-3aIBe8WK65CwAPDY8nB11hYnzE1CZMymi76UnaFrA/DdGDwl5Y8F6uB+StKrkVmsqF1po7Mp2odqVkHj320gXw==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0 || 18
@@ -2931,15 +2938,15 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.19.4
- '@mui/utils': 5.10.9_react@18.2.0
+ '@babel/runtime': 7.20.1
+ '@mui/utils': 5.10.14_react@18.2.0
'@types/react': 18.0.25
prop-types: 15.8.1
react: 18.2.0
dev: false
- /@mui/styled-engine/5.10.8_dovxhg2tvkkxkdnqyoum6wzcxm:
- resolution: {integrity: sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==}
+ /@mui/styled-engine/5.10.14_dovxhg2tvkkxkdnqyoum6wzcxm:
+ resolution: {integrity: sha512-bgKdM57ExogWpIfhL/ngSlzF4FhbH00vYF+Y5VALTob4uslFqje0xzoWmbfcCn4cZt2NXxZJIwhsq4vzo5itlw==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.4.1
@@ -2951,7 +2958,7 @@ packages:
'@emotion/styled':
optional: true
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
'@emotion/cache': 11.10.5
'@emotion/react': 11.10.5_fan5qbzahqtxlm5dzefqlqx5ia
'@emotion/styled': 11.10.5_otcjdfkheatawhug6fwk7ldzni
@@ -2960,8 +2967,8 @@ packages:
react: 18.2.0
dev: false
- /@mui/styles/5.10.10_fan5qbzahqtxlm5dzefqlqx5ia:
- resolution: {integrity: sha512-utr87q/euocRdc2ekFX7DL1gqTVfogSVeu74Nspr8rtK/afC9QwF3ScP/XThVXWPcQKjBWHMKWtAO9BSVE4KDg==}
+ /@mui/styles/5.10.14_fan5qbzahqtxlm5dzefqlqx5ia:
+ resolution: {integrity: sha512-efmROE5O+9qV1Wj7Q/Cz3ZplsuqSwqWRFTUWwTuTedoLetAO6ExgV4vGD1bkFsr9+VkAfJV/Zy4KPM0ouok7aA==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || 18
@@ -2970,11 +2977,11 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.19.0
+ '@babel/runtime': 7.20.1
'@emotion/hash': 0.9.0
- '@mui/private-theming': 5.10.9_fan5qbzahqtxlm5dzefqlqx5ia
- '@mui/types': 7.2.0_@types+react@18.0.25
- '@mui/utils': 5.10.9_react@18.2.0
+ '@mui/private-theming': 5.10.14_fan5qbzahqtxlm5dzefqlqx5ia
+ '@mui/types': 7.2.1_@types+react@18.0.25
+ '@mui/utils': 5.10.14_react@18.2.0
'@types/react': 18.0.25
clsx: 1.2.1
csstype: 3.1.1
@@ -2991,8 +2998,8 @@ packages:
react: 18.2.0
dev: false
- /@mui/system/5.10.13_v64nlmo6pkqfmpmxge6otzlg54:
- resolution: {integrity: sha512-Xzx26Asu5fVlm0ucm+gnJmeX4Y1isrpVDvqxX4yJaOT7Fzmd8Lfq9ih3QMfZajns5LMtUiOuCQlVFRtUG5IY7A==}
+ /@mui/system/5.10.14_v64nlmo6pkqfmpmxge6otzlg54:
+ resolution: {integrity: sha512-2de7XCjRb1j8Od0Stmo0LwFMLpOMNT4wzfINuExXI1TVSuyxXIXUxiC5FEgJW3GMvf/a7SUR8VOiMoKlKWzukw==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@@ -3007,13 +3014,13 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
'@emotion/react': 11.10.5_fan5qbzahqtxlm5dzefqlqx5ia
'@emotion/styled': 11.10.5_otcjdfkheatawhug6fwk7ldzni
- '@mui/private-theming': 5.10.9_fan5qbzahqtxlm5dzefqlqx5ia
- '@mui/styled-engine': 5.10.8_dovxhg2tvkkxkdnqyoum6wzcxm
- '@mui/types': 7.2.0_@types+react@18.0.25
- '@mui/utils': 5.10.9_react@18.2.0
+ '@mui/private-theming': 5.10.14_fan5qbzahqtxlm5dzefqlqx5ia
+ '@mui/styled-engine': 5.10.14_dovxhg2tvkkxkdnqyoum6wzcxm
+ '@mui/types': 7.2.1_@types+react@18.0.25
+ '@mui/utils': 5.10.14_react@18.2.0
'@types/react': 18.0.25
clsx: 1.2.1
csstype: 3.1.1
@@ -3021,8 +3028,8 @@ packages:
react: 18.2.0
dev: false
- /@mui/types/7.2.0_@types+react@18.0.25:
- resolution: {integrity: sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==}
+ /@mui/types/7.2.1_@types+react@18.0.25:
+ resolution: {integrity: sha512-c5mSM7ivD8EsqK6HUi9hQPr5V7TJ/IRThUQ9nWNYPdhCGriTSQV4vL6DflT99LkM+wLiIS1rVjphpEWxERep7A==}
peerDependencies:
'@types/react': '*'
peerDependenciesMeta:
@@ -3032,13 +3039,13 @@ packages:
'@types/react': 18.0.25
dev: false
- /@mui/utils/5.10.9_react@18.2.0:
- resolution: {integrity: sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==}
+ /@mui/utils/5.10.14_react@18.2.0:
+ resolution: {integrity: sha512-12p59+wDZpA++XVJmKwqsZmrA1nmUQ5d0a1yQWtcDjxNyER1EDzozYN/db+FY2i5ceQh2TynPTEwGms2mXDwFg==}
engines: {node: '>=12.0.0'}
peerDependencies:
react: ^17.0.0 || ^18.0.0 || 18
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
'@types/prop-types': 15.7.5
'@types/react-is': 17.0.3
prop-types: 15.8.1
@@ -4005,7 +4012,7 @@ packages:
resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==}
engines: {node: '>=6.0'}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
'@babel/runtime-corejs3': 7.18.6
dev: true
@@ -4202,7 +4209,7 @@ packages:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
engines: {node: '>=10', npm: '>=6'}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
cosmiconfig: 7.0.1
resolve: 1.22.1
@@ -4755,7 +4762,7 @@ packages:
/css-vendor/2.0.8:
resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
is-in-browser: 1.1.3
dev: false
@@ -4953,7 +4960,7 @@ packages:
/dom-helpers/5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
csstype: 3.1.1
dev: false
@@ -7326,7 +7333,7 @@ packages:
/jss-plugin-camel-case/10.9.2:
resolution: {integrity: sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
hyphenate-style-name: 1.0.4
jss: 10.9.2
dev: false
@@ -7334,21 +7341,21 @@ packages:
/jss-plugin-default-unit/10.9.2:
resolution: {integrity: sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
jss: 10.9.2
dev: false
/jss-plugin-global/10.9.2:
resolution: {integrity: sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
jss: 10.9.2
dev: false
/jss-plugin-nested/10.9.2:
resolution: {integrity: sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
jss: 10.9.2
tiny-warning: 1.0.3
dev: false
@@ -7356,14 +7363,14 @@ packages:
/jss-plugin-props-sort/10.9.2:
resolution: {integrity: sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
jss: 10.9.2
dev: false
/jss-plugin-rule-value-function/10.9.2:
resolution: {integrity: sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
jss: 10.9.2
tiny-warning: 1.0.3
dev: false
@@ -7371,7 +7378,7 @@ packages:
/jss-plugin-vendor-prefixer/10.9.2:
resolution: {integrity: sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
css-vendor: 2.0.8
jss: 10.9.2
dev: false
@@ -7379,7 +7386,7 @@ packages:
/jss/10.9.2:
resolution: {integrity: sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
csstype: 3.1.1
is-in-browser: 1.1.3
tiny-warning: 1.0.3
@@ -8289,7 +8296,7 @@ packages:
react: '>=16.6.0 || 18'
react-dom: '>=16.6.0 || 18'
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
@@ -8359,13 +8366,16 @@ packages:
resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
dev: true
+ /regenerator-runtime/0.13.10:
+ resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==}
+
/regenerator-runtime/0.13.9:
resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==}
/regenerator-transform/0.15.0:
resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
dev: true
/regex-not/1.0.2:
From eb5890f2c3a75102358b482136537e3631dda80d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 15 Nov 2022 18:26:01 +0000
Subject: [PATCH 14/26] build(deps): update dependency vite to v3.2.4 (#4386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 32 ++++++++++++++++----------------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/web/package.json b/web/package.json
index e872e2e55..fbe959b79 100644
--- a/web/package.json
+++ b/web/package.json
@@ -176,7 +176,7 @@
"prettier": "2.7.1",
"react-test-renderer": "18.2.0",
"typescript": "4.8.4",
- "vite": "3.2.3",
+ "vite": "3.2.4",
"vite-plugin-eslint": "1.8.1",
"vite-plugin-istanbul": "3.0.2",
"vite-plugin-svgr": "2.2.2",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 031a829f4..d3a337c54 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -58,7 +58,7 @@ specifiers:
react-router-dom: 6.4.3
react-test-renderer: 18.2.0
typescript: 4.8.4
- vite: 3.2.3
+ vite: 3.2.4
vite-plugin-eslint: 1.8.1
vite-plugin-istanbul: 3.0.2
vite-plugin-svgr: 2.2.2
@@ -105,7 +105,7 @@ devDependencies:
'@types/zxcvbn': 4.4.1
'@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
'@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- '@vitejs/plugin-react': 2.2.0_vite@3.2.3
+ '@vitejs/plugin-react': 2.2.0_vite@3.2.4
esbuild: 0.15.14
esbuild-jest: 0.5.0_esbuild@0.15.14
eslint: 8.27.0
@@ -126,11 +126,11 @@ devDependencies:
prettier: 2.7.1
react-test-renderer: 18.2.0_react@18.2.0
typescript: 4.8.4
- vite: 3.2.3_@types+node@18.11.9
- vite-plugin-eslint: 1.8.1_eslint@8.27.0+vite@3.2.3
+ vite: 3.2.4_@types+node@18.11.9
+ vite-plugin-eslint: 1.8.1_eslint@8.27.0+vite@3.2.4
vite-plugin-istanbul: 3.0.2
- vite-plugin-svgr: 2.2.2_vite@3.2.3
- vite-tsconfig-paths: 3.5.2_vite@3.2.3
+ vite-plugin-svgr: 2.2.2_vite@3.2.4
+ vite-tsconfig-paths: 3.5.2_vite@3.2.4
packages:
@@ -3841,7 +3841,7 @@ packages:
eslint-visitor-keys: 3.3.0
dev: true
- /@vitejs/plugin-react/2.2.0_vite@3.2.3:
+ /@vitejs/plugin-react/2.2.0_vite@3.2.4:
resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -3854,7 +3854,7 @@ packages:
'@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.19.6
magic-string: 0.26.7
react-refresh: 0.14.0
- vite: 3.2.3_@types+node@18.11.9
+ vite: 3.2.4_@types+node@18.11.9
transitivePeerDependencies:
- supports-color
dev: true
@@ -9327,7 +9327,7 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
- /vite-plugin-eslint/1.8.1_eslint@8.27.0+vite@3.2.3:
+ /vite-plugin-eslint/1.8.1_eslint@8.27.0+vite@3.2.4:
resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
peerDependencies:
eslint: '>=7'
@@ -9337,7 +9337,7 @@ packages:
'@types/eslint': 8.4.5
eslint: 8.27.0
rollup: 2.78.0
- vite: 3.2.3_@types+node@18.11.9
+ vite: 3.2.4_@types+node@18.11.9
dev: true
/vite-plugin-istanbul/3.0.2:
@@ -9351,21 +9351,21 @@ packages:
- supports-color
dev: true
- /vite-plugin-svgr/2.2.2_vite@3.2.3:
+ /vite-plugin-svgr/2.2.2_vite@3.2.4:
resolution: {integrity: sha512-u8Ac27uZmDHTVGawpAhvLMJMuzbGeZGhe61TGeHoRQLxVhmQfIYCefa0iLbjC0ui1zFo6XZnS8EkzPITCYp85g==}
peerDependencies:
vite: ^2.6.0 || 3
dependencies:
'@rollup/pluginutils': 5.0.1
'@svgr/core': 6.4.0
- vite: 3.2.3_@types+node@18.11.9
+ vite: 3.2.4_@types+node@18.11.9
transitivePeerDependencies:
- '@babel/core'
- rollup
- supports-color
dev: true
- /vite-tsconfig-paths/3.5.2_vite@3.2.3:
+ /vite-tsconfig-paths/3.5.2_vite@3.2.4:
resolution: {integrity: sha512-xJMgHA2oJ28QCG2f+hXrcqzo7IttrSRK4A//Tp94CfuX5eetOx33qiwXHUdi3FwkHP2ocpxHuvE45Ix67gwEmQ==}
peerDependencies:
vite: '>2.0.0-0'
@@ -9374,13 +9374,13 @@ packages:
globrex: 0.1.2
recrawl-sync: 2.2.2
tsconfig-paths: 4.0.0
- vite: 3.2.3_@types+node@18.11.9
+ vite: 3.2.4_@types+node@18.11.9
transitivePeerDependencies:
- supports-color
dev: true
- /vite/3.2.3_@types+node@18.11.9:
- resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==}
+ /vite/3.2.4_@types+node@18.11.9:
+ resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
From eb5bde2171c16ea79b5efd7251bf23e03bd43ed7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 15 Nov 2022 22:11:31 +0000
Subject: [PATCH 15/26] build(deps): update font awesome to v6.2.1 (#4389)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 6 +++---
web/pnpm-lock.yaml | 40 ++++++++++++++++++++--------------------
2 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/web/package.json b/web/package.json
index fbe959b79..62909b640 100644
--- a/web/package.json
+++ b/web/package.json
@@ -21,9 +21,9 @@
"@emotion/cache": "11.10.5",
"@emotion/react": "11.10.5",
"@emotion/styled": "11.10.5",
- "@fortawesome/fontawesome-svg-core": "6.2.0",
- "@fortawesome/free-regular-svg-icons": "6.2.0",
- "@fortawesome/free-solid-svg-icons": "6.2.0",
+ "@fortawesome/fontawesome-svg-core": "6.2.1",
+ "@fortawesome/free-regular-svg-icons": "6.2.1",
+ "@fortawesome/free-solid-svg-icons": "6.2.1",
"@fortawesome/react-fontawesome": "0.2.0",
"@mui/icons-material": "5.10.14",
"@mui/material": "5.10.14",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index d3a337c54..25d16a4d8 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -6,9 +6,9 @@ specifiers:
'@emotion/cache': 11.10.5
'@emotion/react': 11.10.5
'@emotion/styled': 11.10.5
- '@fortawesome/fontawesome-svg-core': 6.2.0
- '@fortawesome/free-regular-svg-icons': 6.2.0
- '@fortawesome/free-solid-svg-icons': 6.2.0
+ '@fortawesome/fontawesome-svg-core': 6.2.1
+ '@fortawesome/free-regular-svg-icons': 6.2.1
+ '@fortawesome/free-solid-svg-icons': 6.2.1
'@fortawesome/react-fontawesome': 0.2.0
'@mui/icons-material': 5.10.14
'@mui/material': 5.10.14
@@ -69,10 +69,10 @@ dependencies:
'@emotion/cache': 11.10.5
'@emotion/react': 11.10.5_fan5qbzahqtxlm5dzefqlqx5ia
'@emotion/styled': 11.10.5_otcjdfkheatawhug6fwk7ldzni
- '@fortawesome/fontawesome-svg-core': 6.2.0
- '@fortawesome/free-regular-svg-icons': 6.2.0
- '@fortawesome/free-solid-svg-icons': 6.2.0
- '@fortawesome/react-fontawesome': 0.2.0_6j2wdqxompc6mcokhxkpep2gqu
+ '@fortawesome/fontawesome-svg-core': 6.2.1
+ '@fortawesome/free-regular-svg-icons': 6.2.1
+ '@fortawesome/free-solid-svg-icons': 6.2.1
+ '@fortawesome/react-fontawesome': 0.2.0_z27bm67dtmuyyvss23ckjdrcuy
'@mui/icons-material': 5.10.14_edp4dc7hnxdrqofuyrrjp2id7y
'@mui/material': 5.10.14_thp4wrxo45nyllusrnt46mid4u
'@mui/styles': 5.10.14_fan5qbzahqtxlm5dzefqlqx5ia
@@ -2478,43 +2478,43 @@ packages:
- supports-color
dev: true
- /@fortawesome/fontawesome-common-types/6.2.0:
- resolution: {integrity: sha512-rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==}
+ /@fortawesome/fontawesome-common-types/6.2.1:
+ resolution: {integrity: sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==}
engines: {node: '>=6'}
requiresBuild: true
dev: false
- /@fortawesome/fontawesome-svg-core/6.2.0:
- resolution: {integrity: sha512-Cf2mAAeMWFMzpLC7Y9H1I4o3wEU+XovVJhTiNG8ZNgSQj53yl7OCJaS80K4YjrABWZzbAHVaoHE1dVJ27AAYXw==}
+ /@fortawesome/fontawesome-svg-core/6.2.1:
+ resolution: {integrity: sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
- '@fortawesome/fontawesome-common-types': 6.2.0
+ '@fortawesome/fontawesome-common-types': 6.2.1
dev: false
- /@fortawesome/free-regular-svg-icons/6.2.0:
- resolution: {integrity: sha512-M1dG+PAmkYMTL9BSUHFXY5oaHwBYfHCPhbJ8qj8JELsc9XCrUJ6eEHWip4q0tE+h9C0DVyFkwIM9t7QYyCpprQ==}
+ /@fortawesome/free-regular-svg-icons/6.2.1:
+ resolution: {integrity: sha512-wiqcNDNom75x+pe88FclpKz7aOSqS2lOivZeicMV5KRwOAeypxEYWAK/0v+7r+LrEY30+qzh8r2XDaEHvoLsMA==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
- '@fortawesome/fontawesome-common-types': 6.2.0
+ '@fortawesome/fontawesome-common-types': 6.2.1
dev: false
- /@fortawesome/free-solid-svg-icons/6.2.0:
- resolution: {integrity: sha512-UjCILHIQ4I8cN46EiQn0CZL/h8AwCGgR//1c4R96Q5viSRwuKVo0NdQEc4bm+69ZwC0dUvjbDqAHF1RR5FA3XA==}
+ /@fortawesome/free-solid-svg-icons/6.2.1:
+ resolution: {integrity: sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
- '@fortawesome/fontawesome-common-types': 6.2.0
+ '@fortawesome/fontawesome-common-types': 6.2.1
dev: false
- /@fortawesome/react-fontawesome/0.2.0_6j2wdqxompc6mcokhxkpep2gqu:
+ /@fortawesome/react-fontawesome/0.2.0_z27bm67dtmuyyvss23ckjdrcuy:
resolution: {integrity: sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==}
peerDependencies:
'@fortawesome/fontawesome-svg-core': ~1 || ~6
react: '>=16.3 || 18'
dependencies:
- '@fortawesome/fontawesome-svg-core': 6.2.0
+ '@fortawesome/fontawesome-svg-core': 6.2.1
prop-types: 15.8.1
react: 18.2.0
dev: false
From 261c08118d32097c022a079a6c47116f24107127 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 16 Nov 2022 09:43:53 +1100
Subject: [PATCH 16/26] build(deps): update dependency typescript to v4.9.3
(#4390)
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 112 ++++++++++++++++++++++-----------------------
2 files changed, 57 insertions(+), 57 deletions(-)
diff --git a/web/package.json b/web/package.json
index 62909b640..a0d245d10 100644
--- a/web/package.json
+++ b/web/package.json
@@ -175,7 +175,7 @@
"jest-watch-typeahead": "2.2.0",
"prettier": "2.7.1",
"react-test-renderer": "18.2.0",
- "typescript": "4.8.4",
+ "typescript": "4.9.3",
"vite": "3.2.4",
"vite-plugin-eslint": "1.8.1",
"vite-plugin-istanbul": "3.0.2",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 25d16a4d8..2f5d89382 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -57,7 +57,7 @@ specifiers:
react-otp-input: 2.4.0
react-router-dom: 6.4.3
react-test-renderer: 18.2.0
- typescript: 4.8.4
+ typescript: 4.9.3
vite: 3.2.4
vite-plugin-eslint: 1.8.1
vite-plugin-istanbul: 3.0.2
@@ -103,14 +103,14 @@ devDependencies:
'@types/react': 18.0.25
'@types/react-dom': 18.0.9
'@types/zxcvbn': 4.4.1
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
+ '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
'@vitejs/plugin-react': 2.2.0_vite@3.2.4
esbuild: 0.15.14
esbuild-jest: 0.5.0_esbuild@0.15.14
eslint: 8.27.0
eslint-config-prettier: 8.5.0_eslint@8.27.0
- eslint-config-react-app: 7.0.1_ar3kwoulcryci6535wcfvjpsqy
+ eslint-config-react-app: 7.0.1_zpvrxn25tudpyta3yg53rikf4e
eslint-formatter-rdjson: 1.0.5
eslint-import-resolver-typescript: 3.5.2_dcpv4nbdr5ks2h5677xdltrk6e
eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
@@ -125,7 +125,7 @@ devDependencies:
jest-watch-typeahead: 2.2.0_jest@29.3.1
prettier: 2.7.1
react-test-renderer: 18.2.0_react@18.2.0
- typescript: 4.8.4
+ typescript: 4.9.3
vite: 3.2.4_@types+node@18.11.9
vite-plugin-eslint: 1.8.1_eslint@8.27.0+vite@3.2.4
vite-plugin-istanbul: 3.0.2
@@ -2227,11 +2227,11 @@ packages:
'@types/node': 14.18.26
chalk: 4.1.2
cosmiconfig: 7.0.1
- cosmiconfig-typescript-loader: 4.0.0_6y7t74n3veizl5rsceyhsjfzxy
+ cosmiconfig-typescript-loader: 4.0.0_cs4q7g5uavsvvdjjkl2t6wi57a
lodash: 4.17.21
resolve-from: 5.0.0
- ts-node: 10.9.0_kvex4k72pyqcsdotmwd3oetkri
- typescript: 4.8.4
+ ts-node: 10.9.0_omfyfib2yqj7pu7wtuw6wjyhwa
+ typescript: 4.9.3
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
@@ -3639,7 +3639,7 @@ packages:
resolution: {integrity: sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==}
dev: true
- /@typescript-eslint/eslint-plugin/5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i:
+ /@typescript-eslint/eslint-plugin/5.43.0_wze2rj5tow7zwqpgbdx2buoy3m:
resolution: {integrity: sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3650,36 +3650,36 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
'@typescript-eslint/scope-manager': 5.43.0
- '@typescript-eslint/type-utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/type-utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
debug: 4.3.4
eslint: 8.27.0
ignore: 5.2.0
natural-compare-lite: 1.4.0
regexpp: 3.2.0
semver: 7.3.7
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
+ tsutils: 3.21.0_typescript@4.9.3
+ typescript: 4.9.3
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/experimental-utils/5.30.6_rmayb2veg2btbq6mbmnyivgasy:
+ /@typescript-eslint/experimental-utils/5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y:
resolution: {integrity: sha512-bqvT+0L8IjtW7MCrMgm9oVNxs4g7mESro1mm5c1/SNfTnHuFTf9OUX1WzVkTz75M9cp//UrTrSmGvK48NEKshQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.30.6_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/utils': 5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y
eslint: 8.27.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/parser/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ /@typescript-eslint/parser/5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y:
resolution: {integrity: sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3691,10 +3691,10 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.43.0
'@typescript-eslint/types': 5.43.0
- '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
+ '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.9.3
debug: 4.3.4
eslint: 8.27.0
- typescript: 4.8.4
+ typescript: 4.9.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -3715,7 +3715,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.43.0
dev: true
- /@typescript-eslint/type-utils/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ /@typescript-eslint/type-utils/5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y:
resolution: {integrity: sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3725,12 +3725,12 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
- '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.9.3
+ '@typescript-eslint/utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
debug: 4.3.4
eslint: 8.27.0
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
+ tsutils: 3.21.0_typescript@4.9.3
+ typescript: 4.9.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -3745,7 +3745,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /@typescript-eslint/typescript-estree/5.30.6_typescript@4.8.4:
+ /@typescript-eslint/typescript-estree/5.30.6_typescript@4.9.3:
resolution: {integrity: sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3760,13 +3760,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.7
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
+ tsutils: 3.21.0_typescript@4.9.3
+ typescript: 4.9.3
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/typescript-estree/5.43.0_typescript@4.8.4:
+ /@typescript-eslint/typescript-estree/5.43.0_typescript@4.9.3:
resolution: {integrity: sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3781,13 +3781,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.7
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
+ tsutils: 3.21.0_typescript@4.9.3
+ typescript: 4.9.3
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/utils/5.30.6_rmayb2veg2btbq6mbmnyivgasy:
+ /@typescript-eslint/utils/5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y:
resolution: {integrity: sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3796,7 +3796,7 @@ packages:
'@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 5.30.6
'@typescript-eslint/types': 5.30.6
- '@typescript-eslint/typescript-estree': 5.30.6_typescript@4.8.4
+ '@typescript-eslint/typescript-estree': 5.30.6_typescript@4.9.3
eslint: 8.27.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.27.0
@@ -3805,7 +3805,7 @@ packages:
- typescript
dev: true
- /@typescript-eslint/utils/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ /@typescript-eslint/utils/5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y:
resolution: {integrity: sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3815,7 +3815,7 @@ packages:
'@types/semver': 7.3.12
'@typescript-eslint/scope-manager': 5.43.0
'@typescript-eslint/types': 5.43.0
- '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
+ '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.9.3
eslint: 8.27.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.27.0
@@ -4702,7 +4702,7 @@ packages:
requiresBuild: true
dev: true
- /cosmiconfig-typescript-loader/4.0.0_6y7t74n3veizl5rsceyhsjfzxy:
+ /cosmiconfig-typescript-loader/4.0.0_cs4q7g5uavsvvdjjkl2t6wi57a:
resolution: {integrity: sha512-cVpucSc2Tf+VPwCCR7SZzmQTQkPbkk4O01yXsYqXBIbjE1bhwqSyAgYQkRK1un4i0OPziTleqFhdkmOc4RQ/9g==}
engines: {node: '>=12', npm: '>=6'}
peerDependencies:
@@ -4713,8 +4713,8 @@ packages:
dependencies:
'@types/node': 14.18.26
cosmiconfig: 7.0.1
- ts-node: 10.9.0_kvex4k72pyqcsdotmwd3oetkri
- typescript: 4.8.4
+ ts-node: 10.9.0_omfyfib2yqj7pu7wtuw6wjyhwa
+ typescript: 4.9.3
dev: true
/cosmiconfig/7.0.1:
@@ -5335,7 +5335,7 @@ packages:
eslint: 8.27.0
dev: true
- /eslint-config-react-app/7.0.1_ar3kwoulcryci6535wcfvjpsqy:
+ /eslint-config-react-app/7.0.1_zpvrxn25tudpyta3yg53rikf4e:
resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -5348,19 +5348,19 @@ packages:
'@babel/core': 7.18.6
'@babel/eslint-parser': 7.18.2_chvycicpad5erj2yemazgxq6vy
'@rushstack/eslint-patch': 1.1.4
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
+ '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
babel-preset-react-app: 10.0.1
confusing-browser-globals: 1.0.11
eslint: 8.27.0
eslint-plugin-flowtype: 8.0.3_eslint@8.27.0
eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
- eslint-plugin-jest: 25.7.0_bf5qejdbjbrfwwaumpbpeb3h4e
+ eslint-plugin-jest: 25.7.0_fqtdfzmoyuw7rs7dg6fkh5euye
eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
eslint-plugin-react: 7.31.10_eslint@8.27.0
eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
- eslint-plugin-testing-library: 5.5.1_rmayb2veg2btbq6mbmnyivgasy
- typescript: 4.8.4
+ eslint-plugin-testing-library: 5.5.1_e3uo4sehh4zr4i6m57mkkxxv7y
+ typescript: 4.9.3
transitivePeerDependencies:
- '@babel/plugin-syntax-flow'
- '@babel/plugin-transform-react-jsx'
@@ -5421,7 +5421,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 3.5.2_dcpv4nbdr5ks2h5677xdltrk6e
@@ -5458,7 +5458,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
@@ -5479,7 +5479,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-jest/25.7.0_bf5qejdbjbrfwwaumpbpeb3h4e:
+ /eslint-plugin-jest/25.7.0_fqtdfzmoyuw7rs7dg6fkh5euye:
resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
peerDependencies:
@@ -5492,8 +5492,8 @@ packages:
jest:
optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/experimental-utils': 5.30.6_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
+ '@typescript-eslint/experimental-utils': 5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y
eslint: 8.27.0
jest: 29.3.1_@types+node@18.11.9
transitivePeerDependencies:
@@ -5572,13 +5572,13 @@ packages:
string.prototype.matchall: 4.0.7
dev: true
- /eslint-plugin-testing-library/5.5.1_rmayb2veg2btbq6mbmnyivgasy:
+ /eslint-plugin-testing-library/5.5.1_e3uo4sehh4zr4i6m57mkkxxv7y:
resolution: {integrity: sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'}
peerDependencies:
eslint: ^7.5.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
+ '@typescript-eslint/utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
eslint: 8.27.0
transitivePeerDependencies:
- supports-color
@@ -9071,7 +9071,7 @@ packages:
engines: {node: '>=8'}
dev: true
- /ts-node/10.9.0_kvex4k72pyqcsdotmwd3oetkri:
+ /ts-node/10.9.0_omfyfib2yqj7pu7wtuw6wjyhwa:
resolution: {integrity: sha512-bunW18GUyaCSYRev4DPf4SQpom3pWH29wKl0sDk5zE7ze19RImEVhCW7K4v3hHKkUyfWotU08ToE2RS+Y49aug==}
hasBin: true
peerDependencies:
@@ -9097,7 +9097,7 @@ packages:
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 4.8.4
+ typescript: 4.9.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
@@ -9127,14 +9127,14 @@ packages:
resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
dev: true
- /tsutils/3.21.0_typescript@4.8.4:
+ /tsutils/3.21.0_typescript@4.9.3:
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies:
tslib: 1.14.1
- typescript: 4.8.4
+ typescript: 4.9.3
dev: true
/type-check/0.3.2:
@@ -9192,8 +9192,8 @@ packages:
is-typedarray: 1.0.0
dev: true
- /typescript/4.8.4:
- resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
+ /typescript/4.9.3:
+ resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
From 13efc4217e758314b09655bbef591757db7e88d9 Mon Sep 17 00:00:00 2001
From: James Elliott
Date: Wed, 16 Nov 2022 13:47:20 +1100
Subject: [PATCH 17/26] docs: adjust issue templates (#4391)
* docs: adjust issue templates
* docs: adjust wording
---
.github/ISSUE_TEMPLATE/bug-report.yml | 48 +++++++++++++++----
.github/ISSUE_TEMPLATE/feature-request.yml | 10 ++++
.../github_issue_template_bug_report.yml.tmpl | 48 +++++++++++++++----
.../github_issue_template_feature.yml.tmpl | 10 ++++
4 files changed, 96 insertions(+), 20 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index 13ee8d8b9..5465cdbc7 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -9,7 +9,7 @@ body:
- type: markdown
attributes:
value: |
- Thanks for taking the time to fill out this bug report. If you are unsure if this is actually a bug we generally recommend creating a [Question and Answer Discussion](https://github.com/authelia/authelia/discussions/new?category=q-a) first.
+ Thanks for taking the time to fill out this bug report. If you are unsure if this is actually a bug and you still need some form of support we generally recommend creating a [Question and Answer Discussion](https://github.com/authelia/authelia/discussions/new?category=q-a) first.
Please review the following requirements before submitting this issue type:
@@ -17,7 +17,7 @@ body:
2. Please try to give as much information as possible for us to be able to reproduce the issue and provide a quick fix.
3. Please ensure an issue does not already exist for this potential bug.
4. Please only provide specific versions. Latest is not a version.
- 5. Please read the [Troubleshooting Sanitization](https://www.authelia.com/r/sanitize) reference guide if you plan on removing or adjusting any values for the logs or configuration files.
+ 5. Please read the [Troubleshooting Sanitization](https://www.authelia.com/r/sanitize) reference guide if you plan on sanitizing, removing, or adjusting any values for the logs or configuration files.
6. Please consider including a [HTTP Archive File](https://www.authelia.com/r/har) if you're having redirection issues.
- type: dropdown
id: version
@@ -119,19 +119,27 @@ body:
validations:
required: false
- type: textarea
- id: logs
+ id: configuration
attributes:
- label: Logs
- description: Provide the logs (the template will automatically put this content in a code block)
- render: shell
+ label: Configuration (Authelia)
+ description: Provide a complete configuration file (the template will automatically put this content in a code block)
+ render: yaml
validations:
required: false
- type: textarea
- id: configuration
+ id: logs
attributes:
- label: Configuration
- description: Provide the Authelia configuration file (the template will automatically put this content in a code block)
- render: yaml
+ label: Logs (Authelia)
+ description: Provide complete debug logs (the template will automatically put this content in a code block)
+ render: shell
+ validations:
+ required: true
+ - type: textarea
+ id: logs-other
+ attributes:
+ label: Logs (Proxy / Application)
+ description: Provide complete debug logs for the affected proxy and/or application if available and relevant (the template will automatically put this content in a code block)
+ render: shell
validations:
required: false
- type: textarea
@@ -141,4 +149,24 @@ body:
description: Provide any relevant specification or other documentation if applicable
validations:
required: false
+ - type: checkboxes
+ id: checklist
+ attributes:
+ label: Pre-Submission Checklist
+ description: By submitting this issue confirm all of the following
+ options:
+ - label: I agree to follow the [Code of Conduct](http://www.authelia.com/code-of-conduct)
+ required: true
+ - label: This is a bug report and not a support request
+ required: true
+ - label: I have read the security policy and this bug report is not a security issue or security related issue
+ required: true
+ - label: I have either included the complete configuration file or I am sure it's unrelated to the configuration
+ required: true
+ - label: I have provided all of the required information in full with the only alteration being reasonable sanitization in accordance with the [Troubleshooting Sanitization](https://www.authelia.com/r/sanitize) reference guide
+ required: true
+ - label: I have checked for related proxy or application logs and included them if available
+ required: true
+ - label: I have checked for related issues and checked the documentation
+ required: true
...
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
index 44832359d..607f832ff 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.yml
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -44,4 +44,14 @@ body:
description: Provide any relevant specification or other documentation if applicable
validations:
required: false
+ - type: checkboxes
+ id: checklist
+ attributes:
+ label: Pre-Submission Checklist
+ description: By submitting this issue confirm all of the following
+ options:
+ - label: I agree to follow the [Code of Conduct](http://www.authelia.com/code-of-conduct)
+ required: true
+ - label: I have checked for related issues and checked the documentation
+ required: true
...
diff --git a/cmd/authelia-gen/templates/github_issue_template_bug_report.yml.tmpl b/cmd/authelia-gen/templates/github_issue_template_bug_report.yml.tmpl
index 5b30bf63d..6e143e3e6 100644
--- a/cmd/authelia-gen/templates/github_issue_template_bug_report.yml.tmpl
+++ b/cmd/authelia-gen/templates/github_issue_template_bug_report.yml.tmpl
@@ -9,7 +9,7 @@ body:
- type: markdown
attributes:
value: |
- Thanks for taking the time to fill out this bug report. If you are unsure if this is actually a bug we generally recommend creating a [Question and Answer Discussion](https://github.com/authelia/authelia/discussions/new?category=q-a) first.
+ Thanks for taking the time to fill out this bug report. If you are unsure if this is actually a bug and you still need some form of support we generally recommend creating a [Question and Answer Discussion](https://github.com/authelia/authelia/discussions/new?category=q-a) first.
Please review the following requirements before submitting this issue type:
@@ -17,7 +17,7 @@ body:
2. Please try to give as much information as possible for us to be able to reproduce the issue and provide a quick fix.
3. Please ensure an issue does not already exist for this potential bug.
4. Please only provide specific versions. Latest is not a version.
- 5. Please read the [Troubleshooting Sanitization](https://www.authelia.com/r/sanitize) reference guide if you plan on removing or adjusting any values for the logs or configuration files.
+ 5. Please read the [Troubleshooting Sanitization](https://www.authelia.com/r/sanitize) reference guide if you plan on sanitizing, removing, or adjusting any values for the logs or configuration files.
6. Please consider including a [HTTP Archive File](https://www.authelia.com/r/har) if you're having redirection issues.
- type: dropdown
id: version
@@ -84,19 +84,27 @@ body:
validations:
required: false
- type: textarea
- id: logs
+ id: configuration
attributes:
- label: Logs
- description: Provide the logs (the template will automatically put this content in a code block)
- render: shell
+ label: Configuration (Authelia)
+ description: Provide a complete configuration file (the template will automatically put this content in a code block)
+ render: yaml
validations:
required: false
- type: textarea
- id: configuration
+ id: logs
attributes:
- label: Configuration
- description: Provide the Authelia configuration file (the template will automatically put this content in a code block)
- render: yaml
+ label: Logs (Authelia)
+ description: Provide complete debug logs (the template will automatically put this content in a code block)
+ render: shell
+ validations:
+ required: true
+ - type: textarea
+ id: logs-other
+ attributes:
+ label: Logs (Proxy / Application)
+ description: Provide complete debug logs for the affected proxy and/or application if available and relevant (the template will automatically put this content in a code block)
+ render: shell
validations:
required: false
- type: textarea
@@ -106,4 +114,24 @@ body:
description: Provide any relevant specification or other documentation if applicable
validations:
required: false
+ - type: checkboxes
+ id: checklist
+ attributes:
+ label: Pre-Submission Checklist
+ description: By submitting this issue confirm all of the following
+ options:
+ - label: I agree to follow the [Code of Conduct](http://www.authelia.com/code-of-conduct)
+ required: true
+ - label: This is a bug report and not a support request
+ required: true
+ - label: I have read the security policy and this bug report is not a security issue or security related issue
+ required: true
+ - label: I have either included the complete configuration file or I am sure it's unrelated to the configuration
+ required: true
+ - label: I have provided all of the required information in full with the only alteration being reasonable sanitization in accordance with the [Troubleshooting Sanitization](https://www.authelia.com/r/sanitize) reference guide
+ required: true
+ - label: I have checked for related proxy or application logs and included them if available
+ required: true
+ - label: I have checked for related issues and checked the documentation
+ required: true
...
diff --git a/cmd/authelia-gen/templates/github_issue_template_feature.yml.tmpl b/cmd/authelia-gen/templates/github_issue_template_feature.yml.tmpl
index 0e3ca87c5..c9d7ed245 100644
--- a/cmd/authelia-gen/templates/github_issue_template_feature.yml.tmpl
+++ b/cmd/authelia-gen/templates/github_issue_template_feature.yml.tmpl
@@ -44,4 +44,14 @@ body:
description: Provide any relevant specification or other documentation if applicable
validations:
required: false
+ - type: checkboxes
+ id: checklist
+ attributes:
+ label: Pre-Submission Checklist
+ description: By submitting this issue confirm all of the following
+ options:
+ - label: I agree to follow the [Code of Conduct](http://www.authelia.com/code-of-conduct)
+ required: true
+ - label: I have checked for related issues and checked the documentation
+ required: true
...
From b5838af95458754a4a22a66c0b205a317a77a413 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 16 Nov 2022 18:20:57 +0000
Subject: [PATCH 18/26] build(deps): update dependency jest-watch-typeahead to
v2.2.1 (#4392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 59 ++++++++++++++++------------------------------
2 files changed, 21 insertions(+), 40 deletions(-)
diff --git a/web/package.json b/web/package.json
index a0d245d10..a4bb3eb54 100644
--- a/web/package.json
+++ b/web/package.json
@@ -172,7 +172,7 @@
"jest": "29.3.1",
"jest-environment-jsdom": "29.3.1",
"jest-transform-stub": "2.0.0",
- "jest-watch-typeahead": "2.2.0",
+ "jest-watch-typeahead": "2.2.1",
"prettier": "2.7.1",
"react-test-renderer": "18.2.0",
"typescript": "4.9.3",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 2f5d89382..311f1986f 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -46,7 +46,7 @@ specifiers:
jest: 29.3.1
jest-environment-jsdom: 29.3.1
jest-transform-stub: 2.0.0
- jest-watch-typeahead: 2.2.0
+ jest-watch-typeahead: 2.2.1
prettier: 2.7.1
qrcode.react: 3.1.0
query-string: 7.1.1
@@ -122,7 +122,7 @@ devDependencies:
jest: 29.3.1_@types+node@18.11.9
jest-environment-jsdom: 29.3.1
jest-transform-stub: 2.0.0
- jest-watch-typeahead: 2.2.0_jest@29.3.1
+ jest-watch-typeahead: 2.2.1_jest@29.3.1
prettier: 2.7.1
react-test-renderer: 18.2.0_react@18.2.0
typescript: 4.9.3
@@ -3942,11 +3942,11 @@ packages:
type-fest: 0.21.3
dev: true
- /ansi-escapes/5.0.0:
- resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==}
- engines: {node: '>=12'}
+ /ansi-escapes/6.0.0:
+ resolution: {integrity: sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==}
+ engines: {node: '>=14.16'}
dependencies:
- type-fest: 1.4.0
+ type-fest: 3.2.0
dev: true
/ansi-regex/5.0.1:
@@ -4986,11 +4986,6 @@ packages:
resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
dev: true
- /emittery/0.10.2:
- resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==}
- engines: {node: '>=12'}
- dev: true
-
/emittery/0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
@@ -6957,11 +6952,6 @@ packages:
engines: {node: '>= 10.14.2'}
dev: true
- /jest-regex-util/29.0.0:
- resolution: {integrity: sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
-
/jest-regex-util/29.2.0:
resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -7131,36 +7121,22 @@ packages:
pretty-format: 29.3.1
dev: true
- /jest-watch-typeahead/2.2.0_jest@29.3.1:
- resolution: {integrity: sha512-cM3Qbw9P+jUYxqUSt53KdDDFRVBG96XA6bsIAG0zffl/gUkNK/kjWcCX7R559BgPWs2/UDrsJHPIw2f6b0qZCw==}
+ /jest-watch-typeahead/2.2.1_jest@29.3.1:
+ resolution: {integrity: sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==}
engines: {node: ^14.17.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
jest: ^27.0.0 || ^28.0.0 || ^29.0.0
dependencies:
- ansi-escapes: 5.0.0
+ ansi-escapes: 6.0.0
chalk: 4.1.2
jest: 29.3.1_@types+node@18.11.9
- jest-regex-util: 29.0.0
- jest-watcher: 29.0.3
- slash: 4.0.0
+ jest-regex-util: 29.2.0
+ jest-watcher: 29.3.1
+ slash: 5.0.0
string-length: 5.0.1
strip-ansi: 7.0.1
dev: true
- /jest-watcher/29.0.3:
- resolution: {integrity: sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/test-result': 29.3.1
- '@jest/types': 29.3.1
- '@types/node': 18.11.9
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- emittery: 0.10.2
- jest-util: 29.3.1
- string-length: 4.0.2
- dev: true
-
/jest-watcher/29.3.1:
resolution: {integrity: sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -8671,6 +8647,11 @@ packages:
engines: {node: '>=12'}
dev: true
+ /slash/5.0.0:
+ resolution: {integrity: sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==}
+ engines: {node: '>=14.16'}
+ dev: true
+
/snapdragon-node/2.1.1:
resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
engines: {node: '>=0.10.0'}
@@ -9181,9 +9162,9 @@ packages:
engines: {node: '>=8'}
dev: true
- /type-fest/1.4.0:
- resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
- engines: {node: '>=10'}
+ /type-fest/3.2.0:
+ resolution: {integrity: sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==}
+ engines: {node: '>=14.16'}
dev: true
/typedarray-to-buffer/3.1.5:
From aca2d4db619ed85c2d6f7f428668325d3e689fd1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 17 Nov 2022 17:56:25 +0000
Subject: [PATCH 19/26] build(deps): update dependency i18next to v22.0.6
(#4395)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 18 +++++++++---------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/web/package.json b/web/package.json
index a4bb3eb54..5925df088 100644
--- a/web/package.json
+++ b/web/package.json
@@ -31,7 +31,7 @@
"axios": "1.1.3",
"broadcast-channel": "4.18.1",
"classnames": "2.3.2",
- "i18next": "22.0.5",
+ "i18next": "22.0.6",
"i18next-browser-languagedetector": "7.0.1",
"i18next-http-backend": "2.0.1",
"qrcode.react": "3.1.0",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 311f1986f..f7d21f9f2 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -40,7 +40,7 @@ specifiers:
eslint-plugin-react: 7.31.10
eslint-plugin-react-hooks: 4.6.0
husky: 8.0.2
- i18next: 22.0.5
+ i18next: 22.0.6
i18next-browser-languagedetector: 7.0.1
i18next-http-backend: 2.0.1
jest: 29.3.1
@@ -79,14 +79,14 @@ dependencies:
axios: 1.1.3
broadcast-channel: 4.18.1
classnames: 2.3.2
- i18next: 22.0.5
+ i18next: 22.0.6
i18next-browser-languagedetector: 7.0.1
i18next-http-backend: 2.0.1
qrcode.react: 3.1.0_react@18.2.0
query-string: 7.1.1
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
- react-i18next: 12.0.0_e52s5leb62x5eudkmfoztpifde
+ react-i18next: 12.0.0_nger6pvrp5hnzeykouhwqmsdti
react-loading: 2.0.3_react@18.2.0
react-otp-input: 2.4.0_biqbaboplfbrettd7655fr4n2y
react-router-dom: 6.4.3_biqbaboplfbrettd7655fr4n2y
@@ -6291,10 +6291,10 @@ packages:
- encoding
dev: false
- /i18next/22.0.5:
- resolution: {integrity: sha512-N2AXKCLHzv1ClfLqiwbAPJHClovfRv9iplySiZ/S3LfQ7PNjkVEkVpFbhCXDsPhQd6kLp6DKjbzpowniE8Mdiw==}
+ /i18next/22.0.6:
+ resolution: {integrity: sha512-RlreNGoPIdDP4QG+qSA9PxZKGwlzmcozbI9ObI6+OyUa/Rp0EjZZA9ubyBjw887zVNZsC+7FI3sXX8oiTzAfig==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
dev: false
/iconv-lite/0.6.3:
@@ -8165,7 +8165,7 @@ packages:
react: 18.2.0
scheduler: 0.23.0
- /react-i18next/12.0.0_e52s5leb62x5eudkmfoztpifde:
+ /react-i18next/12.0.0_nger6pvrp5hnzeykouhwqmsdti:
resolution: {integrity: sha512-/O7N6aIEAl1FaWZBNvhdIo9itvF/MO/nRKr9pYqRc9LhuC1u21SlfwpiYQqvaeNSEW3g3qUXLREOWMt+gxrWbg==}
peerDependencies:
i18next: '>= 19.0.0'
@@ -8180,7 +8180,7 @@ packages:
dependencies:
'@babel/runtime': 7.19.0
html-parse-stringify: 3.0.1
- i18next: 22.0.5
+ i18next: 22.0.6
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
dev: false
@@ -9234,7 +9234,7 @@ packages:
/unload/2.3.1:
resolution: {integrity: sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==}
dependencies:
- '@babel/runtime': 7.19.4
+ '@babel/runtime': 7.20.1
detect-node: 2.1.0
dev: false
From 273439e996f2dd86d97a94a69077209b554dba63 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 17 Nov 2022 22:30:49 +0000
Subject: [PATCH 20/26] build(deps): update
github.com/duosecurity/duo_api_golang digest to 091daa0 (#4396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index e4578c6d5..cad12f4c1 100644
--- a/go.mod
+++ b/go.mod
@@ -6,7 +6,7 @@ require (
github.com/Gurpartap/logrus-stack v0.0.0-20170710170904-89c00d8a28f4
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
github.com/deckarep/golang-set v1.8.0
- github.com/duosecurity/duo_api_golang v0.0.0-20220927171823-f4576e85b96c
+ github.com/duosecurity/duo_api_golang v0.0.0-20221117185402-091daa09e19d
github.com/fasthttp/router v1.4.13
github.com/fasthttp/session/v2 v2.4.13
github.com/fsnotify/fsnotify v1.6.0
diff --git a/go.sum b/go.sum
index c1581b474..06a6415dd 100644
--- a/go.sum
+++ b/go.sum
@@ -127,8 +127,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
-github.com/duosecurity/duo_api_golang v0.0.0-20220927171823-f4576e85b96c h1:SndVaMnkMWHtn0TyWx8kX7Oees7wPhCCx+wFDWHXsac=
-github.com/duosecurity/duo_api_golang v0.0.0-20220927171823-f4576e85b96c/go.mod h1:jI+QUTOK3wqIOrUl0Cwnwlgc/P6vs6pZOuQY3aKggwg=
+github.com/duosecurity/duo_api_golang v0.0.0-20221117185402-091daa09e19d h1:DdF2JKufY7l8IBJuGeanPFR5gVpWJfEh1LWJFM/zDas=
+github.com/duosecurity/duo_api_golang v0.0.0-20221117185402-091daa09e19d/go.mod h1:jI+QUTOK3wqIOrUl0Cwnwlgc/P6vs6pZOuQY3aKggwg=
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/ecordell/optgen v0.0.6 h1:aSknPe6ZUBrjwHGp2+6XfmfCGYGD6W0ZDfCmmsrS7s4=
From a4d9d488b10b1ff7aff177861d4ceb0f6f6c1284 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Nov 2022 01:29:38 +0000
Subject: [PATCH 21/26] build(deps): update traefik docker tag to v2.9.5
(#4398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
examples/compose/lite/docker-compose.yml | 2 +-
examples/compose/local/docker-compose.yml | 2 +-
internal/suites/example/compose/traefik2/docker-compose.yml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/examples/compose/lite/docker-compose.yml b/examples/compose/lite/docker-compose.yml
index 7ed0312ed..99f530af9 100644
--- a/examples/compose/lite/docker-compose.yml
+++ b/examples/compose/lite/docker-compose.yml
@@ -45,7 +45,7 @@ services:
- TZ=Australia/Melbourne
traefik:
- image: traefik:v2.9.4
+ image: traefik:v2.9.5
container_name: traefik
volumes:
- ./traefik:/etc/traefik
diff --git a/examples/compose/local/docker-compose.yml b/examples/compose/local/docker-compose.yml
index f3453c8c1..51de7d24d 100644
--- a/examples/compose/local/docker-compose.yml
+++ b/examples/compose/local/docker-compose.yml
@@ -32,7 +32,7 @@ services:
- TZ=Australia/Melbourne
traefik:
- image: traefik:v2.9.4
+ image: traefik:v2.9.5
container_name: traefik
volumes:
- ./traefik:/etc/traefik
diff --git a/internal/suites/example/compose/traefik2/docker-compose.yml b/internal/suites/example/compose/traefik2/docker-compose.yml
index a99aea134..af291082d 100644
--- a/internal/suites/example/compose/traefik2/docker-compose.yml
+++ b/internal/suites/example/compose/traefik2/docker-compose.yml
@@ -2,7 +2,7 @@
version: '3'
services:
traefik:
- image: traefik:v2.9.4
+ image: traefik:v2.9.5
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
labels:
From 1c413bae52fe1f117690aa3c5ed56856bb4a85fd Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Nov 2022 07:33:48 +0000
Subject: [PATCH 22/26] build(deps): update module github.com/jackc/pgx/v5 to
v5.1.1 (#4400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index cad12f4c1..b9f3ecd3c 100644
--- a/go.mod
+++ b/go.mod
@@ -20,7 +20,7 @@ require (
github.com/golang/mock v1.6.0
github.com/google/uuid v1.3.0
github.com/hashicorp/go-retryablehttp v0.7.1
- github.com/jackc/pgx/v5 v5.1.0
+ github.com/jackc/pgx/v5 v5.1.1
github.com/jmoiron/sqlx v1.3.5
github.com/knadh/koanf v1.4.4
github.com/mattn/go-sqlite3 v1.14.16
diff --git a/go.sum b/go.sum
index 06a6415dd..d4dbd1d6f 100644
--- a/go.sum
+++ b/go.sum
@@ -338,8 +338,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
-github.com/jackc/pgx/v5 v5.1.0 h1:Z7pLKUb65HK6m18No8GGKT87K34NhIIEHa86rRdjxbU=
-github.com/jackc/pgx/v5 v5.1.0/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk=
+github.com/jackc/pgx/v5 v5.1.1 h1:pZD79K1SYv8wc2HmCQA6VdmRQi7/OtCfv9bM3WAXUYA=
+github.com/jackc/pgx/v5 v5.1.1/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk=
github.com/jandelgado/gcov2lcov v1.0.5 h1:rkBt40h0CVK4oCb8Dps950gvfd1rYvQ8+cWa346lVU0=
github.com/jandelgado/gcov2lcov v1.0.5/go.mod h1:NnSxK6TMlg1oGDBfGelGbjgorT5/L3cchlbtgFYZSss=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
From 47b78f22724471d3f4427fc4a380379380e293e9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Nov 2022 10:50:47 +0000
Subject: [PATCH 23/26] build(deps): update mariadb docker tag to v10.10.2
(#4399)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
internal/suites/example/compose/mariadb/docker-compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/internal/suites/example/compose/mariadb/docker-compose.yml b/internal/suites/example/compose/mariadb/docker-compose.yml
index 72e1661d2..114a75325 100644
--- a/internal/suites/example/compose/mariadb/docker-compose.yml
+++ b/internal/suites/example/compose/mariadb/docker-compose.yml
@@ -2,7 +2,7 @@
version: '3'
services:
mariadb:
- image: mariadb:10.9.4
+ image: mariadb:10.10.2
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=admin
From 29f455d31cdbe680267aac70fd9fdf02cd918bb4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 18 Nov 2022 22:59:45 +0000
Subject: [PATCH 24/26] build(deps): update dependency eslint-plugin-react to
v7.31.11 (#4401)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 154 ++++++++++++++++++++++++++++++---------------
2 files changed, 103 insertions(+), 53 deletions(-)
diff --git a/web/package.json b/web/package.json
index 5925df088..d93524791 100644
--- a/web/package.json
+++ b/web/package.json
@@ -166,7 +166,7 @@
"eslint-plugin-import": "2.26.0",
"eslint-plugin-jsx-a11y": "6.6.1",
"eslint-plugin-prettier": "4.2.1",
- "eslint-plugin-react": "7.31.10",
+ "eslint-plugin-react": "7.31.11",
"eslint-plugin-react-hooks": "4.6.0",
"husky": "8.0.2",
"jest": "29.3.1",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index f7d21f9f2..d334e90b6 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -37,7 +37,7 @@ specifiers:
eslint-plugin-import: 2.26.0
eslint-plugin-jsx-a11y: 6.6.1
eslint-plugin-prettier: 4.2.1
- eslint-plugin-react: 7.31.10
+ eslint-plugin-react: 7.31.11
eslint-plugin-react-hooks: 4.6.0
husky: 8.0.2
i18next: 22.0.6
@@ -116,7 +116,7 @@ devDependencies:
eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
eslint-plugin-prettier: 4.2.1_v7o5sx5x3wbs57ifz6wc4f76we
- eslint-plugin-react: 7.31.10_eslint@8.27.0
+ eslint-plugin-react: 7.31.11_eslint@8.27.0
eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
husky: 8.0.2
jest: 29.3.1_@types+node@18.11.9
@@ -4046,8 +4046,19 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
- get-intrinsic: 1.1.2
+ es-abstract: 1.20.4
+ get-intrinsic: 1.1.3
+ is-string: 1.0.7
+ dev: true
+
+ /array-includes/3.1.6:
+ resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.4
+ get-intrinsic: 1.1.3
is-string: 1.0.7
dev: true
@@ -4067,20 +4078,30 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
es-shim-unscopables: 1.0.0
dev: true
- /array.prototype.flatmap/1.3.0:
- resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==}
+ /array.prototype.flatmap/1.3.1:
+ resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
es-shim-unscopables: 1.0.0
dev: true
+ /array.prototype.tosorted/1.1.1:
+ resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.4
+ es-shim-unscopables: 1.0.0
+ get-intrinsic: 1.1.3
+ dev: true
+
/arrify/1.0.1:
resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
engines: {node: '>=0.10.0'}
@@ -4472,7 +4493,7 @@ packages:
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
dependencies:
function-bind: 1.1.1
- get-intrinsic: 1.1.2
+ get-intrinsic: 1.1.3
dev: true
/callsites/3.1.0:
@@ -5023,21 +5044,21 @@ packages:
dependencies:
is-arrayish: 0.2.1
- /es-abstract/1.20.1:
- resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==}
+ /es-abstract/1.20.4:
+ resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
es-to-primitive: 1.2.1
function-bind: 1.1.1
function.prototype.name: 1.1.5
- get-intrinsic: 1.1.2
+ get-intrinsic: 1.1.3
get-symbol-description: 1.0.0
has: 1.0.3
has-property-descriptors: 1.0.0
has-symbols: 1.0.3
internal-slot: 1.0.3
- is-callable: 1.2.4
+ is-callable: 1.2.7
is-negative-zero: 2.0.2
is-regex: 1.1.4
is-shared-array-buffer: 1.0.2
@@ -5045,8 +5066,9 @@ packages:
is-weakref: 1.0.2
object-inspect: 1.12.2
object-keys: 1.1.1
- object.assign: 4.1.2
+ object.assign: 4.1.4
regexp.prototype.flags: 1.4.3
+ safe-regex-test: 1.0.0
string.prototype.trimend: 1.0.5
string.prototype.trimstart: 1.0.5
unbox-primitive: 1.0.2
@@ -5062,7 +5084,7 @@ packages:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
engines: {node: '>= 0.4'}
dependencies:
- is-callable: 1.2.4
+ is-callable: 1.2.7
is-date-object: 1.0.5
is-symbol: 1.0.4
dev: true
@@ -5352,7 +5374,7 @@ packages:
eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
eslint-plugin-jest: 25.7.0_fqtdfzmoyuw7rs7dg6fkh5euye
eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
- eslint-plugin-react: 7.31.10_eslint@8.27.0
+ eslint-plugin-react: 7.31.11_eslint@8.27.0
eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
eslint-plugin-testing-library: 5.5.1_e3uo4sehh4zr4i6m57mkkxxv7y
typescript: 4.9.3
@@ -5544,27 +5566,28 @@ packages:
eslint: 8.27.0
dev: true
- /eslint-plugin-react/7.31.10_eslint@8.27.0:
- resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==}
+ /eslint-plugin-react/7.31.11_eslint@8.27.0:
+ resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
dependencies:
- array-includes: 3.1.5
- array.prototype.flatmap: 1.3.0
+ array-includes: 3.1.6
+ array.prototype.flatmap: 1.3.1
+ array.prototype.tosorted: 1.1.1
doctrine: 2.1.0
eslint: 8.27.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.2
minimatch: 3.1.2
- object.entries: 1.1.5
- object.fromentries: 2.0.5
- object.hasown: 1.1.1
- object.values: 1.1.5
+ object.entries: 1.1.6
+ object.fromentries: 2.0.6
+ object.hasown: 1.1.2
+ object.values: 1.1.6
prop-types: 15.8.1
resolve: 2.0.0-next.4
semver: 6.3.0
- string.prototype.matchall: 4.0.7
+ string.prototype.matchall: 4.0.8
dev: true
/eslint-plugin-testing-library/5.5.1_e3uo4sehh4zr4i6m57mkkxxv7y:
@@ -5976,7 +5999,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
functions-have-names: 1.2.3
dev: true
@@ -5994,8 +6017,8 @@ packages:
engines: {node: 6.* || 8.* || >= 10.*}
dev: true
- /get-intrinsic/1.1.2:
- resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==}
+ /get-intrinsic/1.1.3:
+ resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
dependencies:
function-bind: 1.1.1
has: 1.0.3
@@ -6024,7 +6047,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
- get-intrinsic: 1.1.2
+ get-intrinsic: 1.1.3
dev: true
/get-tsconfig/4.2.0:
@@ -6155,7 +6178,7 @@ packages:
/has-property-descriptors/1.0.0:
resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
dependencies:
- get-intrinsic: 1.1.2
+ get-intrinsic: 1.1.3
dev: true
/has-symbols/1.0.3:
@@ -6352,7 +6375,7 @@ packages:
resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
engines: {node: '>= 0.4'}
dependencies:
- get-intrinsic: 1.1.2
+ get-intrinsic: 1.1.3
has: 1.0.3
side-channel: 1.0.4
dev: true
@@ -6392,8 +6415,8 @@ packages:
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
dev: true
- /is-callable/1.2.4:
- resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==}
+ /is-callable/1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
dev: true
@@ -7372,8 +7395,8 @@ packages:
resolution: {integrity: sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==}
engines: {node: '>=4.0'}
dependencies:
- array-includes: 3.1.5
- object.assign: 4.1.2
+ array-includes: 3.1.6
+ object.assign: 4.1.4
dev: true
/kind-of/3.2.2:
@@ -7795,29 +7818,39 @@ packages:
object-keys: 1.1.1
dev: true
- /object.entries/1.1.5:
- resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==}
+ /object.assign/4.1.4:
+ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
dev: true
- /object.fromentries/2.0.5:
- resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==}
+ /object.entries/1.1.6:
+ resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
dev: true
- /object.hasown/1.1.1:
- resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==}
+ /object.fromentries/2.0.6:
+ resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.4
+ dev: true
+
+ /object.hasown/1.1.2:
+ resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
dependencies:
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
dev: true
/object.pick/1.3.0:
@@ -7833,7 +7866,16 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
+ dev: true
+
+ /object.values/1.1.6:
+ resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.4
dev: true
/oblivious-set/1.1.1:
@@ -8523,6 +8565,14 @@ packages:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: true
+ /safe-regex-test/1.0.0:
+ resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.1.3
+ is-regex: 1.1.4
+ dev: true
+
/safe-regex/1.1.0:
resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
dependencies:
@@ -8625,7 +8675,7 @@ packages:
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
dependencies:
call-bind: 1.0.2
- get-intrinsic: 1.1.2
+ get-intrinsic: 1.1.3
object-inspect: 1.12.2
dev: true
@@ -8818,13 +8868,13 @@ packages:
strip-ansi: 6.0.1
dev: true
- /string.prototype.matchall/4.0.7:
- resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==}
+ /string.prototype.matchall/4.0.8:
+ resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
- get-intrinsic: 1.1.2
+ es-abstract: 1.20.4
+ get-intrinsic: 1.1.3
has-symbols: 1.0.3
internal-slot: 1.0.3
regexp.prototype.flags: 1.4.3
@@ -8836,7 +8886,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
dev: true
/string.prototype.trimstart/1.0.5:
@@ -8844,7 +8894,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.1
+ es-abstract: 1.20.4
dev: true
/string_decoder/1.3.0:
From d32e58c457625bb56cc2b90206ec4885fda3301c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 19 Nov 2022 01:49:02 +0000
Subject: [PATCH 25/26] build(deps): update dependency eslint to v8.28.0
(#4402)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
web/package.json | 2 +-
web/pnpm-lock.yaml | 162 ++++++++++++++++++++++-----------------------
2 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/web/package.json b/web/package.json
index d93524791..02c8bc8c7 100644
--- a/web/package.json
+++ b/web/package.json
@@ -158,7 +158,7 @@
"@vitejs/plugin-react": "2.2.0",
"esbuild": "0.15.14",
"esbuild-jest": "0.5.0",
- "eslint": "8.27.0",
+ "eslint": "8.28.0",
"eslint-config-prettier": "8.5.0",
"eslint-config-react-app": "7.0.1",
"eslint-formatter-rdjson": "1.0.5",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index d334e90b6..9427b3951 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -29,7 +29,7 @@ specifiers:
classnames: 2.3.2
esbuild: 0.15.14
esbuild-jest: 0.5.0
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-config-prettier: 8.5.0
eslint-config-react-app: 7.0.1
eslint-formatter-rdjson: 1.0.5
@@ -103,21 +103,21 @@ devDependencies:
'@types/react': 18.0.25
'@types/react-dom': 18.0.9
'@types/zxcvbn': 4.4.1
- '@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
- '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/eslint-plugin': 5.43.0_nqj4bdx4ekws7aecttskpih4py
+ '@typescript-eslint/parser': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
'@vitejs/plugin-react': 2.2.0_vite@3.2.4
esbuild: 0.15.14
esbuild-jest: 0.5.0_esbuild@0.15.14
- eslint: 8.27.0
- eslint-config-prettier: 8.5.0_eslint@8.27.0
- eslint-config-react-app: 7.0.1_zpvrxn25tudpyta3yg53rikf4e
+ eslint: 8.28.0
+ eslint-config-prettier: 8.5.0_eslint@8.28.0
+ eslint-config-react-app: 7.0.1_ffu622cxxp5swe5tqcog7svb5i
eslint-formatter-rdjson: 1.0.5
- eslint-import-resolver-typescript: 3.5.2_dcpv4nbdr5ks2h5677xdltrk6e
- eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
- eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
- eslint-plugin-prettier: 4.2.1_v7o5sx5x3wbs57ifz6wc4f76we
- eslint-plugin-react: 7.31.11_eslint@8.27.0
- eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
+ eslint-import-resolver-typescript: 3.5.2_ktrec6dplf4now6nlbc6d67jee
+ eslint-plugin-import: 2.26.0_d5vn4nsvkp5ugznurcfxmdkaeu
+ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.28.0
+ eslint-plugin-prettier: 4.2.1_pgxuib4rd7wiymfktharf5ydt4
+ eslint-plugin-react: 7.31.11_eslint@8.28.0
+ eslint-plugin-react-hooks: 4.6.0_eslint@8.28.0
husky: 8.0.2
jest: 29.3.1_@types+node@18.11.9
jest-environment-jsdom: 29.3.1
@@ -127,7 +127,7 @@ devDependencies:
react-test-renderer: 18.2.0_react@18.2.0
typescript: 4.9.3
vite: 3.2.4_@types+node@18.11.9
- vite-plugin-eslint: 1.8.1_eslint@8.27.0+vite@3.2.4
+ vite-plugin-eslint: 1.8.1_eslint@8.28.0+vite@3.2.4
vite-plugin-istanbul: 3.0.2
vite-plugin-svgr: 2.2.2_vite@3.2.4
vite-tsconfig-paths: 3.5.2_vite@3.2.4
@@ -208,7 +208,7 @@ packages:
- supports-color
dev: true
- /@babel/eslint-parser/7.18.2_chvycicpad5erj2yemazgxq6vy:
+ /@babel/eslint-parser/7.18.2_e6dejpcwcc66ssvjscxl7tagl4:
resolution: {integrity: sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
@@ -219,7 +219,7 @@ packages:
optional: true
dependencies:
'@babel/core': 7.18.6
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-scope: 5.1.1
eslint-visitor-keys: 2.1.0
semver: 6.3.0
@@ -3639,7 +3639,7 @@ packages:
resolution: {integrity: sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==}
dev: true
- /@typescript-eslint/eslint-plugin/5.43.0_wze2rj5tow7zwqpgbdx2buoy3m:
+ /@typescript-eslint/eslint-plugin/5.43.0_nqj4bdx4ekws7aecttskpih4py:
resolution: {integrity: sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3650,12 +3650,12 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/parser': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
'@typescript-eslint/scope-manager': 5.43.0
- '@typescript-eslint/type-utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
- '@typescript-eslint/utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/type-utils': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
+ '@typescript-eslint/utils': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
debug: 4.3.4
- eslint: 8.27.0
+ eslint: 8.28.0
ignore: 5.2.0
natural-compare-lite: 1.4.0
regexpp: 3.2.0
@@ -3666,20 +3666,20 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/experimental-utils/5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y:
+ /@typescript-eslint/experimental-utils/5.30.6_hsf322ms6xhhd4b5ne6lb74y4a:
resolution: {integrity: sha512-bqvT+0L8IjtW7MCrMgm9oVNxs4g7mESro1mm5c1/SNfTnHuFTf9OUX1WzVkTz75M9cp//UrTrSmGvK48NEKshQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y
- eslint: 8.27.0
+ '@typescript-eslint/utils': 5.30.6_hsf322ms6xhhd4b5ne6lb74y4a
+ eslint: 8.28.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/parser/5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y:
+ /@typescript-eslint/parser/5.43.0_hsf322ms6xhhd4b5ne6lb74y4a:
resolution: {integrity: sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3693,7 +3693,7 @@ packages:
'@typescript-eslint/types': 5.43.0
'@typescript-eslint/typescript-estree': 5.43.0_typescript@4.9.3
debug: 4.3.4
- eslint: 8.27.0
+ eslint: 8.28.0
typescript: 4.9.3
transitivePeerDependencies:
- supports-color
@@ -3715,7 +3715,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.43.0
dev: true
- /@typescript-eslint/type-utils/5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y:
+ /@typescript-eslint/type-utils/5.43.0_hsf322ms6xhhd4b5ne6lb74y4a:
resolution: {integrity: sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3726,9 +3726,9 @@ packages:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.43.0_typescript@4.9.3
- '@typescript-eslint/utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/utils': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
debug: 4.3.4
- eslint: 8.27.0
+ eslint: 8.28.0
tsutils: 3.21.0_typescript@4.9.3
typescript: 4.9.3
transitivePeerDependencies:
@@ -3787,7 +3787,7 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/utils/5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y:
+ /@typescript-eslint/utils/5.30.6_hsf322ms6xhhd4b5ne6lb74y4a:
resolution: {integrity: sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3797,15 +3797,15 @@ packages:
'@typescript-eslint/scope-manager': 5.30.6
'@typescript-eslint/types': 5.30.6
'@typescript-eslint/typescript-estree': 5.30.6_typescript@4.9.3
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-scope: 5.1.1
- eslint-utils: 3.0.0_eslint@8.27.0
+ eslint-utils: 3.0.0_eslint@8.28.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/utils/5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y:
+ /@typescript-eslint/utils/5.43.0_hsf322ms6xhhd4b5ne6lb74y4a:
resolution: {integrity: sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -3816,9 +3816,9 @@ packages:
'@typescript-eslint/scope-manager': 5.43.0
'@typescript-eslint/types': 5.43.0
'@typescript-eslint/typescript-estree': 5.43.0_typescript@4.9.3
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-scope: 5.1.1
- eslint-utils: 3.0.0_eslint@8.27.0
+ eslint-utils: 3.0.0_eslint@8.28.0
semver: 7.3.7
transitivePeerDependencies:
- supports-color
@@ -5343,16 +5343,16 @@ packages:
source-map: 0.6.1
dev: true
- /eslint-config-prettier/8.5.0_eslint@8.27.0:
+ /eslint-config-prettier/8.5.0_eslint@8.28.0:
resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.27.0
+ eslint: 8.28.0
dev: true
- /eslint-config-react-app/7.0.1_zpvrxn25tudpyta3yg53rikf4e:
+ /eslint-config-react-app/7.0.1_ffu622cxxp5swe5tqcog7svb5i:
resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -5363,20 +5363,20 @@ packages:
optional: true
dependencies:
'@babel/core': 7.18.6
- '@babel/eslint-parser': 7.18.2_chvycicpad5erj2yemazgxq6vy
+ '@babel/eslint-parser': 7.18.2_e6dejpcwcc66ssvjscxl7tagl4
'@rushstack/eslint-patch': 1.1.4
- '@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
- '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/eslint-plugin': 5.43.0_nqj4bdx4ekws7aecttskpih4py
+ '@typescript-eslint/parser': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
babel-preset-react-app: 10.0.1
confusing-browser-globals: 1.0.11
- eslint: 8.27.0
- eslint-plugin-flowtype: 8.0.3_eslint@8.27.0
- eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
- eslint-plugin-jest: 25.7.0_fqtdfzmoyuw7rs7dg6fkh5euye
- eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
- eslint-plugin-react: 7.31.11_eslint@8.27.0
- eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
- eslint-plugin-testing-library: 5.5.1_e3uo4sehh4zr4i6m57mkkxxv7y
+ eslint: 8.28.0
+ eslint-plugin-flowtype: 8.0.3_eslint@8.28.0
+ eslint-plugin-import: 2.26.0_d5vn4nsvkp5ugznurcfxmdkaeu
+ eslint-plugin-jest: 25.7.0_nlk4gf27wwh5udaenqwmulwkme
+ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.28.0
+ eslint-plugin-react: 7.31.11_eslint@8.28.0
+ eslint-plugin-react-hooks: 4.6.0_eslint@8.28.0
+ eslint-plugin-testing-library: 5.5.1_hsf322ms6xhhd4b5ne6lb74y4a
typescript: 4.9.3
transitivePeerDependencies:
- '@babel/plugin-syntax-flow'
@@ -5400,7 +5400,7 @@ packages:
- supports-color
dev: true
- /eslint-import-resolver-typescript/3.5.2_dcpv4nbdr5ks2h5677xdltrk6e:
+ /eslint-import-resolver-typescript/3.5.2_ktrec6dplf4now6nlbc6d67jee:
resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -5409,8 +5409,8 @@ packages:
dependencies:
debug: 4.3.4
enhanced-resolve: 5.10.0
- eslint: 8.27.0
- eslint-plugin-import: 2.26.0_bbzxof3vtngyannf3l4jlcflvy
+ eslint: 8.28.0
+ eslint-plugin-import: 2.26.0_d5vn4nsvkp5ugznurcfxmdkaeu
get-tsconfig: 4.2.0
globby: 13.1.2
is-core-module: 2.10.0
@@ -5438,16 +5438,16 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/parser': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
- eslint-import-resolver-typescript: 3.5.2_dcpv4nbdr5ks2h5677xdltrk6e
+ eslint-import-resolver-typescript: 3.5.2_ktrec6dplf4now6nlbc6d67jee
find-up: 2.1.0
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-plugin-flowtype/8.0.3_eslint@8.27.0:
+ /eslint-plugin-flowtype/8.0.3_eslint@8.28.0:
resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -5460,12 +5460,12 @@ packages:
'@babel/plugin-transform-react-jsx':
optional: true
dependencies:
- eslint: 8.27.0
+ eslint: 8.28.0
lodash: 4.17.21
string-natural-compare: 3.0.1
dev: true
- /eslint-plugin-import/2.26.0_bbzxof3vtngyannf3l4jlcflvy:
+ /eslint-plugin-import/2.26.0_d5vn4nsvkp5ugznurcfxmdkaeu:
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
engines: {node: '>=4'}
peerDependencies:
@@ -5475,12 +5475,12 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
+ '@typescript-eslint/parser': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
doctrine: 2.1.0
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-import-resolver-node: 0.3.6
eslint-module-utils: 2.7.3_clahhyedowhj7lywpxe6ohktxi
has: 1.0.3
@@ -5496,7 +5496,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-jest/25.7.0_fqtdfzmoyuw7rs7dg6fkh5euye:
+ /eslint-plugin-jest/25.7.0_nlk4gf27wwh5udaenqwmulwkme:
resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
peerDependencies:
@@ -5509,16 +5509,16 @@ packages:
jest:
optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
- '@typescript-eslint/experimental-utils': 5.30.6_e3uo4sehh4zr4i6m57mkkxxv7y
- eslint: 8.27.0
+ '@typescript-eslint/eslint-plugin': 5.43.0_nqj4bdx4ekws7aecttskpih4py
+ '@typescript-eslint/experimental-utils': 5.30.6_hsf322ms6xhhd4b5ne6lb74y4a
+ eslint: 8.28.0
jest: 29.3.1_@types+node@18.11.9
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /eslint-plugin-jsx-a11y/6.6.1_eslint@8.27.0:
+ /eslint-plugin-jsx-a11y/6.6.1_eslint@8.28.0:
resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -5532,7 +5532,7 @@ packages:
axobject-query: 2.2.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.27.0
+ eslint: 8.28.0
has: 1.0.3
jsx-ast-utils: 3.3.2
language-tags: 1.0.5
@@ -5540,7 +5540,7 @@ packages:
semver: 6.3.0
dev: true
- /eslint-plugin-prettier/4.2.1_v7o5sx5x3wbs57ifz6wc4f76we:
+ /eslint-plugin-prettier/4.2.1_pgxuib4rd7wiymfktharf5ydt4:
resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -5551,22 +5551,22 @@ packages:
eslint-config-prettier:
optional: true
dependencies:
- eslint: 8.27.0
- eslint-config-prettier: 8.5.0_eslint@8.27.0
+ eslint: 8.28.0
+ eslint-config-prettier: 8.5.0_eslint@8.28.0
prettier: 2.7.1
prettier-linter-helpers: 1.0.0
dev: true
- /eslint-plugin-react-hooks/4.6.0_eslint@8.27.0:
+ /eslint-plugin-react-hooks/4.6.0_eslint@8.28.0:
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.27.0
+ eslint: 8.28.0
dev: true
- /eslint-plugin-react/7.31.11_eslint@8.27.0:
+ /eslint-plugin-react/7.31.11_eslint@8.28.0:
resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==}
engines: {node: '>=4'}
peerDependencies:
@@ -5576,7 +5576,7 @@ packages:
array.prototype.flatmap: 1.3.1
array.prototype.tosorted: 1.1.1
doctrine: 2.1.0
- eslint: 8.27.0
+ eslint: 8.28.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.2
minimatch: 3.1.2
@@ -5590,14 +5590,14 @@ packages:
string.prototype.matchall: 4.0.8
dev: true
- /eslint-plugin-testing-library/5.5.1_e3uo4sehh4zr4i6m57mkkxxv7y:
+ /eslint-plugin-testing-library/5.5.1_hsf322ms6xhhd4b5ne6lb74y4a:
resolution: {integrity: sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'}
peerDependencies:
eslint: ^7.5.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
- eslint: 8.27.0
+ '@typescript-eslint/utils': 5.43.0_hsf322ms6xhhd4b5ne6lb74y4a
+ eslint: 8.28.0
transitivePeerDependencies:
- supports-color
- typescript
@@ -5619,13 +5619,13 @@ packages:
estraverse: 5.3.0
dev: true
- /eslint-utils/3.0.0_eslint@8.27.0:
+ /eslint-utils/3.0.0_eslint@8.28.0:
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5'
dependencies:
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-visitor-keys: 2.1.0
dev: true
@@ -5639,8 +5639,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint/8.27.0:
- resolution: {integrity: sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==}
+ /eslint/8.28.0:
+ resolution: {integrity: sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
@@ -5655,7 +5655,7 @@ packages:
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.1.1
- eslint-utils: 3.0.0_eslint@8.27.0
+ eslint-utils: 3.0.0_eslint@8.28.0
eslint-visitor-keys: 3.3.0
espree: 9.4.0
esquery: 1.4.0
@@ -9358,7 +9358,7 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
- /vite-plugin-eslint/1.8.1_eslint@8.27.0+vite@3.2.4:
+ /vite-plugin-eslint/1.8.1_eslint@8.28.0+vite@3.2.4:
resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
peerDependencies:
eslint: '>=7'
@@ -9366,7 +9366,7 @@ packages:
dependencies:
'@rollup/pluginutils': 4.2.1
'@types/eslint': 8.4.5
- eslint: 8.27.0
+ eslint: 8.28.0
rollup: 2.78.0
vite: 3.2.4_@types+node@18.11.9
dev: true
From 194d34106e23afdae747784eafe84fd82edd2937 Mon Sep 17 00:00:00 2001
From: James Elliott
Date: Sat, 19 Nov 2022 16:47:09 +1100
Subject: [PATCH 26/26] fix(storage): schema inconsistency (#4262)
---
cmd/authelia-gen/cmd_docs_cli.go | 26 +-
cmd/authelia-scripts/cmd/gen.go | 2 +-
.../en/configuration/storage/migrations.md | 1 +
.../content/en/configuration/storage/mysql.md | 15 +-
.../en/configuration/storage/postgres.md | 13 +-
.../guidelines/database-schema.md | 64 ++
docs/content/en/reference/cli/_index.md | 2 +-
.../en/reference/cli/authelia-gen/_index.md | 2 +-
.../cli/authelia-gen/authelia-gen.md | 2 +-
.../cli/authelia-gen/authelia-gen_code.md | 2 +-
.../authelia-gen/authelia-gen_code_keys.md | 2 +-
.../authelia-gen/authelia-gen_code_scripts.md | 2 +-
.../authelia-gen/authelia-gen_code_server.md | 2 +-
.../authelia-gen/authelia-gen_commit-lint.md | 2 +-
.../cli/authelia-gen/authelia-gen_docs.md | 2 +-
.../cli/authelia-gen/authelia-gen_docs_cli.md | 2 +-
.../authelia-gen/authelia-gen_docs_data.md | 2 +-
.../authelia-gen_docs_data_keys.md | 2 +-
.../authelia-gen_docs_data_misc.md | 2 +-
.../authelia-gen/authelia-gen_docs_date.md | 2 +-
.../cli/authelia-gen/authelia-gen_github.md | 2 +-
.../authelia-gen_github_issue-templates.md | 2 +-
...a-gen_github_issue-templates_bug-report.md | 2 +-
..._github_issue-templates_feature-request.md | 2 +-
.../cli/authelia-gen/authelia-gen_locales.md | 2 +-
.../reference/cli/authelia-scripts/_index.md | 2 +-
.../cli/authelia-scripts/authelia-scripts.md | 2 +-
.../authelia-scripts_bootstrap.md | 2 +-
.../authelia-scripts_build.md | 2 +-
.../authelia-scripts/authelia-scripts_ci.md | 2 +-
.../authelia-scripts_clean.md | 2 +-
.../authelia-scripts_docker.md | 2 +-
.../authelia-scripts_docker_build.md | 2 +-
.../authelia-scripts_docker_push-manifest.md | 2 +-
.../authelia-scripts_serve.md | 2 +-
.../authelia-scripts_suites.md | 2 +-
.../authelia-scripts_suites_list.md | 2 +-
.../authelia-scripts_suites_setup.md | 2 +-
.../authelia-scripts_suites_teardown.md | 2 +-
.../authelia-scripts_suites_test.md | 2 +-
.../authelia-scripts_unittest.md | 2 +-
.../authelia-scripts_xflags.md | 2 +-
.../en/reference/cli/authelia/_index.md | 2 +-
.../en/reference/cli/authelia/authelia.md | 2 +-
.../cli/authelia/authelia_access-control.md | 2 +-
.../authelia_access-control_check-policy.md | 2 +-
.../cli/authelia/authelia_build-info.md | 2 +-
.../reference/cli/authelia/authelia_crypto.md | 2 +-
.../authelia/authelia_crypto_certificate.md | 2 +-
.../authelia_crypto_certificate_ecdsa.md | 2 +-
...helia_crypto_certificate_ecdsa_generate.md | 2 +-
...thelia_crypto_certificate_ecdsa_request.md | 2 +-
.../authelia_crypto_certificate_ed25519.md | 2 +-
...lia_crypto_certificate_ed25519_generate.md | 2 +-
...elia_crypto_certificate_ed25519_request.md | 2 +-
.../authelia_crypto_certificate_rsa.md | 2 +-
...uthelia_crypto_certificate_rsa_generate.md | 2 +-
...authelia_crypto_certificate_rsa_request.md | 2 +-
.../cli/authelia/authelia_crypto_hash.md | 2 +-
.../authelia/authelia_crypto_hash_generate.md | 2 +-
.../authelia_crypto_hash_generate_argon2.md | 2 +-
.../authelia_crypto_hash_generate_bcrypt.md | 2 +-
.../authelia_crypto_hash_generate_pbkdf2.md | 2 +-
.../authelia_crypto_hash_generate_scrypt.md | 2 +-
...authelia_crypto_hash_generate_sha2crypt.md | 2 +-
.../authelia/authelia_crypto_hash_validate.md | 2 +-
.../cli/authelia/authelia_crypto_pair.md | 2 +-
.../authelia/authelia_crypto_pair_ecdsa.md | 2 +-
.../authelia_crypto_pair_ecdsa_generate.md | 2 +-
.../authelia/authelia_crypto_pair_ed25519.md | 2 +-
.../authelia_crypto_pair_ed25519_generate.md | 2 +-
.../cli/authelia/authelia_crypto_pair_rsa.md | 2 +-
.../authelia_crypto_pair_rsa_generate.md | 2 +-
.../cli/authelia/authelia_crypto_rand.md | 2 +-
.../cli/authelia/authelia_hash-password.md | 2 +-
.../cli/authelia/authelia_storage.md | 2 +-
.../authelia/authelia_storage_encryption.md | 2 +-
.../authelia_storage_encryption_change-key.md | 2 +-
.../authelia_storage_encryption_check.md | 2 +-
.../cli/authelia/authelia_storage_migrate.md | 2 +-
.../authelia/authelia_storage_migrate_down.md | 2 +-
.../authelia_storage_migrate_history.md | 2 +-
.../authelia_storage_migrate_list-down.md | 2 +-
.../authelia_storage_migrate_list-up.md | 2 +-
.../authelia/authelia_storage_migrate_up.md | 2 +-
.../authelia/authelia_storage_schema-info.md | 2 +-
.../cli/authelia/authelia_storage_user.md | 2 +-
.../authelia_storage_user_identifiers.md | 2 +-
.../authelia_storage_user_identifiers_add.md | 2 +-
...uthelia_storage_user_identifiers_export.md | 2 +-
...helia_storage_user_identifiers_generate.md | 2 +-
...uthelia_storage_user_identifiers_import.md | 2 +-
.../authelia/authelia_storage_user_totp.md | 2 +-
.../authelia_storage_user_totp_delete.md | 2 +-
.../authelia_storage_user_totp_export.md | 2 +-
.../authelia_storage_user_totp_generate.md | 2 +-
.../authelia_storage_user_webauthn.md | 2 +-
.../authelia_storage_user_webauthn_delete.md | 2 +-
.../authelia_storage_user_webauthn_list.md | 2 +-
.../cli/authelia/authelia_validate-config.md | 2 +-
.../en/reference/integrations/_index.md | 9 +
.../integrations/database-integrations.md | 94 +++
.../en/reference/integrations/introduction.md | 24 +
internal/model/webauthn.go | 31 +-
.../V0001.Initial_Schema.all.down.sql | 2 +-
.../V0001.Initial_Schema.mysql.up.sql | 50 +-
.../V0001.Initial_Schema.postgres.up.sql | 62 +-
.../V0001.Initial_Schema.sqlite.up.sql | 36 +-
.../migrations/V0002.Webauthn.mysql.down.sql | 22 +-
.../migrations/V0002.Webauthn.mysql.up.sql | 17 +-
.../V0002.Webauthn.postgres.down.sql | 36 +-
.../migrations/V0002.Webauthn.postgres.up.sql | 31 +-
.../migrations/V0002.Webauthn.sqlite.down.sql | 18 +-
.../migrations/V0002.Webauthn.sqlite.up.sql | 17 +-
.../V0003.WebauthnKIDLength.mysql.up.sql | 8 +-
.../V0003.WebauthnKIDLength.postgres.up.sql | 20 +-
.../V0003.WebauthnKIDLength.sqlite.up.sql | 6 +-
.../V0004.OpenIDConnect.all.down.sql | 2 +-
.../V0004.OpenIDConnect.mysql.up.sql | 136 ++--
.../V0004.OpenIDConnect.postgres.up.sql | 118 ++--
.../V0004.OpenIDConnect.sqlite.up.sql | 72 +-
.../V0005.ConsentSubjectNULL.mysql.down.sql | 12 +-
.../V0005.ConsentSubjectNULL.mysql.up.sql | 20 +-
...V0005.ConsentSubjectNULL.postgres.down.sql | 10 +-
.../V0005.ConsentSubjectNULL.postgres.up.sql | 18 +-
.../V0005.ConsentSubjectNULL.sqlite.down.sql | 267 ++++++-
.../V0005.ConsentSubjectNULL.sqlite.up.sql | 181 ++---
...006.ConsentPreConfiguration.mysql.down.sql | 191 ++---
...V0006.ConsentPreConfiguration.mysql.up.sql | 211 +++---
....ConsentPreConfiguration.postgres.down.sql | 136 ++--
...06.ConsentPreConfiguration.postgres.up.sql | 203 +++---
...06.ConsentPreConfiguration.sqlite.down.sql | 84 +--
...0006.ConsentPreConfiguration.sqlite.up.sql | 101 ++-
.../V0007.ConsistencyFixes.mysql.down.sql | 96 +++
.../V0007.ConsistencyFixes.mysql.up.sql | 213 ++++++
.../V0007.ConsistencyFixes.postgres.down.sql | 111 +++
.../V0007.ConsistencyFixes.postgres.up.sql | 208 ++++++
.../V0007.ConsistencyFixes.sqlite.down.sql | 617 ++++++++++++++++
.../V0007.ConsistencyFixes.sqlite.up.sql | 667 ++++++++++++++++++
internal/storage/migrations_test.go | 2 +-
140 files changed, 3458 insertions(+), 1010 deletions(-)
create mode 100644 docs/content/en/contributing/guidelines/database-schema.md
create mode 100644 docs/content/en/reference/integrations/_index.md
create mode 100644 docs/content/en/reference/integrations/database-integrations.md
create mode 100644 docs/content/en/reference/integrations/introduction.md
create mode 100644 internal/storage/migrations/V0007.ConsistencyFixes.mysql.down.sql
create mode 100644 internal/storage/migrations/V0007.ConsistencyFixes.mysql.up.sql
create mode 100644 internal/storage/migrations/V0007.ConsistencyFixes.postgres.down.sql
create mode 100644 internal/storage/migrations/V0007.ConsistencyFixes.postgres.up.sql
create mode 100644 internal/storage/migrations/V0007.ConsistencyFixes.sqlite.down.sql
create mode 100644 internal/storage/migrations/V0007.ConsistencyFixes.sqlite.up.sql
diff --git a/cmd/authelia-gen/cmd_docs_cli.go b/cmd/authelia-gen/cmd_docs_cli.go
index 178583749..0bade8795 100644
--- a/cmd/authelia-gen/cmd_docs_cli.go
+++ b/cmd/authelia-gen/cmd_docs_cli.go
@@ -98,11 +98,7 @@ func genCLIDocWriteIndex(path, name string) (err error) {
return err
}
- weight := 900
-
- if name == "authelia" {
- weight = 320
- }
+ weight := genCLIDocCmdToWeight(name)
_, err = fmt.Fprintf(f, indexDocs, name, now.Format(dateFmtYAML), "cli-"+name, weight)
@@ -119,14 +115,28 @@ func prepend(input string) string {
args := strings.Join(parts, " ")
- weight := 330
- if len(parts) == 1 {
- weight = 320
+ weight := genCLIDocCmdToWeight(parts[0])
+
+ if len(parts) != 1 {
+ weight += 5
}
return fmt.Sprintf(prefixDocs, args, fmt.Sprintf("Reference for the %s command.", args), "", now.Format(dateFmtYAML), "cli-"+cmd, weight)
}
+func genCLIDocCmdToWeight(cmd string) int {
+ switch cmd {
+ case "authelia":
+ return 900
+ case "authelia-gen":
+ return 910
+ case "authelia-scripts":
+ return 920
+ default:
+ return 990
+ }
+}
+
func linker(input string) string {
return input
}
diff --git a/cmd/authelia-scripts/cmd/gen.go b/cmd/authelia-scripts/cmd/gen.go
index 10f06b412..fb9464135 100644
--- a/cmd/authelia-scripts/cmd/gen.go
+++ b/cmd/authelia-scripts/cmd/gen.go
@@ -7,5 +7,5 @@
package cmd
const (
- versionSwaggerUI = "4.15.2"
+ versionSwaggerUI = "4.15.5"
)
diff --git a/docs/content/en/configuration/storage/migrations.md b/docs/content/en/configuration/storage/migrations.md
index fbc84df83..308976472 100644
--- a/docs/content/en/configuration/storage/migrations.md
+++ b/docs/content/en/configuration/storage/migrations.md
@@ -35,3 +35,4 @@ this instance if you wanted to downgrade to pre1 you would need to use an Authel
| 4 | 4.35.0 | Added OpenID Connect storage tables and opaque user identifier tables |
| 5 | 4.35.1 | Fixed the oauth2_consent_session table to accept NULL subjects for users who are not yet signed in |
| 6 | 4.37.0 | Adjusted the OpenID Connect tables to allow pre-configured consent improvements |
+| 7 | 4.37.3 | Fixed some schema inconsistencies most notably the MySQL/MariaDB Engine and Collation |
diff --git a/docs/content/en/configuration/storage/mysql.md b/docs/content/en/configuration/storage/mysql.md
index 15aa648ee..227eff96f 100644
--- a/docs/content/en/configuration/storage/mysql.md
+++ b/docs/content/en/configuration/storage/mysql.md
@@ -17,19 +17,8 @@ aliases:
## Version support
-When using [MySQL] or [MariaDB] we recommend using the latest version that is officially supported by the [MySQL] or
-[MariaDB] developers. We also suggest checking out [PostgreSQL](postgres.md) as an alternative.
-
-The oldest versions that have been tested are [MySQL] 5.7 and [MariaDB] 10.6.
-
-If using [MySQL] 5.7 or [MariaDB] 10.6 you may be required to adjust the `explicit_defaults_for_timestamp` setting. This
-will be evident when the container starts with an error similar to `Error 1067: Invalid default value for 'exp'`. You
-can adjust this setting in the mysql.cnf file like so:
-
-```cnf
-[mysqld]
-explicit_defaults_for_timestamp = 1
-```
+See the [MySQL Database Integration](../../reference/integrations/database-integrations.md#mysql) reference
+guide for supported version information.
## Configuration
diff --git a/docs/content/en/configuration/storage/postgres.md b/docs/content/en/configuration/storage/postgres.md
index 4c3adbc60..55f4c88e3 100644
--- a/docs/content/en/configuration/storage/postgres.md
+++ b/docs/content/en/configuration/storage/postgres.md
@@ -16,17 +16,8 @@ aliases:
## Version support
-See [PostgreSQL support](https://www.postgresql.org/support/versioning/) for the versions supported by [PostgreSQL]. We
-recommend the *current minor* version of one of the versions supported by [PostgreSQL].
-
-The versions of [PostgreSQL] that should be supported by Authelia are:
-
-* 14
-* 13
-* 12
-* 11
-* 10
-* 9.6
+See the [PostgreSQL Database Integration](../../reference/integrations/database-integrations.md#postgresql) reference
+guide for supported version information.
## Configuration
diff --git a/docs/content/en/contributing/guidelines/database-schema.md b/docs/content/en/contributing/guidelines/database-schema.md
new file mode 100644
index 000000000..bf8ea664b
--- /dev/null
+++ b/docs/content/en/contributing/guidelines/database-schema.md
@@ -0,0 +1,64 @@
+---
+title: "Database Schema"
+description: "Authelia Development Database Schema Guidelines"
+lead: "This section covers the database schema guidelines we use for development."
+date: 2022-11-09T09:20:18+11:00
+draft: false
+images: []
+menu:
+ contributing:
+ parent: "guidelines"
+weight: 320
+toc: true
+aliases: []
+---
+
+## Table Names
+
+1. Should match in every database implementation.
+2. Should be all lower case.
+3. Should use singular form (i.e. not plural).
+4. Should use the underscore character (`_`) between words.
+5. Should only contain alphanumeric characters and the underscore character (`_`).
+ 1. The underscore character (`_`):
+ 1. Should always be used between words.
+ 2. Should only be used:
+ 1. Between words.
+ 2. As a prefix for temporary tables.
+ 2. Should start and end with only an alphabetic character, excluding specific exceptions mentioned elsewhere with
+ prefix and suffix terminology.
+
+## Column Names
+
+1. Should match in every database implementation.
+2. Should be all lower case.
+3. Should only contain alphanumeric characters and the underscore character (`_`).
+ 1. The underscore character (`_`):
+ 1. Should always be used between words.
+ 2. Should only be used between words.
+ 2. Should only start and end with an alphabetic character.
+
+## Key Names
+
+### Foreign Keys
+
+Format: `__fkey`
+
+Where:
+
+- The table name is the name of the table the foreign key exists on.
+- The column name is the name of the column the foreign key is for.
+
+### Unique Keys
+
+Format: `__key`
+
+Where:
+
+- The table name is the name of the table the unique key is on.
+- The key name is the name to describe this key. This can also be the column name it exists on.
+
+### Primary Keys
+
+Most database engines don't allow customizing the primary key names. As such the primary key should not be explicitly
+set except to change it back to the default format.
diff --git a/docs/content/en/reference/cli/_index.md b/docs/content/en/reference/cli/_index.md
index c6b867ddb..1fee1ca4f 100644
--- a/docs/content/en/reference/cli/_index.md
+++ b/docs/content/en/reference/cli/_index.md
@@ -5,6 +5,6 @@ lead: ""
date: 2022-06-15T17:51:47+10:00
draft: false
images: []
-weight: 300
+weight: 900
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/_index.md b/docs/content/en/reference/cli/authelia-gen/_index.md
index 3795ca9f8..ef7cf7b22 100644
--- a/docs/content/en/reference/cli/authelia-gen/_index.md
+++ b/docs/content/en/reference/cli/authelia-gen/_index.md
@@ -9,6 +9,6 @@ menu:
reference:
parent: "cli"
identifier: "cli-authelia-gen"
-weight: 900
+weight: 910
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen.md
index 1dc7be5b0..ca2fc3c6f 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 320
+weight: 910
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code.md
index 65adbfe01..bf1bd4a0a 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_keys.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_keys.md
index 2b0a9ea98..bbd4cd760 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_keys.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_keys.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_scripts.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_scripts.md
index b482188e3..3ef5a1278 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_scripts.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_scripts.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_server.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_server.md
index 75d4b7c7c..bd22ca9e4 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_server.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_code_server.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_commit-lint.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_commit-lint.md
index c559fd142..69d40ffdf 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_commit-lint.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_commit-lint.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs.md
index 5c28d1603..2b202dde5 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_cli.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_cli.md
index 8f4dfa7b6..75818a942 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_cli.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_cli.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data.md
index 2ba5ed90a..c2023c97b 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_keys.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_keys.md
index 82932eedd..7a843345e 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_keys.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_keys.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_misc.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_misc.md
index cdcb1042e..7627d9df6 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_misc.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_data_misc.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_date.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_date.md
index 4110ca86c..95192998f 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_date.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_docs_date.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github.md
index 432b603e9..a3fa361ed 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates.md
index bc855e6f0..24f627249 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_bug-report.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_bug-report.md
index 0f6c5be4e..1910e8891 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_bug-report.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_bug-report.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_feature-request.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_feature-request.md
index 63ca5cb17..f327f39f2 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_feature-request.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_github_issue-templates_feature-request.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-gen/authelia-gen_locales.md b/docs/content/en/reference/cli/authelia-gen/authelia-gen_locales.md
index 69d169ec1..206da13c4 100644
--- a/docs/content/en/reference/cli/authelia-gen/authelia-gen_locales.md
+++ b/docs/content/en/reference/cli/authelia-gen/authelia-gen_locales.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-gen"
-weight: 330
+weight: 915
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/_index.md b/docs/content/en/reference/cli/authelia-scripts/_index.md
index b18caa9b6..71177a26b 100644
--- a/docs/content/en/reference/cli/authelia-scripts/_index.md
+++ b/docs/content/en/reference/cli/authelia-scripts/_index.md
@@ -9,6 +9,6 @@ menu:
reference:
parent: "cli"
identifier: "cli-authelia-scripts"
-weight: 900
+weight: 920
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts.md
index 8625d1574..65a5a455c 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 320
+weight: 920
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_bootstrap.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_bootstrap.md
index 9b80e6306..b705e4709 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_bootstrap.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_bootstrap.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_build.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_build.md
index 61ef1696f..b60afce3e 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_build.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_build.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_ci.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_ci.md
index df9bc2d81..5c123a09c 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_ci.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_ci.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_clean.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_clean.md
index 5c3bf927f..53cc8748f 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_clean.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_clean.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker.md
index 4fc6b42c6..4ad8be55c 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_build.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_build.md
index e145f638e..b83e027b4 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_build.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_build.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_push-manifest.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_push-manifest.md
index ee6548fde..aa71a5b87 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_push-manifest.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_docker_push-manifest.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_serve.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_serve.md
index 11348575b..33106528c 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_serve.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_serve.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites.md
index 3954efddd..fe271b917 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_list.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_list.md
index e31be2d1e..710ca66b2 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_list.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_list.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_setup.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_setup.md
index b4b3be036..b24ef4490 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_setup.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_setup.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_teardown.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_teardown.md
index e58fe9693..c73f72d7c 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_teardown.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_teardown.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_test.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_test.md
index df61fb72d..e26376975 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_test.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_suites_test.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_unittest.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_unittest.md
index 5b4481612..34ca01767 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_unittest.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_unittest.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_xflags.md b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_xflags.md
index 78f798537..e7efd8ba8 100644
--- a/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_xflags.md
+++ b/docs/content/en/reference/cli/authelia-scripts/authelia-scripts_xflags.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia-scripts"
-weight: 330
+weight: 925
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/_index.md b/docs/content/en/reference/cli/authelia/_index.md
index aab5ea421..f6bceffab 100644
--- a/docs/content/en/reference/cli/authelia/_index.md
+++ b/docs/content/en/reference/cli/authelia/_index.md
@@ -9,6 +9,6 @@ menu:
reference:
parent: "cli"
identifier: "cli-authelia"
-weight: 320
+weight: 900
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia.md b/docs/content/en/reference/cli/authelia/authelia.md
index 40b955dc2..91ddc0bdb 100644
--- a/docs/content/en/reference/cli/authelia/authelia.md
+++ b/docs/content/en/reference/cli/authelia/authelia.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 320
+weight: 900
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_access-control.md b/docs/content/en/reference/cli/authelia/authelia_access-control.md
index 7c6e04414..002c0f8bd 100644
--- a/docs/content/en/reference/cli/authelia/authelia_access-control.md
+++ b/docs/content/en/reference/cli/authelia/authelia_access-control.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_access-control_check-policy.md b/docs/content/en/reference/cli/authelia/authelia_access-control_check-policy.md
index de6f13b37..026b51072 100644
--- a/docs/content/en/reference/cli/authelia/authelia_access-control_check-policy.md
+++ b/docs/content/en/reference/cli/authelia/authelia_access-control_check-policy.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_build-info.md b/docs/content/en/reference/cli/authelia/authelia_build-info.md
index 3a541a4d8..dec6af881 100644
--- a/docs/content/en/reference/cli/authelia/authelia_build-info.md
+++ b/docs/content/en/reference/cli/authelia/authelia_build-info.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto.md b/docs/content/en/reference/cli/authelia/authelia_crypto.md
index f979b583f..2e8e12541 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate.md
index 9d494ac7e..3644a0bb4 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa.md
index 2d4c43e75..611dbba9f 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_generate.md
index 562ffff84..2e9dd2285 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_request.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_request.md
index 406cfc999..8b31a4381 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_request.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ecdsa_request.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519.md
index 2172bf131..2f7cf88ae 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_generate.md
index da4812cd5..5c1678778 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_request.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_request.md
index a9a5cd8f7..36ff997c2 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_request.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_ed25519_request.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa.md
index 164e63fe9..588950169 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_generate.md
index 3c96098e5..58c06b469 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_request.md b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_request.md
index eb041be96..0b4ddf684 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_request.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_certificate_rsa_request.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash.md
index 7068a1ca9..e4dc2cecb 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate.md
index 9f0ed8d61..29ec3b58c 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_argon2.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_argon2.md
index b4cea0659..23aa9af28 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_argon2.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_argon2.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_bcrypt.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_bcrypt.md
index fdf1beb07..72ef32099 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_bcrypt.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_bcrypt.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_pbkdf2.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_pbkdf2.md
index 56c977f35..9ece92331 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_pbkdf2.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_pbkdf2.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_scrypt.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_scrypt.md
index ca078fedf..2be31e151 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_scrypt.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_scrypt.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_sha2crypt.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_sha2crypt.md
index 6a35cab21..59deb1c2d 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_sha2crypt.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_generate_sha2crypt.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_validate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_validate.md
index 839569b71..f9ef2de0e 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_hash_validate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_hash_validate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair.md
index 5f06969e5..22f83b87f 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa.md
index cc707f83e..a0250744b 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa_generate.md
index 780e96cee..1cec3fb35 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ecdsa_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519.md
index 9f2dbc92a..ef8fc2feb 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519_generate.md
index 416db58d8..734301718 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_ed25519_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa.md
index e7e1e3d3c..18eb02a19 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa_generate.md b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa_generate.md
index 412b8105b..1b0d95ee7 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_pair_rsa_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_crypto_rand.md b/docs/content/en/reference/cli/authelia/authelia_crypto_rand.md
index fdf6d8664..a2881b09b 100644
--- a/docs/content/en/reference/cli/authelia/authelia_crypto_rand.md
+++ b/docs/content/en/reference/cli/authelia/authelia_crypto_rand.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_hash-password.md b/docs/content/en/reference/cli/authelia/authelia_hash-password.md
index 7c7f97048..08e378da8 100644
--- a/docs/content/en/reference/cli/authelia/authelia_hash-password.md
+++ b/docs/content/en/reference/cli/authelia/authelia_hash-password.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage.md b/docs/content/en/reference/cli/authelia/authelia_storage.md
index 8bb0a21c9..7b29c9551 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_encryption.md b/docs/content/en/reference/cli/authelia/authelia_storage_encryption.md
index fc6681273..8cac96245 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_encryption.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_encryption.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_encryption_change-key.md b/docs/content/en/reference/cli/authelia/authelia_storage_encryption_change-key.md
index b91e2de16..9f8655112 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_encryption_change-key.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_encryption_change-key.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_encryption_check.md b/docs/content/en/reference/cli/authelia/authelia_storage_encryption_check.md
index 7821f5cf5..b15536234 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_encryption_check.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_encryption_check.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_migrate.md b/docs/content/en/reference/cli/authelia/authelia_storage_migrate.md
index 0d3a85b0b..4e4b9950e 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_migrate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_migrate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_down.md b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_down.md
index 09b024f88..373e76886 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_down.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_down.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_history.md b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_history.md
index ad5c488f5..c09284f7d 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_history.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_history.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-down.md b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-down.md
index b235e910a..f5ee9adbd 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-down.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-down.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-up.md b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-up.md
index ab6fa538a..4790f146b 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-up.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_list-up.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_up.md b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_up.md
index a4e8c55f2..0fd7e566f 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_migrate_up.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_migrate_up.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_schema-info.md b/docs/content/en/reference/cli/authelia/authelia_storage_schema-info.md
index bb655ab99..e68f10635 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_schema-info.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_schema-info.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user.md b/docs/content/en/reference/cli/authelia/authelia_storage_user.md
index 90fc3c917..3bd19da5d 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers.md
index 4ecb61538..65723cbd9 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_add.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_add.md
index 9c2220ced..898eca5c5 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_add.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_add.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_export.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_export.md
index 329bcb5b6..033d426a5 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_export.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_export.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_generate.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_generate.md
index 63095adfd..89521e187 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_import.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_import.md
index 4fc0aaca0..bfe854d89 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_import.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_identifiers_import.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp.md
index d61a3e1be..ab2e5fb32 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_delete.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_delete.md
index 8a245fa30..dc8d9e90a 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_delete.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_delete.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_export.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_export.md
index 0473db9f1..01aa812fe 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_export.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_export.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_generate.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_generate.md
index e87a2e354..cbbafea4d 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_generate.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_totp_generate.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn.md
index 65ee8c777..bde1bb87d 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_delete.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_delete.md
index cf2545624..1b1605e3a 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_delete.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_delete.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_list.md b/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_list.md
index 185e8af15..af4ee9b68 100644
--- a/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_list.md
+++ b/docs/content/en/reference/cli/authelia/authelia_storage_user_webauthn_list.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/cli/authelia/authelia_validate-config.md b/docs/content/en/reference/cli/authelia/authelia_validate-config.md
index d3fda50a6..64a01cb20 100644
--- a/docs/content/en/reference/cli/authelia/authelia_validate-config.md
+++ b/docs/content/en/reference/cli/authelia/authelia_validate-config.md
@@ -8,7 +8,7 @@ images: []
menu:
reference:
parent: "cli-authelia"
-weight: 330
+weight: 905
toc: true
---
diff --git a/docs/content/en/reference/integrations/_index.md b/docs/content/en/reference/integrations/_index.md
new file mode 100644
index 000000000..5eef15c9f
--- /dev/null
+++ b/docs/content/en/reference/integrations/_index.md
@@ -0,0 +1,9 @@
+---
+title: "Integrations"
+description: "Integrations Reference Prologue"
+lead: ""
+date: 2022-06-15T17:51:47+10:00
+draft: false
+images: []
+weight: 300
+---
diff --git a/docs/content/en/reference/integrations/database-integrations.md b/docs/content/en/reference/integrations/database-integrations.md
new file mode 100644
index 000000000..67de3b070
--- /dev/null
+++ b/docs/content/en/reference/integrations/database-integrations.md
@@ -0,0 +1,94 @@
+---
+title: "Database Integrations"
+description: "A database integration reference guide"
+lead: "This section contains a database integration reference guide for Authelia."
+date: 2022-11-10T11:03:47+11:00
+draft: false
+images: []
+menu:
+ reference:
+ parent: "integrations"
+weight: 320
+toc: true
+---
+
+We generally recommend using [PostgreSQL] for a database. If high availability is not a consideration we also support
+[SQLite3].
+
+
+## PostgreSQL
+
+The only current support criteria for [PostgreSQL] at present is that the version you're using is supported by the
+[PostgreSQL] developers. See their [Versioning Policy](https://www.postgresql.org/support/versioning/) for more
+information.
+
+We generally perform integration testing against the latest supported version of [PostgreSQL] and that is generally the
+recommended version for new installations.
+
+## MySQL
+
+[MySQL] and [MariaDB] are both supported as part of the [MySQL] implementation. This is generally discouraged as
+[PostgreSQL] is widely considered as a significantly better database engine. If you choose to go with [MySQL], we
+recommend specifically using the [MariaDB] backend.
+
+[MySQL] comes with some rigid support requirements in addition to the standard requirements for us supporting a third
+party.
+
+1. Must both support the `InnoDB` engine and this engine must be the default engine.
+2. Must support the `utf8mb4` charset.
+3. Must support the `utf8mb4_unicode_520_ci` collation.
+4. Must support maximum index size of no less than 2048 bytes. The default maximum index size for the InnoDB engine is
+ 3072 bytes on:
+ 1. [MySQL] [8.0](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) or later.
+ 2. [MySQL] [5.7](https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html) provided
+ [innodb_large_prefix](#innodb-large-prefixes) or later.
+ 3. [MariaDB] [10.3](https://mariadb.com/kb/en/innodb-system-variables/#innodb_large_prefix) or later.
+5. Must support ANSI standard time behaviours. See [ANSI standard time behaviours](#ansi-standard-time-behaviours).
+
+We generally perform integration testing against the latest supported version of [MySQL] and [MariaDB], and the latest
+supported version of [MariaDB] is generally the recommended version for new installations.
+
+### Specific Notes
+
+#### InnoDB Large Prefixes
+
+This can be configured in the [MySQL] configuration file by setting the `innodb_large_prefix` value to on.
+According to the Oracle documentation this is the default behaviour in
+[MySQL] [5.7](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix) and it can't be
+turned off in [MySQL] [8.0](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) or in [MariaDB] 10.3 and later.
+
+```cnf
+[mysqld]
+innodb_large_prefix = ON
+```
+
+#### ANSI standard time behaviours
+
+This can be configured in the [MySQL] configuration file by setting the `explicit_defaults_for_timestamp` value to on.
+According to the Oracle documentation this is the default behaviour in
+[MySQL] [5.7](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp)
+and [MySQL] [8.0](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp).
+This is however not the default behaviour in
+[MariaDB](https://mariadb.com/kb/en/server-system-variables/#explicit_defaults_for_timestamp) before 10.10.
+
+```cnf
+[mysqld]
+explicit_defaults_for_timestamp = ON
+```
+
+### Vendor Supported Versions
+
+#### MariaDB Vendor Supported Versions
+
+See the [MariaDB Server Releases](https://mariadb.com/kb/en/mariadb-server-release-dates/) for more information.
+
+#### MySQL Vendor Supported Versions
+
+See the [MySQL Supported Platforms](https://www.mysql.com/support/supportedplatforms/database.html) for information on
+which versions and platforms they support.
+
+[PostgreSQL]: https://www.postgresql.org/
+[MySQL]: https://www.mysql.com/
+[MariaDB]: https://mariadb.org/
+[SQLite3]: https://www.sqlite.org/index.html
+
diff --git a/docs/content/en/reference/integrations/introduction.md b/docs/content/en/reference/integrations/introduction.md
new file mode 100644
index 000000000..42f0a7e4c
--- /dev/null
+++ b/docs/content/en/reference/integrations/introduction.md
@@ -0,0 +1,24 @@
+---
+title: "Integrations"
+description: "A collection of integration reference guides"
+lead: "This section contains integration reference guides for Authelia."
+date: 2022-11-10T11:03:47+11:00
+draft: false
+images: []
+menu:
+ reference:
+ parent: "integrations"
+weight: 310
+toc: true
+---
+
+The integration guides in this section detail specific requirements when integrating Authelia with other products such
+as supported versions, configurations, etc.
+
+## General Rules
+
+1. If the version or platform of the third party integration or combination thereof is not unsupported by the
+ developer/vendor/etc of the third party integration we likely will not support it.
+2. When we claim to support a product it is expressly the official releases of the product. It does not include
+ versions that are heavily modified or drop in replacements (such as KeyDB which is a drop in replacement for redis
+ that IS NOT supported).
diff --git a/internal/model/webauthn.go b/internal/model/webauthn.go
index bd9400f89..415e50a69 100644
--- a/internal/model/webauthn.go
+++ b/internal/model/webauthn.go
@@ -127,26 +127,29 @@ func NewWebauthnDeviceFromCredential(rpid, username, description string, credent
Transport: strings.Join(transport, ","),
}
- device.AAGUID, _ = uuid.Parse(hex.EncodeToString(credential.Authenticator.AAGUID))
+ aaguid, err := uuid.Parse(hex.EncodeToString(credential.Authenticator.AAGUID))
+ if err == nil && aaguid.ID() != 0 {
+ device.AAGUID = uuid.NullUUID{Valid: true, UUID: aaguid}
+ }
return device
}
// WebauthnDevice represents a Webauthn Device in the database storage.
type WebauthnDevice struct {
- ID int `db:"id"`
- CreatedAt time.Time `db:"created_at"`
- LastUsedAt sql.NullTime `db:"last_used_at"`
- RPID string `db:"rpid"`
- Username string `db:"username"`
- Description string `db:"description"`
- KID Base64 `db:"kid"`
- PublicKey []byte `db:"public_key"`
- AttestationType string `db:"attestation_type"`
- Transport string `db:"transport"`
- AAGUID uuid.UUID `db:"aaguid"`
- SignCount uint32 `db:"sign_count"`
- CloneWarning bool `db:"clone_warning"`
+ ID int `db:"id"`
+ CreatedAt time.Time `db:"created_at"`
+ LastUsedAt sql.NullTime `db:"last_used_at"`
+ RPID string `db:"rpid"`
+ Username string `db:"username"`
+ Description string `db:"description"`
+ KID Base64 `db:"kid"`
+ PublicKey []byte `db:"public_key"`
+ AttestationType string `db:"attestation_type"`
+ Transport string `db:"transport"`
+ AAGUID uuid.NullUUID `db:"aaguid"`
+ SignCount uint32 `db:"sign_count"`
+ CloneWarning bool `db:"clone_warning"`
}
// UpdateSignInInfo adjusts the values of the WebauthnDevice after a sign in.
diff --git a/internal/storage/migrations/V0001.Initial_Schema.all.down.sql b/internal/storage/migrations/V0001.Initial_Schema.all.down.sql
index 615ed34c2..27491bf57 100644
--- a/internal/storage/migrations/V0001.Initial_Schema.all.down.sql
+++ b/internal/storage/migrations/V0001.Initial_Schema.all.down.sql
@@ -5,4 +5,4 @@ DROP TABLE IF EXISTS u2f_devices;
DROP TABLE IF EXISTS duo_devices;
DROP TABLE IF EXISTS user_preferences;
DROP TABLE IF EXISTS migrations;
-DROP TABLE IF EXISTS encryption;
\ No newline at end of file
+DROP TABLE IF EXISTS encryption;
diff --git a/internal/storage/migrations/V0001.Initial_Schema.mysql.up.sql b/internal/storage/migrations/V0001.Initial_Schema.mysql.up.sql
index 55bde1c51..d678a3307 100644
--- a/internal/storage/migrations/V0001.Initial_Schema.mysql.up.sql
+++ b/internal/storage/migrations/V0001.Initial_Schema.mysql.up.sql
@@ -1,5 +1,5 @@
CREATE TABLE IF NOT EXISTS authentication_logs (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
successful BOOLEAN NOT NULL,
banned BOOLEAN NOT NULL DEFAULT FALSE,
@@ -7,15 +7,14 @@ CREATE TABLE IF NOT EXISTS authentication_logs (
auth_type VARCHAR(8) NOT NULL DEFAULT '1FA',
remote_ip VARCHAR(39) NULL DEFAULT NULL,
request_uri TEXT,
- request_method VARCHAR(8) NOT NULL DEFAULT '',
- PRIMARY KEY (id)
-);
+ request_method VARCHAR(8) NOT NULL DEFAULT ''
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX authentication_logs_username_idx ON authentication_logs (time, username, auth_type);
CREATE INDEX authentication_logs_remote_ip_idx ON authentication_logs (time, remote_ip, auth_type);
CREATE TABLE IF NOT EXISTS identity_verification (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
jti CHAR(36),
iat TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
issued_ip VARCHAR(39) NOT NULL,
@@ -24,62 +23,55 @@ CREATE TABLE IF NOT EXISTS identity_verification (
action VARCHAR(50) NOT NULL,
consumed TIMESTAMP NULL DEFAULT NULL,
consumed_ip VARCHAR(39) NULL DEFAULT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (jti)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
issuer VARCHAR(100),
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
secret BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE TABLE IF NOT EXISTS u2f_devices (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
description VARCHAR(30) NOT NULL DEFAULT 'Primary',
key_handle BLOB NOT NULL,
public_key BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username, description)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE TABLE IF NOT EXISTS duo_devices (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
device VARCHAR(32) NOT NULL,
method VARCHAR(16) NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE TABLE IF NOT EXISTS user_preferences (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
second_factor_method VARCHAR(11) NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE TABLE IF NOT EXISTS migrations (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
applied TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
version_before INTEGER NULL DEFAULT NULL,
version_after INTEGER NOT NULL,
- application_version VARCHAR(128) NOT NULL,
- PRIMARY KEY (id)
-);
+ application_version VARCHAR(128) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE TABLE IF NOT EXISTS encryption (
- id INTEGER AUTO_INCREMENT,
- name VARCHAR(100),
- value BLOB NOT NULL,
- PRIMARY KEY (id),
- UNIQUE KEY (name)
-);
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ name VARCHAR(100),
+ value BLOB NOT NULL,
+ UNIQUE KEY (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
diff --git a/internal/storage/migrations/V0001.Initial_Schema.postgres.up.sql b/internal/storage/migrations/V0001.Initial_Schema.postgres.up.sql
index c56e70421..0e424edd5 100644
--- a/internal/storage/migrations/V0001.Initial_Schema.postgres.up.sql
+++ b/internal/storage/migrations/V0001.Initial_Schema.postgres.up.sql
@@ -1,5 +1,5 @@
CREATE TABLE IF NOT EXISTS authentication_logs (
- id SERIAL,
+ id SERIAL CONSTRAINT authentication_logs_pkey PRIMARY KEY,
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
successful BOOLEAN NOT NULL,
banned BOOLEAN NOT NULL DEFAULT FALSE,
@@ -7,15 +7,14 @@ CREATE TABLE IF NOT EXISTS authentication_logs (
auth_type VARCHAR(8) NOT NULL DEFAULT '1FA',
remote_ip VARCHAR(39) NULL DEFAULT NULL,
request_uri TEXT,
- request_method VARCHAR(8) NOT NULL DEFAULT '',
- PRIMARY KEY (id)
+ request_method VARCHAR(8) NOT NULL DEFAULT ''
);
CREATE INDEX authentication_logs_username_idx ON authentication_logs (time, username, auth_type);
CREATE INDEX authentication_logs_remote_ip_idx ON authentication_logs (time, remote_ip, auth_type);
CREATE TABLE IF NOT EXISTS identity_verification (
- id SERIAL,
+ id SERIAL CONSTRAINT identity_verification_pkey PRIMARY KEY,
jti CHAR(36),
iat TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
issued_ip VARCHAR(39) NOT NULL,
@@ -23,63 +22,62 @@ CREATE TABLE IF NOT EXISTS identity_verification (
username VARCHAR(100) NOT NULL,
action VARCHAR(50) NOT NULL,
consumed TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
- consumed_ip VARCHAR(39) NULL DEFAULT NULL,
- PRIMARY KEY (id),
- UNIQUE (jti)
+ consumed_ip VARCHAR(39) NULL DEFAULT NULL
);
+CREATE UNIQUE INDEX identity_verification_jti_key ON identity_verification (jti);
+
CREATE TABLE IF NOT EXISTS totp_configurations (
- id SERIAL,
+ id SERIAL CONSTRAINT totp_configurations_pkey PRIMARY KEY,
username VARCHAR(100) NOT NULL,
issuer VARCHAR(100),
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
- secret BYTEA NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username)
+ secret BYTEA NOT NULL
);
+CREATE UNIQUE INDEX totp_configurations_username_key ON totp_configurations (username);
+
CREATE TABLE IF NOT EXISTS u2f_devices (
- id SERIAL,
+ id SERIAL CONSTRAINT u2f_devices_pkey PRIMARY KEY,
username VARCHAR(100) NOT NULL,
description VARCHAR(30) NOT NULL DEFAULT 'Primary',
key_handle BYTEA NOT NULL,
- public_key BYTEA NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username, description)
+ public_key BYTEA NOT NULL
);
+CREATE UNIQUE INDEX u2f_devices_lookup_key ON u2f_devices (username, description);
+
CREATE TABLE IF NOT EXISTS duo_devices (
- id SERIAL,
+ id SERIAL CONSTRAINT duo_devices_pkey PRIMARY KEY,
username VARCHAR(100) NOT NULL,
device VARCHAR(32) NOT NULL,
- method VARCHAR(16) NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username)
+ method VARCHAR(16) NOT NULL
);
+CREATE UNIQUE INDEX duo_devices_username_key ON duo_devices (username);
+
CREATE TABLE IF NOT EXISTS user_preferences (
- id SERIAL,
+ id SERIAL CONSTRAINT user_preferences_pkey PRIMARY KEY,
username VARCHAR(100) NOT NULL,
- second_factor_method VARCHAR(11) NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username)
+ second_factor_method VARCHAR(11) NOT NULL
);
+CREATE UNIQUE INDEX user_preferences_username_key ON user_preferences (username);
+
CREATE TABLE IF NOT EXISTS migrations (
- id SERIAL,
+ id SERIAL CONSTRAINT migrations_pkey PRIMARY KEY,
applied TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
version_before INTEGER NULL DEFAULT NULL,
version_after INTEGER NOT NULL,
- application_version VARCHAR(128) NOT NULL,
- PRIMARY KEY (id)
+ application_version VARCHAR(128) NOT NULL
);
CREATE TABLE IF NOT EXISTS encryption (
- id SERIAL,
- name VARCHAR(100),
- value BYTEA NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (name)
-);
\ No newline at end of file
+ id SERIAL CONSTRAINT encryption_pkey PRIMARY KEY,
+ name VARCHAR(100),
+ value BYTEA NOT NULL
+);
+
+CREATE UNIQUE INDEX encryption_name_key ON encryption (name);
diff --git a/internal/storage/migrations/V0001.Initial_Schema.sqlite.up.sql b/internal/storage/migrations/V0001.Initial_Schema.sqlite.up.sql
index e4e49e4ba..9852a5076 100644
--- a/internal/storage/migrations/V0001.Initial_Schema.sqlite.up.sql
+++ b/internal/storage/migrations/V0001.Initial_Schema.sqlite.up.sql
@@ -1,5 +1,5 @@
CREATE TABLE IF NOT EXISTS authentication_logs (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
successful BOOLEAN NOT NULL,
banned BOOLEAN NOT NULL DEFAULT FALSE,
@@ -7,15 +7,14 @@ CREATE TABLE IF NOT EXISTS authentication_logs (
auth_type VARCHAR(8) NOT NULL DEFAULT '1FA',
remote_ip VARCHAR(39) NULL DEFAULT NULL,
request_uri TEXT,
- request_method VARCHAR(8) NOT NULL DEFAULT '',
- PRIMARY KEY (id)
+ request_method VARCHAR(8) NOT NULL DEFAULT ''
);
CREATE INDEX authentication_logs_username_idx ON authentication_logs (time, username, auth_type);
CREATE INDEX authentication_logs_remote_ip_idx ON authentication_logs (time, remote_ip, auth_type);
CREATE TABLE IF NOT EXISTS identity_verification (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
jti VARCHAR(36),
iat TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
issued_ip VARCHAR(39) NOT NULL,
@@ -24,61 +23,54 @@ CREATE TABLE IF NOT EXISTS identity_verification (
action VARCHAR(50) NOT NULL,
consumed TIMESTAMP NULL DEFAULT NULL,
consumed_ip VARCHAR(39) NULL DEFAULT NULL,
- PRIMARY KEY (id),
UNIQUE (jti)
);
CREATE TABLE IF NOT EXISTS totp_configurations (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL,
issuer VARCHAR(100),
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
secret BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE (username)
);
CREATE TABLE IF NOT EXISTS u2f_devices (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL,
description VARCHAR(30) NOT NULL DEFAULT 'Primary',
key_handle BLOB NOT NULL,
public_key BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE (username, description)
);
CREATE TABLE IF NOT EXISTS duo_devices (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL,
device VARCHAR(32) NOT NULL,
method VARCHAR(16) NOT NULL,
- PRIMARY KEY (id),
UNIQUE (username)
);
CREATE TABLE IF NOT EXISTS user_preferences (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) UNIQUE NOT NULL,
- second_factor_method VARCHAR(11) NOT NULL,
- PRIMARY KEY (id)
+ second_factor_method VARCHAR(11) NOT NULL
);
CREATE TABLE IF NOT EXISTS migrations (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
applied TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
version_before INTEGER NULL DEFAULT NULL,
version_after INTEGER NOT NULL,
- application_version VARCHAR(128) NOT NULL,
- PRIMARY KEY (id)
+ application_version VARCHAR(128) NOT NULL
);
CREATE TABLE IF NOT EXISTS encryption (
- id INTEGER,
- name VARCHAR(100),
- value BLOB NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (name)
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ name VARCHAR(100),
+ value BLOB NOT NULL,
+ UNIQUE (name)
);
diff --git a/internal/storage/migrations/V0002.Webauthn.mysql.down.sql b/internal/storage/migrations/V0002.Webauthn.mysql.down.sql
index 318ca400d..70fd8aed3 100644
--- a/internal/storage/migrations/V0002.Webauthn.mysql.down.sql
+++ b/internal/storage/migrations/V0002.Webauthn.mysql.down.sql
@@ -1,31 +1,32 @@
-ALTER TABLE totp_configurations RENAME _bkp_DOWN_V0002_totp_configurations;
-ALTER TABLE webauthn_devices RENAME _bkp_DOWN_V0002_webauthn_devices;
+ALTER TABLE totp_configurations
+ RENAME _bkp_DOWN_V0002_totp_configurations;
+
+ALTER TABLE webauthn_devices
+ RENAME _bkp_DOWN_V0002_webauthn_devices;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
issuer VARCHAR(100),
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
secret BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
INSERT INTO totp_configurations (id, username, issuer, algorithm, digits, period, secret)
SELECT id, username, issuer, algorithm, digits, period, secret
FROM _bkp_DOWN_V0002_totp_configurations;
CREATE TABLE IF NOT EXISTS u2f_devices (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
description VARCHAR(30) NOT NULL DEFAULT 'Primary',
key_handle BLOB NOT NULL,
public_key BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username, description)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
INSERT INTO u2f_devices (id, username, description, key_handle, public_key)
SELECT id, username, description, FROM_BASE64(kid), public_key
@@ -35,3 +36,8 @@ WHERE attestation_type = 'fido-u2f';
UPDATE user_preferences
SET second_factor_method = 'u2f'
WHERE second_factor_method = 'webauthn';
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_DOWN_V0002_webauthn_devices;
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
diff --git a/internal/storage/migrations/V0002.Webauthn.mysql.up.sql b/internal/storage/migrations/V0002.Webauthn.mysql.up.sql
index 9b617e255..9febf8cf3 100644
--- a/internal/storage/migrations/V0002.Webauthn.mysql.up.sql
+++ b/internal/storage/migrations/V0002.Webauthn.mysql.up.sql
@@ -1,8 +1,11 @@
-ALTER TABLE totp_configurations RENAME _bkp_UP_V0002_totp_configurations;
-ALTER TABLE u2f_devices RENAME _bkp_UP_V0002_u2f_devices;
+ALTER TABLE totp_configurations
+ RENAME _bkp_UP_V0002_totp_configurations;
+
+ALTER TABLE u2f_devices
+ RENAME _bkp_UP_V0002_u2f_devices;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP NULL DEFAULT NULL,
username VARCHAR(100) NOT NULL,
@@ -11,16 +14,15 @@ CREATE TABLE IF NOT EXISTS totp_configurations (
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
secret BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE KEY (username)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
INSERT INTO totp_configurations (id, username, issuer, algorithm, digits, period, secret)
SELECT id, username, issuer, algorithm, digits, period, secret
FROM _bkp_UP_V0002_totp_configurations;
CREATE TABLE IF NOT EXISTS webauthn_devices (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP NULL DEFAULT NULL,
rpid TEXT,
@@ -33,10 +35,9 @@ CREATE TABLE IF NOT EXISTS webauthn_devices (
aaguid CHAR(36) NOT NULL,
sign_count INTEGER DEFAULT 0,
clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
- PRIMARY KEY (id),
UNIQUE KEY (username, description),
UNIQUE KEY (kid)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
INSERT INTO webauthn_devices (id, rpid, username, description, kid, public_key, attestation_type, aaguid, sign_count)
SELECT id, '', username, description, TO_BASE64(key_handle), public_key, 'fido-u2f', '00000000-0000-0000-0000-000000000000', 0
diff --git a/internal/storage/migrations/V0002.Webauthn.postgres.down.sql b/internal/storage/migrations/V0002.Webauthn.postgres.down.sql
index 240ca9b31..c965f4768 100644
--- a/internal/storage/migrations/V0002.Webauthn.postgres.down.sql
+++ b/internal/storage/migrations/V0002.Webauthn.postgres.down.sql
@@ -1,32 +1,43 @@
-ALTER TABLE totp_configurations RENAME TO _bkp_DOWN_V0002_totp_configurations;
-ALTER TABLE webauthn_devices RENAME TO _bkp_DOWN_V0002_webauthn_devices;
+ALTER TABLE totp_configurations
+ DROP CONSTRAINT IF EXISTS totp_configurations_pkey,
+ DROP CONSTRAINT IF EXISTS totp_configurations_pkey1;
+
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_DOWN_V0002_totp_configurations;
+
+ALTER TABLE webauthn_devices
+ DROP CONSTRAINT IF EXISTS webauthn_devices_pkey,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_pkey1;
+
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_DOWN_V0002_webauthn_devices;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id SERIAL,
+ id SERIAL CONSTRAINT totp_configurations_pkey PRIMARY KEY,
username VARCHAR(100) NOT NULL,
issuer VARCHAR(100),
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
- secret BYTEA NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username)
+ secret BYTEA NOT NULL
);
+CREATE UNIQUE INDEX totp_configurations_username_key ON totp_configurations (username);
+
INSERT INTO totp_configurations (id, username, issuer, algorithm, digits, period, secret)
SELECT id, username, issuer, algorithm, digits, period, secret
FROM _bkp_DOWN_V0002_totp_configurations;
CREATE TABLE IF NOT EXISTS u2f_devices (
- id SERIAL,
+ id SERIAL CONSTRAINT u2f_devices_pkey PRIMARY KEY,
username VARCHAR(100) NOT NULL,
description VARCHAR(30) NOT NULL DEFAULT 'Primary',
key_handle BYTEA NOT NULL,
- public_key BYTEA NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username, description)
+ public_key BYTEA NOT NULL
);
+CREATE UNIQUE INDEX u2f_devices_lookup_key ON u2f_devices (username, description);
+
INSERT INTO u2f_devices (id, username, description, key_handle, public_key)
SELECT id, username, description, DECODE(kid, 'base64'), public_key
FROM _bkp_DOWN_V0002_webauthn_devices
@@ -35,3 +46,8 @@ WHERE attestation_type = 'fido-u2f';
UPDATE user_preferences
SET second_factor_method = 'u2f'
WHERE second_factor_method = 'webauthn';
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_DOWN_V0002_webauthn_devices;
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
diff --git a/internal/storage/migrations/V0002.Webauthn.postgres.up.sql b/internal/storage/migrations/V0002.Webauthn.postgres.up.sql
index a02767846..57108fc9a 100644
--- a/internal/storage/migrations/V0002.Webauthn.postgres.up.sql
+++ b/internal/storage/migrations/V0002.Webauthn.postgres.up.sql
@@ -1,8 +1,17 @@
-ALTER TABLE totp_configurations RENAME TO _bkp_UP_V0002_totp_configurations;
-ALTER TABLE u2f_devices RENAME TO _bkp_UP_V0002_u2f_devices;
+ALTER TABLE totp_configurations
+ DROP CONSTRAINT IF EXISTS totp_configurations_pkey,
+ DROP CONSTRAINT IF EXISTS totp_configurations_pkey1;
+
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_UP_V0002_totp_configurations;
+
+ALTER TABLE u2f_devices
+ RENAME TO _bkp_UP_V0002_u2f_devices;
+
+DROP INDEX IF EXISTS totp_configurations_username_key;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id SERIAL,
+ id SERIAL CONSTRAINT totp_configurations_pkey PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
username VARCHAR(100) NOT NULL,
@@ -10,17 +19,17 @@ CREATE TABLE IF NOT EXISTS totp_configurations (
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
- secret BYTEA NOT NULL,
- PRIMARY KEY (id),
- UNIQUE (username)
+ secret BYTEA NOT NULL
);
+CREATE UNIQUE INDEX totp_configurations_username_key ON totp_configurations (username);
+
INSERT INTO totp_configurations (id, username, issuer, algorithm, digits, period, secret)
SELECT id, username, issuer, algorithm, digits, period, secret
FROM _bkp_UP_V0002_totp_configurations;
CREATE TABLE IF NOT EXISTS webauthn_devices (
- id SERIAL,
+ id SERIAL CONSTRAINT webauthn_devices_pkey PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
rpid TEXT,
@@ -32,12 +41,12 @@ CREATE TABLE IF NOT EXISTS webauthn_devices (
transport VARCHAR(20) DEFAULT '',
aaguid CHAR(36) NOT NULL,
sign_count INTEGER DEFAULT 0,
- clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
- PRIMARY KEY (id),
- UNIQUE (username, description),
- UNIQUE (kid)
+ clone_warning BOOLEAN NOT NULL DEFAULT FALSE
);
+CREATE UNIQUE INDEX webauthn_devices_kid_key ON webauthn_devices (kid);
+CREATE UNIQUE INDEX webauthn_devices_lookup_key ON webauthn_devices (username, description);
+
INSERT INTO webauthn_devices (id, rpid, username, description, kid, public_key, attestation_type, aaguid, sign_count)
SELECT id, '', username, description, ENCODE(key_handle::BYTEA, 'base64'), public_key, 'fido-u2f', '00000000-0000-0000-0000-000000000000', 0
FROM _bkp_UP_V0002_u2f_devices;
diff --git a/internal/storage/migrations/V0002.Webauthn.sqlite.down.sql b/internal/storage/migrations/V0002.Webauthn.sqlite.down.sql
index dd89c26a3..1baf4e5e9 100644
--- a/internal/storage/migrations/V0002.Webauthn.sqlite.down.sql
+++ b/internal/storage/migrations/V0002.Webauthn.sqlite.down.sql
@@ -1,15 +1,17 @@
-ALTER TABLE totp_configurations RENAME TO _bkp_DOWN_V0002_totp_configurations;
-ALTER TABLE webauthn_devices RENAME TO _bkp_DOWN_V0002_webauthn_devices;
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_DOWN_V0002_totp_configurations;
+
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_DOWN_V0002_webauthn_devices;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL,
issuer VARCHAR(100),
algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
secret BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE (username)
);
@@ -18,12 +20,11 @@ SELECT id, username, issuer, algorithm, digits, period, secret
FROM _bkp_DOWN_V0002_totp_configurations;
CREATE TABLE IF NOT EXISTS u2f_devices (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL,
description VARCHAR(30) NOT NULL DEFAULT 'Primary',
key_handle BLOB NOT NULL,
public_key BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE (username, description)
);
@@ -35,3 +36,8 @@ WHERE attestation_type = 'fido-u2f';
UPDATE user_preferences
SET second_factor_method = 'u2f'
WHERE second_factor_method = 'webauthn';
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_DOWN_V0002_webauthn_devices;
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
diff --git a/internal/storage/migrations/V0002.Webauthn.sqlite.up.sql b/internal/storage/migrations/V0002.Webauthn.sqlite.up.sql
index d18f6d744..1f7e63169 100644
--- a/internal/storage/migrations/V0002.Webauthn.sqlite.up.sql
+++ b/internal/storage/migrations/V0002.Webauthn.sqlite.up.sql
@@ -1,8 +1,11 @@
-ALTER TABLE totp_configurations RENAME TO _bkp_UP_V0002_totp_configurations;
-ALTER TABLE u2f_devices RENAME TO _bkp_UP_V0002_u2f_devices;
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_UP_V0002_totp_configurations;
+
+ALTER TABLE u2f_devices
+ RENAME TO _bkp_UP_V0002_u2f_devices;
CREATE TABLE IF NOT EXISTS totp_configurations (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP NULL DEFAULT NULL,
username VARCHAR(100) NOT NULL,
@@ -11,7 +14,6 @@ CREATE TABLE IF NOT EXISTS totp_configurations (
digits INTEGER NOT NULL DEFAULT 6,
period INTEGER NOT NULL DEFAULT 30,
secret BLOB NOT NULL,
- PRIMARY KEY (id),
UNIQUE (username)
);
@@ -19,8 +21,10 @@ INSERT INTO totp_configurations (id, username, issuer, algorithm, digits, period
SELECT id, username, issuer, algorithm, digits, period, secret
FROM _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+
CREATE TABLE IF NOT EXISTS webauthn_devices (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP NULL DEFAULT NULL,
rpid TEXT,
@@ -33,7 +37,6 @@ CREATE TABLE IF NOT EXISTS webauthn_devices (
aaguid CHAR(36) NOT NULL,
sign_count INTEGER DEFAULT 0,
clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
- PRIMARY KEY (id),
UNIQUE (username, description),
UNIQUE (kid)
);
@@ -42,6 +45,8 @@ INSERT INTO webauthn_devices (id, rpid, username, description, kid, public_key,
SELECT id, '', username, description, BIN2B64(key_handle), public_key, 'fido-u2f', '00000000-0000-0000-0000-000000000000', 0
FROM _bkp_UP_V0002_u2f_devices;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
+
UPDATE user_preferences
SET second_factor_method = 'webauthn'
WHERE second_factor_method = 'u2f';
diff --git a/internal/storage/migrations/V0003.WebauthnKIDLength.mysql.up.sql b/internal/storage/migrations/V0003.WebauthnKIDLength.mysql.up.sql
index 79fede7c9..f2caeca95 100644
--- a/internal/storage/migrations/V0003.WebauthnKIDLength.mysql.up.sql
+++ b/internal/storage/migrations/V0003.WebauthnKIDLength.mysql.up.sql
@@ -1,7 +1,8 @@
-ALTER TABLE webauthn_devices RENAME _bkp_UP_V0003_webauthn_devices;
+ALTER TABLE webauthn_devices
+ RENAME _bkp_UP_V0003_webauthn_devices;
CREATE TABLE IF NOT EXISTS webauthn_devices (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP NULL DEFAULT NULL,
rpid TEXT,
@@ -14,10 +15,9 @@ CREATE TABLE IF NOT EXISTS webauthn_devices (
aaguid CHAR(36) NOT NULL,
sign_count INTEGER DEFAULT 0,
clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
- PRIMARY KEY (id),
UNIQUE KEY (username, description),
UNIQUE KEY (kid)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
INSERT INTO webauthn_devices (id, created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning)
SELECT id, created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning
diff --git a/internal/storage/migrations/V0003.WebauthnKIDLength.postgres.up.sql b/internal/storage/migrations/V0003.WebauthnKIDLength.postgres.up.sql
index 2aeeb828e..078b51627 100644
--- a/internal/storage/migrations/V0003.WebauthnKIDLength.postgres.up.sql
+++ b/internal/storage/migrations/V0003.WebauthnKIDLength.postgres.up.sql
@@ -1,7 +1,15 @@
-ALTER TABLE webauthn_devices RENAME TO _bkp_UP_V0003_webauthn_devices;
+ALTER TABLE webauthn_devices
+ DROP CONSTRAINT IF EXISTS webauthn_devices_pkey,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_pkey1;
+
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_UP_V0003_webauthn_devices;
+
+DROP INDEX IF EXISTS webauthn_devices_kid_key;
+DROP INDEX IF EXISTS webauthn_devices_lookup_key;
CREATE TABLE IF NOT EXISTS webauthn_devices (
- id SERIAL,
+ id SERIAL CONSTRAINT webauthn_devices_pkey PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
rpid TEXT,
@@ -13,12 +21,12 @@ CREATE TABLE IF NOT EXISTS webauthn_devices (
transport VARCHAR(20) DEFAULT '',
aaguid CHAR(36) NOT NULL,
sign_count INTEGER DEFAULT 0,
- clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
- PRIMARY KEY (id),
- UNIQUE (username, description),
- UNIQUE (kid)
+ clone_warning BOOLEAN NOT NULL DEFAULT FALSE
);
+CREATE UNIQUE INDEX webauthn_devices_kid_key ON webauthn_devices (kid);
+CREATE UNIQUE INDEX webauthn_devices_lookup_key ON webauthn_devices (username, description);
+
INSERT INTO webauthn_devices (id, created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning)
SELECT id, created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning
FROM _bkp_UP_V0003_webauthn_devices;
diff --git a/internal/storage/migrations/V0003.WebauthnKIDLength.sqlite.up.sql b/internal/storage/migrations/V0003.WebauthnKIDLength.sqlite.up.sql
index 52c34b3d3..d19030808 100644
--- a/internal/storage/migrations/V0003.WebauthnKIDLength.sqlite.up.sql
+++ b/internal/storage/migrations/V0003.WebauthnKIDLength.sqlite.up.sql
@@ -1,7 +1,8 @@
-ALTER TABLE webauthn_devices RENAME TO _bkp_UP_V0003_webauthn_devices;
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_UP_V0003_webauthn_devices;
CREATE TABLE IF NOT EXISTS webauthn_devices (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_used_at TIMESTAMP NULL DEFAULT NULL,
rpid TEXT,
@@ -14,7 +15,6 @@ CREATE TABLE IF NOT EXISTS webauthn_devices (
aaguid CHAR(36) NOT NULL,
sign_count INTEGER DEFAULT 0,
clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
- PRIMARY KEY (id),
UNIQUE (username, description),
UNIQUE (kid)
);
diff --git a/internal/storage/migrations/V0004.OpenIDConnect.all.down.sql b/internal/storage/migrations/V0004.OpenIDConnect.all.down.sql
index 481f502fb..257ddcc97 100644
--- a/internal/storage/migrations/V0004.OpenIDConnect.all.down.sql
+++ b/internal/storage/migrations/V0004.OpenIDConnect.all.down.sql
@@ -5,4 +5,4 @@ DROP TABLE IF EXISTS oauth2_refresh_token_session;
DROP TABLE IF EXISTS oauth2_pkce_request_session;
DROP TABLE IF EXISTS oauth2_openid_connect_session;
DROP TABLE IF EXISTS oauth2_consent_session;
-DROP TABLE IF EXISTS user_opaque_identifier;
\ No newline at end of file
+DROP TABLE IF EXISTS user_opaque_identifier;
diff --git a/internal/storage/migrations/V0004.OpenIDConnect.mysql.up.sql b/internal/storage/migrations/V0004.OpenIDConnect.mysql.up.sql
index 4fc3adc70..aa415acc1 100644
--- a/internal/storage/migrations/V0004.OpenIDConnect.mysql.up.sql
+++ b/internal/storage/migrations/V0004.OpenIDConnect.mysql.up.sql
@@ -1,26 +1,24 @@
CREATE TABLE IF NOT EXISTS user_opaque_identifier (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
service VARCHAR(20) NOT NULL,
sector_id VARCHAR(255) NOT NULL,
username VARCHAR(100) NOT NULL,
- identifier CHAR(36) NOT NULL,
- PRIMARY KEY (id)
-);
+ identifier CHAR(36) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE UNIQUE INDEX user_opaque_identifier_service_sector_id_username_key ON user_opaque_identifier (service, sector_id, username);
CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
CREATE TABLE IF NOT EXISTS oauth2_blacklisted_jti (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
signature VARCHAR(64) NOT NULL,
- expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (id)
-);
+ expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE UNIQUE INDEX oauth2_blacklisted_jti_signature_key ON oauth2_blacklisted_jti (signature);
CREATE TABLE IF NOT EXISTS oauth2_consent_session (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
@@ -33,17 +31,18 @@ CREATE TABLE IF NOT EXISTS oauth2_consent_session (
requested_scopes TEXT NOT NULL,
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL,
- granted_audience TEXT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_subject_fkey
- FOREIGN KEY (subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ granted_audience TEXT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -57,22 +56,23 @@ CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY (challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY (subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -86,22 +86,23 @@ CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -115,22 +116,23 @@ CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -144,22 +146,23 @@ CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
- id INTEGER AUTO_INCREMENT,
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -173,16 +176,17 @@ CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
\ No newline at end of file
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0004.OpenIDConnect.postgres.up.sql b/internal/storage/migrations/V0004.OpenIDConnect.postgres.up.sql
index c5685dd21..9003da79a 100644
--- a/internal/storage/migrations/V0004.OpenIDConnect.postgres.up.sql
+++ b/internal/storage/migrations/V0004.OpenIDConnect.postgres.up.sql
@@ -1,26 +1,24 @@
CREATE TABLE IF NOT EXISTS user_opaque_identifier (
- id SERIAL,
+ id SERIAL CONSTRAINT user_opaque_identifier_pkey PRIMARY KEY,
service VARCHAR(20) NOT NULL,
sector_id VARCHAR(255) NOT NULL,
username VARCHAR(100) NOT NULL,
- identifier CHAR(36) NOT NULL,
- PRIMARY KEY (id)
+ identifier CHAR(36) NOT NULL
);
CREATE UNIQUE INDEX user_opaque_identifier_service_sector_id_username_key ON user_opaque_identifier (service, sector_id, username);
CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
CREATE TABLE IF NOT EXISTS oauth2_blacklisted_jti (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_blacklisted_jti_pkey PRIMARY KEY,
signature VARCHAR(64) NOT NULL,
- expires_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (id)
+ expires_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX oauth2_blacklisted_jti_signature_key ON oauth2_blacklisted_jti (signature);
CREATE TABLE IF NOT EXISTS oauth2_consent_session (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_consent_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
@@ -33,17 +31,18 @@ CREATE TABLE IF NOT EXISTS oauth2_consent_session (
requested_scopes TEXT NOT NULL,
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL DEFAULT '',
- granted_audience TEXT NULL DEFAULT '',
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ granted_audience TEXT NULL DEFAULT ''
);
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_authorization_code_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -57,22 +56,23 @@ CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_access_token_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -86,22 +86,23 @@ CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_refresh_token_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -115,22 +116,23 @@ CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_pkce_request_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -144,22 +146,23 @@ CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
- id SERIAL,
+ id SERIAL CONSTRAINT oauth2_openid_connect_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -173,16 +176,17 @@ CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0004.OpenIDConnect.sqlite.up.sql b/internal/storage/migrations/V0004.OpenIDConnect.sqlite.up.sql
index 372fbeb58..0be3e9a54 100644
--- a/internal/storage/migrations/V0004.OpenIDConnect.sqlite.up.sql
+++ b/internal/storage/migrations/V0004.OpenIDConnect.sqlite.up.sql
@@ -1,26 +1,24 @@
CREATE TABLE IF NOT EXISTS user_opaque_identifier (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
service VARCHAR(20) NOT NULL,
sector_id VARCHAR(255) NOT NULL,
username VARCHAR(100) NOT NULL,
- identifier CHAR(36) NOT NULL,
- PRIMARY KEY (id)
+ identifier CHAR(36) NOT NULL
);
CREATE UNIQUE INDEX user_opaque_identifier_service_sector_id_username_key ON user_opaque_identifier (service, sector_id, username);
CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
CREATE TABLE IF NOT EXISTS oauth2_blacklisted_jti (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
signature VARCHAR(64) NOT NULL,
- expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (id)
+ expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX oauth2_blacklisted_jti_signature_key ON oauth2_blacklisted_jti (signature);
CREATE TABLE IF NOT EXISTS oauth2_consent_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
@@ -34,16 +32,15 @@ CREATE TABLE IF NOT EXISTS oauth2_consent_session (
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL DEFAULT '',
granted_audience TEXT NULL DEFAULT '',
- PRIMARY KEY (id),
CONSTRAINT oauth2_consent_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -58,13 +55,12 @@ CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
@@ -72,7 +68,7 @@ CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authoriza
CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -87,13 +83,12 @@ CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
@@ -101,7 +96,7 @@ CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_se
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -116,13 +111,12 @@ CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
@@ -130,7 +124,7 @@ CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_
CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -145,13 +139,12 @@ CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
@@ -159,7 +152,7 @@ CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_se
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -174,13 +167,12 @@ CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
diff --git a/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.down.sql b/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.down.sql
index 95aab5ef0..2fe4c9aa7 100644
--- a/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.down.sql
+++ b/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.down.sql
@@ -1,3 +1,11 @@
ALTER TABLE oauth2_consent_session
-DROP FOREIGN KEY oauth2_consent_session_subject_fkey,
- ADD CONSTRAINT oauth2_consent_subject_fkey FOREIGN KEY (subject) REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
\ No newline at end of file
+ DROP FOREIGN KEY oauth2_consent_session_subject_fkey,
+ ADD CONSTRAINT oauth2_consent_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+DELETE FROM oauth2_consent_session
+WHERE subject IS NULL;
+
+ALTER TABLE oauth2_consent_session
+ MODIFY subject CHAR(36) NOT NULL;
diff --git a/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.up.sql b/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.up.sql
index 72399fa12..9fb490909 100644
--- a/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.up.sql
+++ b/internal/storage/migrations/V0005.ConsentSubjectNULL.mysql.up.sql
@@ -1,7 +1,17 @@
-DELETE FROM oauth2_consent_session WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
-DELETE FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect');
-DELETE FROM user_opaque_identifier WHERE service <> 'openid';
-ALTER TABLE oauth2_consent_session MODIFY subject CHAR(36) NULL DEFAULT NULL;
+DELETE FROM oauth2_consent_session
+ WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
+
+DELETE FROM user_opaque_identifier
+ WHERE username = '' AND service IN('openid', 'openid_connect');
+
+DELETE FROM user_opaque_identifier
+ WHERE service <> 'openid';
+
+ALTER TABLE oauth2_consent_session
+ MODIFY subject CHAR(36) NULL DEFAULT NULL;
+
ALTER TABLE oauth2_consent_session
DROP FOREIGN KEY oauth2_consent_subject_fkey,
- ADD CONSTRAINT oauth2_consent_session_subject_fkey FOREIGN KEY (subject) REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.down.sql b/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.down.sql
index 7fd6d685d..8def062aa 100644
--- a/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.down.sql
+++ b/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.down.sql
@@ -1 +1,9 @@
-ALTER TABLE oauth2_consent_session RENAME CONSTRAINT oauth2_consent_session_subject_fkey TO oauth2_consent_subject_fkey;
\ No newline at end of file
+ALTER TABLE oauth2_consent_session
+ RENAME CONSTRAINT oauth2_consent_session_subject_fkey TO oauth2_consent_subject_fkey;
+
+DELETE FROM oauth2_consent_session
+WHERE subject IS NULL;
+
+ALTER TABLE oauth2_consent_session
+ ALTER COLUMN subject SET NOT NULL,
+ ALTER COLUMN subject DROP DEFAULT;
diff --git a/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.up.sql b/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.up.sql
index b68f381be..0a41727d4 100644
--- a/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.up.sql
+++ b/internal/storage/migrations/V0005.ConsentSubjectNULL.postgres.up.sql
@@ -1,6 +1,12 @@
-DELETE FROM oauth2_consent_session WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
-DELETE FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect');
-DELETE FROM user_opaque_identifier WHERE service <> 'openid';
-ALTER TABLE oauth2_consent_session ALTER COLUMN subject DROP NOT NULL;
-ALTER TABLE oauth2_consent_session ALTER COLUMN subject SET DEFAULT NULL;
-ALTER TABLE oauth2_consent_session RENAME CONSTRAINT oauth2_consent_subject_fkey TO oauth2_consent_session_subject_fkey;
+DELETE FROM oauth2_consent_session
+ WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
+
+DELETE FROM user_opaque_identifier
+ WHERE service <> 'openid' OR username = '';
+
+ALTER TABLE oauth2_consent_session
+ ALTER COLUMN subject DROP NOT NULL,
+ ALTER COLUMN subject SET DEFAULT NULL;
+
+ALTER TABLE oauth2_consent_session
+ RENAME CONSTRAINT oauth2_consent_subject_fkey TO oauth2_consent_session_subject_fkey;
diff --git a/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.down.sql b/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.down.sql
index e0ac49d1e..c736d6b87 100644
--- a/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.down.sql
+++ b/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.down.sql
@@ -1 +1,266 @@
-SELECT 1;
+PRAGMA foreign_keys=off;
+
+BEGIN TRANSACTION;
+
+DELETE FROM oauth2_consent_session
+ WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
+
+DELETE FROM user_opaque_identifier
+ WHERE username = '' AND service IN('openid', 'openid_connect');
+
+DELETE FROM user_opaque_identifier
+ WHERE service <> 'openid';
+
+DROP INDEX IF EXISTS oauth2_consent_session_challenge_id_key;
+
+ALTER TABLE oauth2_consent_session
+ RENAME TO _bkp_DOWN_V0005_oauth2_consent_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ authorized BOOLEAN NOT NULL DEFAULT FALSE,
+ granted BOOLEAN NOT NULL DEFAULT FALSE,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ responded_at TIMESTAMP NULL DEFAULT NULL,
+ expires_at TIMESTAMP NULL DEFAULT NULL,
+ form_data TEXT NOT NULL,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ CONSTRAINT oauth2_consent_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+
+INSERT INTO oauth2_consent_session (challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, expires_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience)
+SELECT challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, expires_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience
+FROM _bkp_DOWN_V0005_oauth2_consent_session
+WHERE subject IS NOT NULL
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0005_oauth2_consent_session;
+
+DROP INDEX IF EXISTS oauth2_authorization_code_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_authorization_code_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_authorization_code_session_client_id_subject_idx;
+
+ALTER TABLE oauth2_authorization_code_session
+ RENAME TO _bkp_DOWN_V0005_oauth2_authorization_code_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+
+INSERT INTO oauth2_authorization_code_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0005_oauth2_authorization_code_session
+WHERE challenge_id IN (SELECT challenge_id FROM oauth2_consent_session)
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0005_oauth2_authorization_code_session;
+
+DROP INDEX IF EXISTS oauth2_access_token_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_access_token_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_access_token_session_client_id_subject_idx;
+
+ALTER TABLE oauth2_access_token_session
+ RENAME TO _bkp_DOWN_V0005_oauth2_access_token_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
+CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
+CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+
+INSERT INTO oauth2_access_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0005_oauth2_access_token_session
+WHERE challenge_id IN (SELECT challenge_id FROM oauth2_consent_session)
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0005_oauth2_access_token_session;
+
+DROP INDEX IF EXISTS oauth2_refresh_token_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_refresh_token_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_refresh_token_session_client_id_subject_idx;
+
+ALTER TABLE oauth2_refresh_token_session
+ RENAME TO _bkp_DOWN_V0005_oauth2_refresh_token_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
+INSERT INTO oauth2_refresh_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0005_oauth2_refresh_token_session
+WHERE challenge_id IN (SELECT challenge_id FROM oauth2_consent_session)
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0005_oauth2_refresh_token_session;
+
+DROP INDEX IF EXISTS oauth2_pkce_request_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_pkce_request_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_pkce_request_session_client_id_subject_idx;
+
+ALTER TABLE oauth2_pkce_request_session
+ RENAME TO _bkp_DOWN_V0005_oauth2_pkce_request_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+
+INSERT INTO oauth2_pkce_request_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0005_oauth2_pkce_request_session
+WHERE challenge_id IN (SELECT challenge_id FROM oauth2_consent_session)
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0005_oauth2_pkce_request_session;
+
+DROP INDEX IF EXISTS oauth2_openid_connect_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_openid_connect_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_openid_connect_session_client_id_subject_idx;
+
+ALTER TABLE oauth2_openid_connect_session
+ RENAME TO _bkp_DOWN_V0005_oauth2_openid_connect_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+INSERT INTO oauth2_openid_connect_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0005_oauth2_openid_connect_session
+WHERE challenge_id IN (SELECT challenge_id FROM oauth2_consent_session)
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0005_oauth2_openid_connect_session;
+
+COMMIT;
+
+PRAGMA foreign_keys=on;
diff --git a/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.up.sql b/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.up.sql
index a40a79c2e..c9347cb4d 100644
--- a/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.up.sql
+++ b/internal/storage/migrations/V0005.ConsentSubjectNULL.sqlite.up.sql
@@ -2,14 +2,22 @@ PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
-DELETE FROM oauth2_consent_session WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
-DELETE FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect');
-DELETE FROM user_opaque_identifier WHERE service <> 'openid';
+DELETE FROM oauth2_consent_session
+ WHERE subject IN(SELECT identifier FROM user_opaque_identifier WHERE username = '' AND service IN('openid', 'openid_connect'));
-ALTER TABLE oauth2_consent_session RENAME TO _bkp_UP_V0005_oauth2_consent_session;
+DELETE FROM user_opaque_identifier
+ WHERE username = '' AND service IN('openid', 'openid_connect');
+
+DELETE FROM user_opaque_identifier
+ WHERE service <> 'openid';
+
+DROP INDEX IF EXISTS oauth2_consent_session_challenge_id_key;
+
+ALTER TABLE oauth2_consent_session
+ RENAME TO _bkp_UP_V0005_oauth2_consent_session;
CREATE TABLE IF NOT EXISTS oauth2_consent_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NULL DEFAULT NULL,
@@ -23,27 +31,29 @@ CREATE TABLE IF NOT EXISTS oauth2_consent_session (
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL DEFAULT '',
granted_audience TEXT NULL DEFAULT '',
- PRIMARY KEY (id),
CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
+CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+
INSERT INTO oauth2_consent_session (challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, expires_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience)
SELECT challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, expires_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience
FROM _bkp_UP_V0005_oauth2_consent_session
ORDER BY id;
-DROP INDEX oauth2_consent_session_challenge_id_key;
+DROP TABLE IF EXISTS _bkp_UP_V0005_oauth2_consent_session;
-CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+DROP INDEX IF EXISTS oauth2_authorization_code_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_authorization_code_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_authorization_code_session_client_id_subject_idx;
-DROP TABLE _bkp_UP_V0005_oauth2_consent_session;
-
-ALTER TABLE oauth2_authorization_code_session RENAME TO _bkp_UP_V0005_oauth2_authorization_code_session;
+ALTER TABLE oauth2_authorization_code_session
+ RENAME TO _bkp_UP_V0005_oauth2_authorization_code_session;
CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -58,34 +68,34 @@ CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+
INSERT INTO oauth2_authorization_code_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
FROM _bkp_UP_V0005_oauth2_authorization_code_session
ORDER BY id;
-DROP INDEX oauth2_authorization_code_session_request_id_idx;
-DROP INDEX oauth2_authorization_code_session_client_id_idx;
-DROP INDEX oauth2_authorization_code_session_client_id_subject_idx;
+DROP TABLE IF EXISTS _bkp_UP_V0005_oauth2_authorization_code_session;
-CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+DROP INDEX IF EXISTS oauth2_access_token_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_access_token_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_access_token_session_client_id_subject_idx;
-DROP TABLE _bkp_UP_V0005_oauth2_authorization_code_session;
-
-ALTER TABLE oauth2_access_token_session RENAME TO _bkp_UP_V0005_oauth2_access_token_session;
+ALTER TABLE oauth2_access_token_session
+ RENAME TO _bkp_UP_V0005_oauth2_access_token_session;
CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -100,34 +110,34 @@ CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
+CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
+CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
+CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+
INSERT INTO oauth2_access_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
FROM _bkp_UP_V0005_oauth2_access_token_session
ORDER BY id;
-DROP INDEX oauth2_access_token_session_request_id_idx;
-DROP INDEX oauth2_access_token_session_client_id_idx;
-DROP INDEX oauth2_access_token_session_client_id_subject_idx;
+DROP TABLE IF EXISTS _bkp_UP_V0005_oauth2_access_token_session;
-CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
-CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
-CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+DROP INDEX IF EXISTS oauth2_refresh_token_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_refresh_token_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_refresh_token_session_client_id_subject_idx;
-DROP TABLE _bkp_UP_V0005_oauth2_access_token_session;
-
-ALTER TABLE oauth2_refresh_token_session RENAME TO _bkp_UP_V0005_oauth2_refresh_token_session;
+ALTER TABLE oauth2_refresh_token_session
+ RENAME TO _bkp_UP_V0005_oauth2_refresh_token_session;
CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -142,34 +152,34 @@ CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
INSERT INTO oauth2_refresh_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
FROM _bkp_UP_V0005_oauth2_refresh_token_session
ORDER BY id;
-DROP INDEX oauth2_refresh_token_session_request_id_idx;
-DROP INDEX oauth2_refresh_token_session_client_id_idx;
-DROP INDEX oauth2_refresh_token_session_client_id_subject_idx;
+DROP TABLE IF EXISTS _bkp_UP_V0005_oauth2_refresh_token_session;
-CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+DROP INDEX IF EXISTS oauth2_pkce_request_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_pkce_request_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_pkce_request_session_client_id_subject_idx;
-DROP TABLE _bkp_UP_V0005_oauth2_refresh_token_session;
-
-ALTER TABLE oauth2_pkce_request_session RENAME TO _bkp_UP_V0005_oauth2_pkce_request_session;
+ALTER TABLE oauth2_pkce_request_session
+ RENAME TO _bkp_UP_V0005_oauth2_pkce_request_session;
CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -184,34 +194,34 @@ CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
+CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+
INSERT INTO oauth2_pkce_request_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
FROM _bkp_UP_V0005_oauth2_pkce_request_session
ORDER BY id;
-DROP INDEX oauth2_pkce_request_session_request_id_idx;
-DROP INDEX oauth2_pkce_request_session_client_id_idx;
-DROP INDEX oauth2_pkce_request_session_client_id_subject_idx;
+DROP TABLE IF EXISTS _bkp_UP_V0005_oauth2_pkce_request_session;
-CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
-CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
-CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+DROP INDEX IF EXISTS oauth2_openid_connect_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_openid_connect_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_openid_connect_session_client_id_subject_idx;
-DROP TABLE _bkp_UP_V0005_oauth2_pkce_request_session;
-
-ALTER TABLE oauth2_openid_connect_session RENAME TO _bkp_UP_V0005_oauth2_openid_connect_session;
+ALTER TABLE oauth2_openid_connect_session
+ RENAME TO _bkp_UP_V0005_oauth2_openid_connect_session;
CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -226,29 +236,24 @@ CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
INSERT INTO oauth2_openid_connect_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
FROM _bkp_UP_V0005_oauth2_openid_connect_session
ORDER BY id;
-DROP INDEX oauth2_openid_connect_session_request_id_idx;
-DROP INDEX oauth2_openid_connect_session_client_id_idx;
-DROP INDEX oauth2_openid_connect_session_client_id_subject_idx;
-
-CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
-
-DROP TABLE _bkp_UP_V0005_oauth2_openid_connect_session;
+DROP TABLE IF EXISTS _bkp_UP_V0005_oauth2_openid_connect_session;
COMMIT;
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.down.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.down.sql
index e06f19d81..1a25ce77f 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.down.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.down.sql
@@ -1,13 +1,13 @@
-DROP TABLE oauth2_authorization_code_session;
-DROP TABLE oauth2_access_token_session;
-DROP TABLE oauth2_refresh_token_session;
-DROP TABLE oauth2_pkce_request_session;
-DROP TABLE oauth2_openid_connect_session;
-DROP TABLE oauth2_consent_session;
-DROP TABLE oauth2_consent_preconfiguration;
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+DROP TABLE IF EXISTS oauth2_access_token_session;
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+DROP TABLE IF EXISTS oauth2_consent_session;
+DROP TABLE IF EXISTS oauth2_consent_preconfiguration;
-CREATE TABLE oauth2_consent_session (
- id INTEGER AUTO_INCREMENT,
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NULL DEFAULT NULL,
@@ -20,46 +20,18 @@ CREATE TABLE oauth2_consent_session (
requested_scopes TEXT NOT NULL,
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL,
- granted_audience TEXT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY (subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ granted_audience TEXT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
-CREATE TABLE oauth2_authorization_code_session (
- id INTEGER AUTO_INCREMENT,
- challenge_id CHAR(36) NOT NULL,
- request_id VARCHAR(40) NOT NULL,
- client_id VARCHAR(255) NOT NULL,
- signature VARCHAR(255) NOT NULL,
- subject CHAR(36) NOT NULL,
- requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- requested_scopes TEXT NOT NULL,
- granted_scopes TEXT NOT NULL,
- requested_audience TEXT NULL,
- granted_audience TEXT NULL,
- active BOOLEAN NOT NULL DEFAULT FALSE,
- revoked BOOLEAN NOT NULL DEFAULT FALSE,
- form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY (challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
FOREIGN KEY (subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
-CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-
-CREATE TABLE oauth2_access_token_session (
- id INTEGER AUTO_INCREMENT,
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -73,22 +45,23 @@ CREATE TABLE oauth2_access_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
-CREATE TABLE oauth2_refresh_token_session (
- id INTEGER AUTO_INCREMENT,
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -102,22 +75,23 @@ CREATE TABLE oauth2_refresh_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-CREATE TABLE oauth2_pkce_request_session (
- id INTEGER AUTO_INCREMENT,
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -131,22 +105,54 @@ CREATE TABLE oauth2_pkce_request_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL,
+ granted_audience TEXT NULL,
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
-CREATE TABLE oauth2_openid_connect_session (
- id INTEGER AUTO_INCREMENT,
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -160,16 +166,17 @@ CREATE TABLE oauth2_openid_connect_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql
index 2e15cdd7f..374f9f691 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.mysql.up.sql
@@ -1,17 +1,18 @@
-CREATE TABLE oauth2_consent_preconfiguration (
- id INTEGER AUTO_INCREMENT,
+CREATE TABLE IF NOT EXISTS oauth2_consent_preconfiguration (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NULL DEFAULT NULL,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
scopes TEXT NOT NULL,
- audience TEXT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_preconfiguration_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ audience TEXT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ ADD CONSTRAINT oauth2_consent_preconfiguration_subjct_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
INSERT INTO oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, scopes, audience)
SELECT client_id, subject, responded_at, expires_at, granted_scopes, granted_audience
@@ -19,15 +20,15 @@ FROM oauth2_consent_session
WHERE expires_at IS NOT NULL AND responded_at IS NOT NULL
ORDER BY responded_at;
-DROP TABLE oauth2_authorization_code_session;
-DROP TABLE oauth2_access_token_session;
-DROP TABLE oauth2_refresh_token_session;
-DROP TABLE oauth2_pkce_request_session;
-DROP TABLE oauth2_openid_connect_session;
-DROP TABLE oauth2_consent_session;
+DROP TABLE IF EXISTS oauth2_access_token_session;
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+DROP TABLE IF EXISTS oauth2_consent_session;
-CREATE TABLE oauth2_consent_session (
- id INTEGER AUTO_INCREMENT,
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
@@ -40,49 +41,21 @@ CREATE TABLE oauth2_consent_session (
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL,
granted_audience TEXT NULL,
- preconfiguration INTEGER NULL DEFAULT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY (subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
- CONSTRAINT oauth2_consent_session_preconfiguration_fkey
- FOREIGN KEY (preconfiguration)
- REFERENCES oauth2_consent_preconfiguration(id) ON UPDATE CASCADE ON DELETE CASCADE
-);
+ preconfiguration INTEGER NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
-CREATE TABLE oauth2_authorization_code_session (
- id INTEGER AUTO_INCREMENT,
- challenge_id CHAR(36) NOT NULL,
- request_id VARCHAR(40) NOT NULL,
- client_id VARCHAR(255) NOT NULL,
- signature VARCHAR(255) NOT NULL,
- subject CHAR(36) NOT NULL,
- requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- requested_scopes TEXT NOT NULL,
- granted_scopes TEXT NOT NULL,
- requested_audience TEXT NULL,
- granted_audience TEXT NULL,
- active BOOLEAN NOT NULL DEFAULT FALSE,
- revoked BOOLEAN NOT NULL DEFAULT FALSE,
- form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY (challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
FOREIGN KEY (subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ ADD CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE;
-CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-
-CREATE TABLE oauth2_access_token_session (
- id INTEGER AUTO_INCREMENT,
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -96,22 +69,23 @@ CREATE TABLE oauth2_access_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
-CREATE TABLE oauth2_refresh_token_session (
- id INTEGER AUTO_INCREMENT,
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -125,22 +99,23 @@ CREATE TABLE oauth2_refresh_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-CREATE TABLE oauth2_pkce_request_session (
- id INTEGER AUTO_INCREMENT,
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -154,22 +129,53 @@ CREATE TABLE oauth2_pkce_request_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL,
+ granted_audience TEXT NULL,
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
-CREATE TABLE oauth2_openid_connect_session (
- id INTEGER AUTO_INCREMENT,
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -183,16 +189,17 @@ CREATE TABLE oauth2_openid_connect_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BLOB NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
+ session_data BLOB NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.down.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.down.sql
index a180af297..8cdcacffa 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.down.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.down.sql
@@ -1,13 +1,13 @@
-DROP TABLE oauth2_authorization_code_session;
-DROP TABLE oauth2_access_token_session;
-DROP TABLE oauth2_refresh_token_session;
-DROP TABLE oauth2_pkce_request_session;
-DROP TABLE oauth2_openid_connect_session;
-DROP TABLE oauth2_consent_session;
-DROP TABLE oauth2_consent_preconfiguration;
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+DROP TABLE IF EXISTS oauth2_access_token_session;
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+DROP TABLE IF EXISTS oauth2_consent_session;
+DROP TABLE IF EXISTS oauth2_consent_preconfiguration;
-CREATE TABLE oauth2_consent_session (
- id SERIAL,
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id SERIAL CONSTRAINT oauth2_consent_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NULL DEFAULT NULL,
@@ -20,17 +20,18 @@ CREATE TABLE oauth2_consent_session (
requested_scopes TEXT NOT NULL,
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL DEFAULT '',
- granted_audience TEXT NULL DEFAULT '',
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ granted_audience TEXT NULL DEFAULT ''
);
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
-CREATE TABLE oauth2_authorization_code_session (
- id SERIAL,
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id SERIAL CONSTRAINT oauth2_authorization_code_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -44,22 +45,25 @@ CREATE TABLE oauth2_authorization_code_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-CREATE TABLE oauth2_access_token_session (
- id SERIAL,
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id SERIAL CONSTRAINT oauth2_access_token_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -73,22 +77,23 @@ CREATE TABLE oauth2_access_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
-CREATE TABLE oauth2_refresh_token_session (
- id SERIAL,
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id SERIAL CONSTRAINT oauth2_refresh_token_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -102,22 +107,23 @@ CREATE TABLE oauth2_refresh_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
-CREATE TABLE oauth2_pkce_request_session (
- id SERIAL,
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id SERIAL CONSTRAINT oauth2_pkce_request_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -131,22 +137,23 @@ CREATE TABLE oauth2_pkce_request_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
-CREATE TABLE oauth2_openid_connect_session (
- id SERIAL,
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id SERIAL CONSTRAINT oauth2_openid_connect_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -160,16 +167,17 @@ CREATE TABLE oauth2_openid_connect_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql
index 21f1319d6..0d00375ab 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.postgres.up.sql
@@ -1,33 +1,34 @@
-CREATE TABLE oauth2_consent_preconfiguration (
- id SERIAL,
+CREATE TABLE IF NOT EXISTS oauth2_consent_preconfiguration (
+ id SERIAL CONSTRAINT oauth2_consent_preconfiguration_pkey PRIMARY KEY,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
scopes TEXT NOT NULL,
- audience TEXT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_preconfiguration_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ audience TEXT NULL
);
+ALTER TABLE oauth2_consent_preconfiguration
+ ADD CONSTRAINT oauth2_consent_preconfiguration_subjct_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
INSERT INTO oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, scopes, audience)
SELECT client_id, subject, responded_at, expires_at, granted_scopes, granted_audience
FROM oauth2_consent_session
WHERE expires_at IS NOT NULL AND responded_at IS NOT NULL
ORDER BY responded_at;
-DROP TABLE oauth2_authorization_code_session;
-DROP TABLE oauth2_access_token_session;
-DROP TABLE oauth2_refresh_token_session;
-DROP TABLE oauth2_pkce_request_session;
-DROP TABLE oauth2_openid_connect_session;
-DROP TABLE oauth2_consent_session;
+DROP TABLE IF EXISTS oauth2_access_token_session;
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+DROP TABLE IF EXISTS oauth2_consent_session;
-CREATE TABLE oauth2_consent_session (
- id SERIAL,
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id SERIAL CONSTRAINT oauth2_consent_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
@@ -40,20 +41,21 @@ CREATE TABLE oauth2_consent_session (
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL,
granted_audience TEXT NULL,
- preconfiguration INTEGER NULL DEFAULT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
- CONSTRAINT oauth2_consent_session_preconfiguration_fkey
- FOREIGN KEY(preconfiguration)
- REFERENCES oauth2_consent_preconfiguration(id) ON UPDATE CASCADE ON DELETE CASCADE
+ preconfiguration INTEGER NULL DEFAULT NULL
);
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
-CREATE TABLE oauth2_authorization_code_session (
- id SERIAL,
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ ADD CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id SERIAL CONSTRAINT oauth2_access_token_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -67,51 +69,23 @@ CREATE TABLE oauth2_authorization_code_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
-);
-
-CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
-CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-
-CREATE TABLE oauth2_access_token_session (
- id SERIAL,
- challenge_id CHAR(36) NOT NULL,
- request_id VARCHAR(40) NOT NULL,
- client_id VARCHAR(255) NOT NULL,
- signature VARCHAR(255) NOT NULL,
- subject CHAR(36) NOT NULL,
- requested_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
- requested_scopes TEXT NOT NULL,
- granted_scopes TEXT NOT NULL,
- requested_audience TEXT NULL DEFAULT '',
- granted_audience TEXT NULL DEFAULT '',
- active BOOLEAN NOT NULL DEFAULT FALSE,
- revoked BOOLEAN NOT NULL DEFAULT FALSE,
- form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
-CREATE TABLE oauth2_refresh_token_session (
- id SERIAL,
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id SERIAL CONSTRAINT oauth2_authorization_code_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -125,22 +99,23 @@ CREATE TABLE oauth2_refresh_token_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
-CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
-CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-CREATE TABLE oauth2_pkce_request_session (
- id SERIAL,
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id SERIAL CONSTRAINT oauth2_openid_connect_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -154,22 +129,53 @@ CREATE TABLE oauth2_pkce_request_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
+);
+
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id SERIAL CONSTRAINT oauth2_pkce_request_session_pkey PRIMARY KEY,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BYTEA NOT NULL
);
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
-CREATE TABLE oauth2_openid_connect_session (
- id SERIAL,
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id SERIAL CONSTRAINT oauth2_refresh_token_session_pkey PRIMARY KEY,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -183,16 +189,17 @@ CREATE TABLE oauth2_openid_connect_session (
active BOOLEAN NOT NULL DEFAULT FALSE,
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
- session_data BYTEA NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
- CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ session_data BYTEA NOT NULL
);
-CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
-CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql
index c98c1f49a..7eed980a6 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.down.sql
@@ -1,13 +1,13 @@
-DROP TABLE oauth2_authorization_code_session;
-DROP TABLE oauth2_access_token_session;
-DROP TABLE oauth2_refresh_token_session;
-DROP TABLE oauth2_pkce_request_session;
-DROP TABLE oauth2_openid_connect_session;
-DROP TABLE oauth2_consent_session;
-DROP TABLE oauth2_consent_preconfiguration;
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+DROP TABLE IF EXISTS oauth2_access_token_session;
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+DROP TABLE IF EXISTS oauth2_consent_session;
+DROP TABLE IF EXISTS oauth2_consent_preconfiguration;
-CREATE TABLE oauth2_consent_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NULL DEFAULT NULL,
@@ -21,16 +21,15 @@ CREATE TABLE oauth2_consent_session (
granted_scopes TEXT NOT NULL,
requested_audience TEXT NULL DEFAULT '',
granted_audience TEXT NULL DEFAULT '',
- PRIMARY KEY (id),
CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
-CREATE TABLE oauth2_authorization_code_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -45,13 +44,12 @@ CREATE TABLE oauth2_authorization_code_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
@@ -59,7 +57,7 @@ CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authoriza
CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -74,13 +72,12 @@ CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
@@ -88,7 +85,7 @@ CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_se
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
- id INTEGER,
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -103,21 +100,20 @@ CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
-CREATE TABLE oauth2_pkce_request_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -132,21 +128,20 @@ CREATE TABLE oauth2_pkce_request_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
-CREATE TABLE oauth2_openid_connect_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -161,13 +156,12 @@ CREATE TABLE oauth2_openid_connect_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
diff --git a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql
index 544574e6d..33fe8aa77 100644
--- a/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql
+++ b/internal/storage/migrations/V0006.ConsentPreConfiguration.sqlite.up.sql
@@ -1,5 +1,5 @@
-CREATE TABLE oauth2_consent_preconfiguration (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_consent_preconfiguration (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -7,10 +7,9 @@ CREATE TABLE oauth2_consent_preconfiguration (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
scopes TEXT NOT NULL,
audience TEXT NULL,
- PRIMARY KEY (id),
- CONSTRAINT oauth2_consent_preconfiguration_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ CONSTRAINT oauth2_consent_preconfiguration_subjct_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
INSERT INTO oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, scopes, audience)
@@ -19,15 +18,15 @@ FROM oauth2_consent_session
WHERE expires_at IS NOT NULL AND responded_at IS NOT NULL
ORDER BY responded_at;
-DROP TABLE oauth2_authorization_code_session;
-DROP TABLE oauth2_access_token_session;
-DROP TABLE oauth2_refresh_token_session;
-DROP TABLE oauth2_pkce_request_session;
-DROP TABLE oauth2_openid_connect_session;
-DROP TABLE oauth2_consent_session;
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+DROP TABLE IF EXISTS oauth2_access_token_session;
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+DROP TABLE IF EXISTS oauth2_consent_session;
-CREATE TABLE oauth2_consent_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
client_id VARCHAR(255) NOT NULL,
subject CHAR(36) NOT NULL,
@@ -41,19 +40,18 @@ CREATE TABLE oauth2_consent_session (
requested_audience TEXT NULL DEFAULT '',
granted_audience TEXT NULL DEFAULT '',
preconfiguration INTEGER NULL DEFAULT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_consent_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT oauth2_consent_session_preconfiguration_fkey
- FOREIGN KEY(preconfiguration)
- REFERENCES oauth2_consent_preconfiguration(id) ON UPDATE CASCADE ON DELETE CASCADE
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
-CREATE TABLE oauth2_authorization_code_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -68,21 +66,20 @@ CREATE TABLE oauth2_authorization_code_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_authorization_code_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
-CREATE TABLE oauth2_access_token_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -97,21 +94,20 @@ CREATE TABLE oauth2_access_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_access_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_access_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
-CREATE TABLE oauth2_refresh_token_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -126,21 +122,20 @@ CREATE TABLE oauth2_refresh_token_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_refresh_token_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
-CREATE TABLE oauth2_pkce_request_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -155,21 +150,20 @@ CREATE TABLE oauth2_pkce_request_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_pkce_request_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
-CREATE TABLE oauth2_openid_connect_session (
- id INTEGER,
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
challenge_id CHAR(36) NOT NULL,
request_id VARCHAR(40) NOT NULL,
client_id VARCHAR(255) NOT NULL,
@@ -184,13 +178,12 @@ CREATE TABLE oauth2_openid_connect_session (
revoked BOOLEAN NOT NULL DEFAULT FALSE,
form_data TEXT NOT NULL,
session_data BLOB NOT NULL,
- PRIMARY KEY (id),
CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
- FOREIGN KEY(challenge_id)
- REFERENCES oauth2_consent_session(challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT oauth2_openid_connect_session_subject_fkey
- FOREIGN KEY(subject)
- REFERENCES user_opaque_identifier(identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
);
CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
diff --git a/internal/storage/migrations/V0007.ConsistencyFixes.mysql.down.sql b/internal/storage/migrations/V0007.ConsistencyFixes.mysql.down.sql
new file mode 100644
index 000000000..c82a607ad
--- /dev/null
+++ b/internal/storage/migrations/V0007.ConsistencyFixes.mysql.down.sql
@@ -0,0 +1,96 @@
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_session', 'oauth2_consent_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_session', 'oauth2_consent_session_preconfiguration_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_preconfiguration', 'oauth2_consent_preconfiguration_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_access_token_session', 'oauth2_access_token_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_access_token_session', 'oauth2_access_token_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_authorization_code_session', 'oauth2_authorization_code_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_authorization_code_session', 'oauth2_authorization_code_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_openid_connect_session', 'oauth2_openid_connect_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_openid_connect_session', 'oauth2_openid_connect_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_pkce_request_session', 'oauth2_pkce_request_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_pkce_request_session', 'oauth2_pkce_request_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_refresh_token_session', 'oauth2_refresh_token_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_refresh_token_session', 'oauth2_refresh_token_session_subject_fkey');
+
+CALL PROC_DROP_INDEX('duo_devices', 'duo_devices_username_key');
+CALL PROC_DROP_INDEX('encryption', 'encryption_name_key');
+CALL PROC_DROP_INDEX('identity_verification', 'identity_verification_jti_key');
+CALL PROC_DROP_INDEX('totp_configurations', 'totp_configurations_username_key');
+CALL PROC_DROP_INDEX('user_opaque_identifier', 'user_opaque_identifier_lookup_key');
+CALL PROC_DROP_INDEX('user_opaque_identifier', 'user_opaque_identifier_identifier_key');
+CALL PROC_DROP_INDEX('user_preferences', 'user_preferences_username_key');
+CALL PROC_DROP_INDEX('webauthn_devices', 'webauthn_devices_kid_key');
+CALL PROC_DROP_INDEX('webauthn_devices', 'webauthn_devices_lookup_key');
+
+CREATE UNIQUE INDEX username ON duo_devices (username);
+CREATE UNIQUE INDEX name ON encryption (name);
+CREATE UNIQUE INDEX jti ON identity_verification (jti);
+CREATE UNIQUE INDEX username ON totp_configurations (username);
+CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
+CREATE UNIQUE INDEX user_opaque_identifier_service_sector_id_username_key ON user_opaque_identifier (service, sector_id, username);
+CREATE UNIQUE INDEX username ON user_preferences (username);
+CREATE UNIQUE INDEX kid ON webauthn_devices (kid);
+CREATE UNIQUE INDEX username ON webauthn_devices (username, description);
+
+UPDATE webauthn_devices
+SET aaguid = '00000000-00000000-00000000-00000000'
+WHERE aaguid IS NULL;
+
+ALTER TABLE webauthn_devices
+ MODIFY aaguid CHAR(36) NOT NULL;
+
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ ADD CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ ADD CONSTRAINT oauth2_consent_preconfiguration_subjct_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+DROP PROCEDURE IF EXISTS PROC_DROP_FOREIGN_KEY;
+DROP PROCEDURE IF EXISTS PROC_DROP_INDEX;
diff --git a/internal/storage/migrations/V0007.ConsistencyFixes.mysql.up.sql b/internal/storage/migrations/V0007.ConsistencyFixes.mysql.up.sql
new file mode 100644
index 000000000..0b0d319f5
--- /dev/null
+++ b/internal/storage/migrations/V0007.ConsistencyFixes.mysql.up.sql
@@ -0,0 +1,213 @@
+DROP PROCEDURE IF EXISTS PROC_DROP_FOREIGN_KEY;
+DROP PROCEDURE IF EXISTS PROC_DROP_INDEX;
+
+CREATE PROCEDURE PROC_DROP_FOREIGN_KEY(IN tableName VARCHAR(64), IN constraintName VARCHAR(64))
+BEGIN
+ IF EXISTS(
+ SELECT * FROM information_schema.TABLE_CONSTRAINTS
+ WHERE
+ TABLE_SCHEMA = DATABASE() AND
+ TABLE_NAME = tableName AND
+ CONSTRAINT_NAME = constraintName AND
+ CONSTRAINT_TYPE = 'FOREIGN KEY')
+ THEN
+ SET @query = CONCAT('ALTER TABLE ', tableName, ' DROP FOREIGN KEY ', constraintName, ';');
+ PREPARE stmt FROM @query;
+ EXECUTE stmt;
+ DEALLOCATE PREPARE stmt;
+ END IF;
+END;
+
+CREATE PROCEDURE PROC_DROP_INDEX(IN tableName VARCHAR(64), IN indexName VARCHAR(64))
+BEGIN
+ IF EXISTS(
+ SELECT * FROM information_schema.STATISTICS
+ WHERE
+ TABLE_SCHEMA = DATABASE() AND
+ INDEX_SCHEMA = DATABASE() AND
+ TABLE_NAME = tableName AND
+ INDEX_NAME = indexName)
+ THEN
+ SET @query = CONCAT('ALTER TABLE ', tableName, ' DROP INDEX ', indexName, ';');
+ PREPARE stmt FROM @query;
+ EXECUTE stmt;
+ DEALLOCATE PREPARE stmt;
+ END IF;
+END;
+
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
+DROP TABLE IF EXISTS totp_secrets;
+DROP TABLE IF EXISTS identity_verification_tokens;
+DROP TABLE IF EXISTS u2f_devices;
+DROP TABLE IF EXISTS config;
+DROP TABLE IF EXISTS AuthenticationLogs;
+DROP TABLE IF EXISTS IdentityVerificationTokens;
+DROP TABLE IF EXISTS Preferences;
+DROP TABLE IF EXISTS PreferencesTableName;
+DROP TABLE IF EXISTS SecondFactorPreferences;
+DROP TABLE IF EXISTS TOTPSecrets;
+DROP TABLE IF EXISTS U2FDeviceHandles;
+
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_session', 'oauth2_consent_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_session', 'oauth2_consent_session_preconfiguration_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_preconfiguration', 'oauth2_consent_preconfiguration_subjct_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_consent_preconfiguration', 'oauth2_consent_preconfiguration_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_access_token_session', 'oauth2_access_token_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_access_token_session', 'oauth2_access_token_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_authorization_code_session', 'oauth2_authorization_code_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_authorization_code_session', 'oauth2_authorization_code_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_openid_connect_session', 'oauth2_openid_connect_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_openid_connect_session', 'oauth2_openid_connect_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_pkce_request_session', 'oauth2_pkce_request_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_pkce_request_session', 'oauth2_pkce_request_session_subject_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_refresh_token_session', 'oauth2_refresh_token_session_challenge_id_fkey');
+CALL PROC_DROP_FOREIGN_KEY('oauth2_refresh_token_session', 'oauth2_refresh_token_session_subject_fkey');
+
+CALL PROC_DROP_INDEX('duo_devices', 'username');
+CALL PROC_DROP_INDEX('encryption', 'name');
+CALL PROC_DROP_INDEX('identity_verification', 'jti');
+CALL PROC_DROP_INDEX('totp_configurations', 'username');
+CALL PROC_DROP_INDEX('user_opaque_identifier', 'user_opaque_identifier_identifier_key');
+CALL PROC_DROP_INDEX('user_opaque_identifier', 'user_opaque_identifier_service_sector_id_username_key');
+CALL PROC_DROP_INDEX('user_preferences', 'username');
+CALL PROC_DROP_INDEX('webauthn_devices', 'username');
+CALL PROC_DROP_INDEX('webauthn_devices', 'kid');
+
+CREATE UNIQUE INDEX duo_devices_username_key ON duo_devices (username);
+CREATE UNIQUE INDEX encryption_name_key ON encryption (name);
+CREATE UNIQUE INDEX identity_verification_jti_key ON identity_verification (jti);
+CREATE UNIQUE INDEX totp_configurations_username_key ON totp_configurations (username);
+CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
+CREATE UNIQUE INDEX user_opaque_identifier_lookup_key ON user_opaque_identifier (service, sector_id, username);
+CREATE UNIQUE INDEX user_preferences_username_key ON user_preferences (username);
+CREATE UNIQUE INDEX webauthn_devices_kid_key ON webauthn_devices (kid);
+CREATE UNIQUE INDEX webauthn_devices_lookup_key ON webauthn_devices (username, description);
+
+ALTER TABLE webauthn_devices
+ MODIFY aaguid CHAR(36) NULL;
+
+UPDATE webauthn_devices
+SET aaguid = NULL
+WHERE aaguid = '' OR aaguid = '00000000-00000000-00000000-00000000';
+
+ALTER TABLE authentication_logs
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE duo_devices
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE encryption
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE identity_verification
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE migrations
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_blacklisted_jti
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_consent_session
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_access_token_session
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_authorization_code_session
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_openid_connect_session
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_pkce_request_session
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_refresh_token_session
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE totp_configurations
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE user_opaque_identifier
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE user_preferences
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE webauthn_devices
+ ENGINE=InnoDB,
+ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT,
+ ADD CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ ADD CONSTRAINT oauth2_consent_preconfiguration_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0007.ConsistencyFixes.postgres.down.sql b/internal/storage/migrations/V0007.ConsistencyFixes.postgres.down.sql
new file mode 100644
index 000000000..da89cb8c7
--- /dev/null
+++ b/internal/storage/migrations/V0007.ConsistencyFixes.postgres.down.sql
@@ -0,0 +1,111 @@
+UPDATE webauthn_devices
+SET aaguid = '00000000-00000000-00000000-00000000'
+WHERE aaguid IS NULL;
+
+ALTER TABLE webauthn_devices
+ ALTER COLUMN aaguid SET NOT NULL;
+
+ALTER TABLE totp_configurations
+ DROP CONSTRAINT IF EXISTS totp_configurations_username_key1,
+ DROP CONSTRAINT IF EXISTS totp_configurations_username_key;
+
+ALTER TABLE webauthn_devices
+ DROP CONSTRAINT IF EXISTS webauthn_devices_username_description_key1,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_kid_key1,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_lookup_key1,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_username_description_key,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_kid_key,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_lookup_key;
+
+DROP INDEX IF EXISTS totp_configurations_username_key1;
+DROP INDEX IF EXISTS webauthn_devices_username_description_key1;
+DROP INDEX IF EXISTS webauthn_devices_kid_key1;
+DROP INDEX IF EXISTS webauthn_devices_lookup_key1;
+DROP INDEX IF EXISTS totp_configurations_username_key;
+DROP INDEX IF EXISTS webauthn_devices_username_description_key;
+DROP INDEX IF EXISTS webauthn_devices_kid_key;
+DROP INDEX IF EXISTS webauthn_devices_lookup_key;
+
+CREATE UNIQUE INDEX totp_configurations_username_key1 ON totp_configurations (username);
+CREATE UNIQUE INDEX webauthn_devices_kid_key1 ON webauthn_devices (kid);
+CREATE UNIQUE INDEX webauthn_devices_lookup_key1 ON webauthn_devices (username, description);
+
+ALTER TABLE oauth2_consent_session
+ DROP CONSTRAINT oauth2_consent_session_subject_fkey,
+ DROP CONSTRAINT oauth2_consent_session_preconfiguration_fkey;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ DROP CONSTRAINT oauth2_consent_preconfiguration_subject_fkey;
+
+ALTER TABLE oauth2_access_token_session
+ DROP CONSTRAINT oauth2_access_token_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_access_token_session_subject_fkey;
+
+ALTER TABLE oauth2_authorization_code_session
+ DROP CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_authorization_code_session_subject_fkey;
+
+ALTER TABLE oauth2_openid_connect_session
+ DROP CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_openid_connect_session_subject_fkey;
+
+ALTER TABLE oauth2_pkce_request_session
+ DROP CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_pkce_request_session_subject_fkey;
+
+ALTER TABLE oauth2_refresh_token_session
+ DROP CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_refresh_token_session_subject_fkey;
+
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ ADD CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ ADD CONSTRAINT oauth2_consent_preconfiguration_subjct_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT;
diff --git a/internal/storage/migrations/V0007.ConsistencyFixes.postgres.up.sql b/internal/storage/migrations/V0007.ConsistencyFixes.postgres.up.sql
new file mode 100644
index 000000000..a0c50cc90
--- /dev/null
+++ b/internal/storage/migrations/V0007.ConsistencyFixes.postgres.up.sql
@@ -0,0 +1,208 @@
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
+DROP TABLE IF EXISTS totp_secrets;
+DROP TABLE IF EXISTS identity_verification_tokens;
+DROP TABLE IF EXISTS u2f_devices;
+DROP TABLE IF EXISTS config;
+DROP TABLE IF EXISTS AuthenticationLogs;
+DROP TABLE IF EXISTS IdentityVerificationTokens;
+DROP TABLE IF EXISTS Preferences;
+DROP TABLE IF EXISTS PreferencesTableName;
+DROP TABLE IF EXISTS SecondFactorPreferences;
+DROP TABLE IF EXISTS TOTPSecrets;
+DROP TABLE IF EXISTS U2FDeviceHandles;
+
+ALTER TABLE webauthn_devices
+ ALTER COLUMN aaguid DROP NOT NULL;
+
+UPDATE webauthn_devices
+SET aaguid = NULL
+WHERE aaguid = '' OR aaguid = '00000000-00000000-00000000-00000000';
+
+ALTER TABLE duo_devices
+ DROP CONSTRAINT IF EXISTS duo_devices_username_key;
+
+DROP INDEX IF EXISTS duo_devices_username_key;
+
+CREATE UNIQUE INDEX duo_devices_username_key ON duo_devices (username);
+
+ALTER TABLE encryption
+ DROP CONSTRAINT IF EXISTS encryption_name_key;
+
+DROP INDEX IF EXISTS encryption_name_key;
+
+CREATE UNIQUE INDEX encryption_name_key ON encryption (name);
+
+ALTER TABLE identity_verification
+ DROP CONSTRAINT IF EXISTS identity_verification_jti_key;
+
+DROP INDEX IF EXISTS identity_verification_jti_key;
+
+CREATE UNIQUE INDEX identity_verification_jti_key ON identity_verification (jti);
+
+ALTER TABLE user_preferences
+ DROP CONSTRAINT IF EXISTS user_preferences_username_key;
+
+DROP INDEX IF EXISTS user_preferences_username_key;
+
+CREATE UNIQUE INDEX user_preferences_username_key ON user_preferences (username);
+
+ALTER TABLE totp_configurations
+ DROP CONSTRAINT IF EXISTS totp_configurations_username_key1,
+ DROP CONSTRAINT IF EXISTS totp_configurations_username_key,
+ DROP CONSTRAINT IF EXISTS totp_configurations_pkey,
+ DROP CONSTRAINT IF EXISTS totp_configurations_pkey1;
+
+DROP INDEX IF EXISTS totp_configurations_username_key1;
+DROP INDEX IF EXISTS totp_configurations_username_key;
+
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_UP_V0007_totp_configurations;
+
+CREATE TABLE IF NOT EXISTS totp_configurations (
+ id SERIAL CONSTRAINT totp_configurations_pkey PRIMARY KEY,
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ last_used_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
+ username VARCHAR(100) NOT NULL,
+ issuer VARCHAR(100),
+ algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
+ digits INTEGER NOT NULL DEFAULT 6,
+ period INTEGER NOT NULL DEFAULT 30,
+ secret BYTEA NOT NULL
+);
+
+CREATE UNIQUE INDEX totp_configurations_username_key ON totp_configurations (username);
+
+INSERT INTO totp_configurations (created_at, last_used_at, username, issuer, algorithm, digits, period, secret)
+SELECT created_at, last_used_at, username, issuer, algorithm, digits, period, secret
+FROM _bkp_UP_V0007_totp_configurations
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_totp_configurations;
+
+ALTER TABLE webauthn_devices
+ DROP CONSTRAINT IF EXISTS webauthn_devices_username_description_key1,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_kid_key1,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_lookup_key1,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_username_description_key,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_kid_key,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_lookup_key,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_pkey,
+ DROP CONSTRAINT IF EXISTS webauthn_devices_pkey1;
+
+DROP INDEX IF EXISTS webauthn_devices_username_description_key1;
+DROP INDEX IF EXISTS webauthn_devices_kid_key1;
+DROP INDEX IF EXISTS webauthn_devices_lookup_key1;
+DROP INDEX IF EXISTS webauthn_devices_username_description_key;
+DROP INDEX IF EXISTS webauthn_devices_kid_key;
+DROP INDEX IF EXISTS webauthn_devices_lookup_key;
+
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_UP_V0007_webauthn_devices;
+
+CREATE TABLE IF NOT EXISTS webauthn_devices (
+ id SERIAL CONSTRAINT webauthn_devices_pkey PRIMARY KEY,
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ last_used_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NULL,
+ rpid TEXT,
+ username VARCHAR(100) NOT NULL,
+ description VARCHAR(30) NOT NULL DEFAULT 'Primary',
+ kid VARCHAR(512) NOT NULL,
+ public_key BYTEA NOT NULL,
+ attestation_type VARCHAR(32),
+ transport VARCHAR(20) DEFAULT '',
+ aaguid CHAR(36) NOT NULL,
+ sign_count INTEGER DEFAULT 0,
+ clone_warning BOOLEAN NOT NULL DEFAULT FALSE
+);
+
+CREATE UNIQUE INDEX webauthn_devices_kid_key ON webauthn_devices (kid);
+CREATE UNIQUE INDEX webauthn_devices_lookup_key ON webauthn_devices (username, description);
+
+INSERT INTO webauthn_devices (created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning)
+SELECT created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning
+FROM _bkp_UP_V0007_webauthn_devices;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_webauthn_devices;
+
+ALTER TABLE oauth2_consent_session
+ DROP CONSTRAINT oauth2_consent_session_subject_fkey,
+ DROP CONSTRAINT oauth2_consent_session_preconfiguration_fkey;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ DROP CONSTRAINT IF EXISTS oauth2_consent_preconfiguration_subjct_fkey,
+ DROP CONSTRAINT IF EXISTS oauth2_consent_preconfiguration_subject_fkey;
+
+ALTER TABLE oauth2_access_token_session
+ DROP CONSTRAINT oauth2_access_token_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_access_token_session_subject_fkey;
+
+ALTER TABLE oauth2_authorization_code_session
+ DROP CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_authorization_code_session_subject_fkey;
+
+ALTER TABLE oauth2_openid_connect_session
+ DROP CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_openid_connect_session_subject_fkey;
+
+ALTER TABLE oauth2_pkce_request_session
+ DROP CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_pkce_request_session_subject_fkey;
+
+ALTER TABLE oauth2_refresh_token_session
+ DROP CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey,
+ DROP CONSTRAINT oauth2_refresh_token_session_subject_fkey;
+
+ALTER TABLE oauth2_consent_session
+ ADD CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT,
+ ADD CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE;
+
+ALTER TABLE oauth2_consent_preconfiguration
+ ADD CONSTRAINT oauth2_consent_preconfiguration_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_access_token_session
+ ADD CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_authorization_code_session
+ ADD CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_openid_connect_session
+ ADD CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_pkce_request_session
+ ADD CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ALTER TABLE oauth2_refresh_token_session
+ ADD CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ ADD CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT;
+
diff --git a/internal/storage/migrations/V0007.ConsistencyFixes.sqlite.down.sql b/internal/storage/migrations/V0007.ConsistencyFixes.sqlite.down.sql
new file mode 100644
index 000000000..b5a31858d
--- /dev/null
+++ b/internal/storage/migrations/V0007.ConsistencyFixes.sqlite.down.sql
@@ -0,0 +1,617 @@
+PRAGMA foreign_keys=off;
+
+BEGIN TRANSACTION;
+
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_DOWN_V0007_webauthn_devices;
+
+CREATE TABLE IF NOT EXISTS webauthn_devices (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ last_used_at TIMESTAMP NULL DEFAULT NULL,
+ rpid TEXT,
+ username VARCHAR(100) NOT NULL,
+ description VARCHAR(30) NOT NULL DEFAULT 'Primary',
+ kid VARCHAR(512) NOT NULL,
+ public_key BLOB NOT NULL,
+ attestation_type VARCHAR(32),
+ transport VARCHAR(20) DEFAULT '',
+ aaguid CHAR(36) NOT NULL,
+ sign_count INTEGER DEFAULT 0,
+ clone_warning BOOLEAN NOT NULL DEFAULT FALSE,
+ UNIQUE (username, description),
+ UNIQUE (kid)
+);
+
+INSERT INTO webauthn_devices (created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning)
+SELECT created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning
+FROM _bkp_DOWN_V0007_webauthn_devices;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_webauthn_devices;
+
+ALTER TABLE identity_verification
+ RENAME TO _bkp_DOWN_V0007_identity_verification;
+
+CREATE TABLE IF NOT EXISTS identity_verification (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ jti VARCHAR(36),
+ iat TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ issued_ip VARCHAR(39) NOT NULL,
+ exp TIMESTAMP NOT NULL,
+ username VARCHAR(100) NOT NULL,
+ action VARCHAR(50) NOT NULL,
+ consumed TIMESTAMP NULL DEFAULT NULL,
+ consumed_ip VARCHAR(39) NULL DEFAULT NULL,
+ UNIQUE (jti)
+);
+
+INSERT INTO identity_verification (jti, iat, issued_ip, exp, username, action, consumed, consumed_ip)
+SELECT jti, iat, issued_ip, exp, username, action, consumed, consumed_ip
+FROM _bkp_DOWN_V0007_identity_verification
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_identity_verification;
+
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_DOWN_V0007_totp_configurations;
+
+CREATE TABLE IF NOT EXISTS totp_configurations (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ last_used_at TIMESTAMP NULL DEFAULT NULL,
+ username VARCHAR(100) NOT NULL,
+ issuer VARCHAR(100),
+ algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
+ digits INTEGER NOT NULL DEFAULT 6,
+ period INTEGER NOT NULL DEFAULT 30,
+ secret BLOB NOT NULL,
+ UNIQUE (username)
+);
+
+INSERT INTO totp_configurations (username, issuer, algorithm, digits, period, secret)
+SELECT username, issuer, algorithm, digits, period, secret
+FROM _bkp_DOWN_V0007_totp_configurations
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_totp_configurations;
+
+ALTER TABLE duo_devices
+ RENAME TO _bkp_DOWN_V0007_duo_devices;
+
+CREATE TABLE IF NOT EXISTS duo_devices (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ username VARCHAR(100) NOT NULL,
+ device VARCHAR(32) NOT NULL,
+ method VARCHAR(16) NOT NULL,
+ UNIQUE (username)
+);
+
+INSERT INTO duo_devices (username, device, method)
+SELECT username, device, method
+FROM _bkp_DOWN_V0007_duo_devices
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_duo_devices;
+
+ALTER TABLE user_preferences
+ RENAME TO _bkp_DOWN_V0007_user_preferences;
+
+CREATE TABLE IF NOT EXISTS user_preferences (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ username VARCHAR(100) NOT NULL,
+ second_factor_method VARCHAR(11) NOT NULL,
+ UNIQUE (username)
+);
+
+INSERT INTO user_preferences (username, second_factor_method)
+SELECT username, second_factor_method
+FROM _bkp_DOWN_V0007_user_preferences
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_user_preferences;
+
+ALTER TABLE encryption
+ RENAME TO _bkp_DOWN_V0007_encryption;
+
+CREATE TABLE IF NOT EXISTS encryption (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ name VARCHAR(100),
+ value BLOB NOT NULL,
+ UNIQUE (name)
+);
+
+INSERT INTO encryption (name, value)
+SELECT name, value
+FROM _bkp_DOWN_V0007_encryption
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_encryption;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_consent_preconfiguration (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ expires_at TIMESTAMP NULL DEFAULT NULL,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ scopes TEXT NOT NULL,
+ audience TEXT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, revoked, scopes, audience)
+SELECT client_id, subject, created_at, expires_at, revoked, scopes, audience
+FROM oauth2_consent_preconfiguration
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_consent_preconfiguration;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ authorized BOOLEAN NOT NULL DEFAULT FALSE,
+ granted BOOLEAN NOT NULL DEFAULT FALSE,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ responded_at TIMESTAMP NULL DEFAULT NULL,
+ form_data TEXT NOT NULL,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ preconfiguration INTEGER NULL DEFAULT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_consent_session (challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration)
+SELECT challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration
+FROM oauth2_consent_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_consent_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_authorization_code_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_authorization_code_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_access_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_access_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_access_token_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_refresh_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_refresh_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_pkce_request_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_pkce_request_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_DOWN_V0007_oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_DOWN_V0007_oauth2_openid_connect_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_openid_connect_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+
+DROP INDEX IF EXISTS user_opaque_identifier_identifier_key;
+DROP INDEX IF EXISTS user_opaque_identifier_lookup_key;
+
+ALTER TABLE user_opaque_identifier
+ RENAME TO _bkp_DOWN_V0007_user_opaque_identifier;
+
+CREATE TABLE IF NOT EXISTS user_opaque_identifier (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ service VARCHAR(20) NOT NULL,
+ sector_id VARCHAR(255) NOT NULL,
+ username VARCHAR(100) NOT NULL,
+ identifier CHAR(36) NOT NULL
+);
+
+CREATE UNIQUE INDEX user_opaque_identifier_service_sector_id_username_key ON user_opaque_identifier (service, sector_id, username);
+CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
+
+INSERT INTO user_opaque_identifier (service, sector_id, username, identifier)
+SELECT service, sector_id, username, identifier
+FROM _bkp_DOWN_V0007_user_opaque_identifier
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_user_opaque_identifier;
+
+DROP INDEX IF EXISTS authentication_logs_username_idx;
+DROP INDEX IF EXISTS authentication_logs_remote_ip_idx;
+
+ALTER TABLE authentication_logs
+ RENAME TO _bkp_DOWN_V0007_authentication_logs;
+
+CREATE TABLE IF NOT EXISTS authentication_logs (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ successful BOOLEAN NOT NULL,
+ banned BOOLEAN NOT NULL DEFAULT FALSE,
+ username VARCHAR(100) NOT NULL,
+ auth_type VARCHAR(8) NOT NULL DEFAULT '1FA',
+ remote_ip VARCHAR(39) NULL DEFAULT NULL,
+ request_uri TEXT,
+ request_method VARCHAR(8) NOT NULL DEFAULT ''
+);
+
+CREATE INDEX authentication_logs_username_idx ON authentication_logs (time, username, auth_type);
+CREATE INDEX authentication_logs_remote_ip_idx ON authentication_logs (time, remote_ip, auth_type);
+
+INSERT INTO authentication_logs (time, successful, banned, username, auth_type, remote_ip, request_uri, request_method)
+SELECT time, successful, banned, username, auth_type, remote_ip, request_uri, request_method
+FROM _bkp_DOWN_V0007_authentication_logs
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_authentication_logs;
+
+ALTER TABLE migrations
+ RENAME TO _bkp_DOWN_V0007_migrations;
+
+CREATE TABLE IF NOT EXISTS migrations (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ applied TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ version_before INTEGER NULL DEFAULT NULL,
+ version_after INTEGER NOT NULL,
+ application_version VARCHAR(128) NOT NULL
+);
+
+INSERT INTO migrations (applied, version_before, version_after, application_version)
+SELECT applied, version_before, version_after, application_version
+FROM _bkp_DOWN_V0007_migrations
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_migrations;
+
+DROP INDEX IF EXISTS oauth2_blacklisted_jti_signature_key;
+
+ALTER TABLE oauth2_blacklisted_jti
+ RENAME TO _bkp_DOWN_V0007_oauth2_blacklisted_jti;
+
+CREATE TABLE IF NOT EXISTS oauth2_blacklisted_jti (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ signature VARCHAR(64) NOT NULL,
+ expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+);
+
+CREATE UNIQUE INDEX oauth2_blacklisted_jti_signature_key ON oauth2_blacklisted_jti (signature);
+
+INSERT INTO oauth2_blacklisted_jti (signature, expires_at)
+SELECT signature, expires_at
+FROM _bkp_DOWN_V0007_oauth2_blacklisted_jti
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_blacklisted_jti;
+
+CREATE TABLE IF NOT EXISTS oauth2_consent_preconfiguration (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ expires_at TIMESTAMP NULL DEFAULT NULL,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ scopes TEXT NOT NULL,
+ audience TEXT NULL,
+ CONSTRAINT oauth2_consent_preconfiguration_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+INSERT INTO oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, revoked, scopes, audience)
+SELECT client_id, subject, created_at, expires_at, revoked, scopes, audience
+FROM _bkp_DOWN_V0007_oauth2_consent_preconfiguration
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_consent_preconfiguration;
+
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ authorized BOOLEAN NOT NULL DEFAULT FALSE,
+ granted BOOLEAN NOT NULL DEFAULT FALSE,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ responded_at TIMESTAMP NULL DEFAULT NULL,
+ form_data TEXT NOT NULL,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ preconfiguration INTEGER NULL DEFAULT NULL,
+ CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE
+);
+
+CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+
+INSERT INTO oauth2_consent_session (challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration)
+SELECT challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration
+FROM _bkp_DOWN_V0007_oauth2_consent_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_consent_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+
+INSERT INTO oauth2_authorization_code_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0007_oauth2_authorization_code_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_authorization_code_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
+CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
+CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+
+INSERT INTO oauth2_access_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0007_oauth2_access_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_access_token_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
+INSERT INTO oauth2_refresh_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0007_oauth2_refresh_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_refresh_token_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+
+INSERT INTO oauth2_pkce_request_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0007_oauth2_pkce_request_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_pkce_request_session;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE RESTRICT ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+INSERT INTO oauth2_openid_connect_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_DOWN_V0007_oauth2_openid_connect_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_DOWN_V0007_oauth2_openid_connect_session;
+
+COMMIT;
+
+PRAGMA foreign_keys=on;
diff --git a/internal/storage/migrations/V0007.ConsistencyFixes.sqlite.up.sql b/internal/storage/migrations/V0007.ConsistencyFixes.sqlite.up.sql
new file mode 100644
index 000000000..80847f593
--- /dev/null
+++ b/internal/storage/migrations/V0007.ConsistencyFixes.sqlite.up.sql
@@ -0,0 +1,667 @@
+PRAGMA foreign_keys=off;
+
+BEGIN TRANSACTION;
+
+DROP TABLE IF EXISTS _bkp_UP_V0002_totp_configurations;
+DROP TABLE IF EXISTS _bkp_UP_V0002_u2f_devices;
+DROP TABLE IF EXISTS totp_secrets;
+DROP TABLE IF EXISTS identity_verification_tokens;
+DROP TABLE IF EXISTS u2f_devices;
+DROP TABLE IF EXISTS config;
+DROP TABLE IF EXISTS AuthenticationLogs;
+DROP TABLE IF EXISTS IdentityVerificationTokens;
+DROP TABLE IF EXISTS Preferences;
+DROP TABLE IF EXISTS PreferencesTableName;
+DROP TABLE IF EXISTS SecondFactorPreferences;
+DROP TABLE IF EXISTS TOTPSecrets;
+DROP TABLE IF EXISTS U2FDeviceHandles;
+
+DROP INDEX IF EXISTS webauthn_devices_lookup_key;
+DROP INDEX IF EXISTS webauthn_devices_kid_key;
+
+ALTER TABLE webauthn_devices
+ RENAME TO _bkp_UP_V0007_webauthn_devices;
+
+CREATE TABLE IF NOT EXISTS webauthn_devices (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ last_used_at DATETIME NULL DEFAULT NULL,
+ rpid TEXT,
+ username VARCHAR(100) NOT NULL,
+ description VARCHAR(30) NOT NULL DEFAULT 'Primary',
+ kid VARCHAR(512) NOT NULL,
+ public_key BLOB NOT NULL,
+ attestation_type VARCHAR(32),
+ transport VARCHAR(20) DEFAULT '',
+ aaguid CHAR(36) NULL,
+ sign_count INTEGER DEFAULT 0,
+ clone_warning BOOLEAN NOT NULL DEFAULT FALSE
+);
+
+CREATE UNIQUE INDEX webauthn_devices_lookup_key ON webauthn_devices (username, description);
+CREATE UNIQUE INDEX webauthn_devices_kid_key ON webauthn_devices (kid);
+
+INSERT INTO webauthn_devices (created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning)
+SELECT created_at, last_used_at, rpid, username, description, kid, public_key, attestation_type, transport, aaguid, sign_count, clone_warning
+FROM _bkp_UP_V0007_webauthn_devices;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_webauthn_devices;
+
+DROP INDEX IF EXISTS identity_verification_jti_key;
+
+ALTER TABLE identity_verification
+ RENAME TO _bkp_UP_V0007_identity_verification;
+
+CREATE TABLE IF NOT EXISTS identity_verification (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ jti VARCHAR(36),
+ iat DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ issued_ip VARCHAR(39) NOT NULL,
+ exp DATETIME NOT NULL,
+ username VARCHAR(100) NOT NULL,
+ action VARCHAR(50) NOT NULL,
+ consumed DATETIME NULL DEFAULT NULL,
+ consumed_ip VARCHAR(39) NULL DEFAULT NULL
+);
+
+CREATE UNIQUE INDEX identity_verification_jti_key ON identity_verification (jti);
+
+INSERT INTO identity_verification (jti, iat, issued_ip, exp, username, action, consumed, consumed_ip)
+SELECT jti, iat, issued_ip, exp, username, action, consumed, consumed_ip
+FROM _bkp_UP_V0007_identity_verification
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_identity_verification;
+
+DROP INDEX IF EXISTS totp_configurations_username_key;
+
+ALTER TABLE totp_configurations
+ RENAME TO _bkp_UP_V0007_totp_configurations;
+
+CREATE TABLE IF NOT EXISTS totp_configurations (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ last_used_at DATETIME NULL DEFAULT NULL,
+ username VARCHAR(100) NOT NULL,
+ issuer VARCHAR(100),
+ algorithm VARCHAR(6) NOT NULL DEFAULT 'SHA1',
+ digits INTEGER NOT NULL DEFAULT 6,
+ period INTEGER NOT NULL DEFAULT 30,
+ secret BLOB NOT NULL
+);
+
+CREATE UNIQUE INDEX totp_configurations_username_key ON totp_configurations (username);
+
+INSERT INTO totp_configurations (username, issuer, algorithm, digits, period, secret)
+SELECT username, issuer, algorithm, digits, period, secret
+FROM _bkp_UP_V0007_totp_configurations
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_totp_configurations;
+
+DROP INDEX IF EXISTS duo_devices_username_key;
+
+ALTER TABLE duo_devices
+ RENAME TO _bkp_UP_V0007_duo_devices;
+
+CREATE TABLE IF NOT EXISTS duo_devices (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ username VARCHAR(100) NOT NULL,
+ device VARCHAR(32) NOT NULL,
+ method VARCHAR(16) NOT NULL
+);
+
+CREATE UNIQUE INDEX duo_devices_username_key ON duo_devices (username);
+
+INSERT INTO duo_devices (username, device, method)
+SELECT username, device, method
+FROM _bkp_UP_V0007_duo_devices;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_duo_devices;
+
+ALTER TABLE user_preferences
+ RENAME TO _bkp_UP_V0007_user_preferences;
+
+CREATE TABLE IF NOT EXISTS user_preferences (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ username VARCHAR(100) NOT NULL,
+ second_factor_method VARCHAR(11) NOT NULL
+);
+
+CREATE UNIQUE INDEX user_preferences_username_key ON user_preferences (username);
+
+INSERT INTO user_preferences (username, second_factor_method)
+SELECT username, second_factor_method
+FROM _bkp_UP_V0007_user_preferences
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_user_preferences;
+
+ALTER TABLE encryption
+ RENAME TO _bkp_UP_V0007_encryption;
+
+CREATE TABLE IF NOT EXISTS encryption (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ name VARCHAR(100),
+ value BLOB NOT NULL
+);
+
+CREATE UNIQUE INDEX encryption_name_key ON encryption (name);
+
+INSERT INTO encryption (name, value)
+SELECT name, value
+FROM _bkp_UP_V0007_encryption
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_encryption;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_consent_preconfiguration (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ expires_at DATETIME NULL DEFAULT NULL,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ scopes TEXT NOT NULL,
+ audience TEXT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, revoked, scopes, audience)
+SELECT client_id, subject, created_at, expires_at, revoked, scopes, audience
+FROM oauth2_consent_preconfiguration
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_consent_preconfiguration;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ authorized BOOLEAN NOT NULL DEFAULT FALSE,
+ granted BOOLEAN NOT NULL DEFAULT FALSE,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ responded_at DATETIME NULL DEFAULT NULL,
+ form_data TEXT NOT NULL,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ preconfiguration INTEGER NULL DEFAULT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_consent_session (challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration)
+SELECT challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration
+FROM oauth2_consent_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_consent_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_authorization_code_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_authorization_code_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_authorization_code_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_access_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_access_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_access_token_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_refresh_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_refresh_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_refresh_token_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_pkce_request_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_pkce_request_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_pkce_request_session;
+
+CREATE TABLE IF NOT EXISTS _bkp_UP_V0007_oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL
+);
+
+INSERT INTO _bkp_UP_V0007_oauth2_openid_connect_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM oauth2_openid_connect_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS oauth2_openid_connect_session;
+
+DROP INDEX IF EXISTS user_opaque_identifier_identifier_key;
+DROP INDEX IF EXISTS user_opaque_identifier_service_sector_id_username_key;
+
+ALTER TABLE user_opaque_identifier
+ RENAME TO _bkp_UP_V0007_user_opaque_identifier;
+
+CREATE TABLE IF NOT EXISTS user_opaque_identifier (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ service VARCHAR(20) NOT NULL,
+ sector_id VARCHAR(255) NOT NULL,
+ username VARCHAR(100) NOT NULL,
+ identifier CHAR(36) NOT NULL
+);
+
+CREATE UNIQUE INDEX user_opaque_identifier_lookup_key ON user_opaque_identifier (service, sector_id, username);
+CREATE UNIQUE INDEX user_opaque_identifier_identifier_key ON user_opaque_identifier (identifier);
+
+INSERT INTO user_opaque_identifier (service, sector_id, username, identifier)
+SELECT service, sector_id, username, identifier
+FROM _bkp_UP_V0007_user_opaque_identifier
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_user_opaque_identifier;
+
+DROP INDEX IF EXISTS authentication_logs_username_idx;
+DROP INDEX IF EXISTS authentication_logs_remote_ip_idx;
+
+ALTER TABLE authentication_logs
+ RENAME TO _bkp_UP_V0007_authentication_logs;
+
+CREATE TABLE IF NOT EXISTS authentication_logs (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ successful BOOLEAN NOT NULL,
+ banned BOOLEAN NOT NULL DEFAULT FALSE,
+ username VARCHAR(100) NOT NULL,
+ auth_type VARCHAR(8) NOT NULL DEFAULT '1FA',
+ remote_ip VARCHAR(39) NULL DEFAULT NULL,
+ request_uri TEXT,
+ request_method VARCHAR(8) NOT NULL DEFAULT ''
+);
+
+CREATE INDEX authentication_logs_username_idx ON authentication_logs (time, username, auth_type);
+CREATE INDEX authentication_logs_remote_ip_idx ON authentication_logs (time, remote_ip, auth_type);
+
+INSERT INTO authentication_logs (time, successful, banned, username, auth_type, remote_ip, request_uri, request_method)
+SELECT time, successful, banned, username, auth_type, remote_ip, request_uri, request_method
+FROM _bkp_UP_V0007_authentication_logs
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_authentication_logs;
+
+ALTER TABLE migrations
+ RENAME TO _bkp_UP_V0007_migrations;
+
+CREATE TABLE IF NOT EXISTS migrations (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ applied DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ version_before INTEGER NULL DEFAULT NULL,
+ version_after INTEGER NOT NULL,
+ application_version VARCHAR(128) NOT NULL
+);
+
+INSERT INTO migrations (applied, version_before, version_after, application_version)
+SELECT applied, version_before, version_after, application_version
+FROM _bkp_UP_V0007_migrations
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_migrations;
+
+DROP INDEX IF EXISTS oauth2_blacklisted_jti_signature_key;
+
+ALTER TABLE oauth2_blacklisted_jti
+ RENAME TO _bkp_UP_V0007_oauth2_blacklisted_jti;
+
+CREATE TABLE IF NOT EXISTS oauth2_blacklisted_jti (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ signature VARCHAR(64) NOT NULL,
+ expires_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
+);
+
+CREATE UNIQUE INDEX oauth2_blacklisted_jti_signature_key ON oauth2_blacklisted_jti (signature);
+
+INSERT INTO oauth2_blacklisted_jti (signature, expires_at)
+SELECT signature, expires_at
+FROM _bkp_UP_V0007_oauth2_blacklisted_jti
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_blacklisted_jti;
+
+CREATE TABLE IF NOT EXISTS oauth2_consent_preconfiguration (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ expires_at DATETIME NULL DEFAULT NULL,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ scopes TEXT NOT NULL,
+ audience TEXT NULL,
+ CONSTRAINT "oauth2_consent_preconfiguration_subject_fkey"
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT
+);
+
+INSERT INTO oauth2_consent_preconfiguration (client_id, subject, created_at, expires_at, revoked, scopes, audience)
+SELECT client_id, subject, created_at, expires_at, revoked, scopes, audience
+FROM _bkp_UP_V0007_oauth2_consent_preconfiguration
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_consent_preconfiguration;
+
+DROP INDEX IF EXISTS oauth2_consent_session_challenge_id_key;
+
+CREATE TABLE IF NOT EXISTS oauth2_consent_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ authorized BOOLEAN NOT NULL DEFAULT FALSE,
+ granted BOOLEAN NOT NULL DEFAULT FALSE,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ responded_at DATETIME NULL DEFAULT NULL,
+ form_data TEXT NOT NULL,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ preconfiguration INTEGER NULL DEFAULT NULL,
+ CONSTRAINT oauth2_consent_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT,
+ CONSTRAINT oauth2_consent_session_preconfiguration_fkey
+ FOREIGN KEY (preconfiguration)
+ REFERENCES oauth2_consent_preconfiguration (id) ON UPDATE CASCADE ON DELETE CASCADE
+);
+
+CREATE UNIQUE INDEX oauth2_consent_session_challenge_id_key ON oauth2_consent_session (challenge_id);
+
+INSERT INTO oauth2_consent_session (challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration)
+SELECT challenge_id, client_id, subject, authorized, granted, requested_at, responded_at, form_data, requested_scopes, granted_scopes, requested_audience, granted_audience, preconfiguration
+FROM _bkp_UP_V0007_oauth2_consent_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_consent_session;
+
+DROP INDEX IF EXISTS oauth2_authorization_code_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_authorization_code_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_authorization_code_session_client_id_subject_idx;
+
+CREATE TABLE IF NOT EXISTS oauth2_authorization_code_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_authorization_code_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_authorization_code_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_authorization_code_session_request_id_idx ON oauth2_authorization_code_session (request_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_idx ON oauth2_authorization_code_session (client_id);
+CREATE INDEX oauth2_authorization_code_session_client_id_subject_idx ON oauth2_authorization_code_session (client_id, subject);
+
+INSERT INTO oauth2_authorization_code_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_UP_V0007_oauth2_authorization_code_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_authorization_code_session;
+
+DROP INDEX IF EXISTS oauth2_access_token_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_access_token_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_access_token_session_client_id_subject_idx;
+
+CREATE TABLE IF NOT EXISTS oauth2_access_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_access_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_access_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_access_token_session_request_id_idx ON oauth2_access_token_session (request_id);
+CREATE INDEX oauth2_access_token_session_client_id_idx ON oauth2_access_token_session (client_id);
+CREATE INDEX oauth2_access_token_session_client_id_subject_idx ON oauth2_access_token_session (client_id, subject);
+
+INSERT INTO oauth2_access_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_UP_V0007_oauth2_access_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_access_token_session;
+
+DROP INDEX IF EXISTS oauth2_refresh_token_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_refresh_token_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_refresh_token_session_client_id_subject_idx;
+
+CREATE TABLE IF NOT EXISTS oauth2_refresh_token_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_refresh_token_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_refresh_token_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_refresh_token_session_request_id_idx ON oauth2_refresh_token_session (request_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_idx ON oauth2_refresh_token_session (client_id);
+CREATE INDEX oauth2_refresh_token_session_client_id_subject_idx ON oauth2_refresh_token_session (client_id, subject);
+
+INSERT INTO oauth2_refresh_token_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_UP_V0007_oauth2_refresh_token_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_refresh_token_session;
+
+DROP INDEX IF EXISTS oauth2_pkce_request_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_pkce_request_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_pkce_request_session_client_id_subject_idx;
+
+CREATE TABLE IF NOT EXISTS oauth2_pkce_request_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_pkce_request_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_pkce_request_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_pkce_request_session_request_id_idx ON oauth2_pkce_request_session (request_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_idx ON oauth2_pkce_request_session (client_id);
+CREATE INDEX oauth2_pkce_request_session_client_id_subject_idx ON oauth2_pkce_request_session (client_id, subject);
+
+INSERT INTO oauth2_pkce_request_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_UP_V0007_oauth2_pkce_request_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_pkce_request_session;
+
+DROP INDEX IF EXISTS oauth2_openid_connect_session_request_id_idx;
+DROP INDEX IF EXISTS oauth2_openid_connect_session_client_id_idx;
+DROP INDEX IF EXISTS oauth2_openid_connect_session_client_id_subject_idx;
+
+CREATE TABLE IF NOT EXISTS oauth2_openid_connect_session (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ challenge_id CHAR(36) NOT NULL,
+ request_id VARCHAR(40) NOT NULL,
+ client_id VARCHAR(255) NOT NULL,
+ signature VARCHAR(255) NOT NULL,
+ subject CHAR(36) NOT NULL,
+ requested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ requested_scopes TEXT NOT NULL,
+ granted_scopes TEXT NOT NULL,
+ requested_audience TEXT NULL DEFAULT '',
+ granted_audience TEXT NULL DEFAULT '',
+ active BOOLEAN NOT NULL DEFAULT FALSE,
+ revoked BOOLEAN NOT NULL DEFAULT FALSE,
+ form_data TEXT NOT NULL,
+ session_data BLOB NOT NULL,
+ CONSTRAINT oauth2_openid_connect_session_challenge_id_fkey
+ FOREIGN KEY (challenge_id)
+ REFERENCES oauth2_consent_session (challenge_id) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT oauth2_openid_connect_session_subject_fkey
+ FOREIGN KEY (subject)
+ REFERENCES user_opaque_identifier (identifier) ON UPDATE CASCADE ON DELETE RESTRICT
+);
+
+CREATE INDEX oauth2_openid_connect_session_request_id_idx ON oauth2_openid_connect_session (request_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_idx ON oauth2_openid_connect_session (client_id);
+CREATE INDEX oauth2_openid_connect_session_client_id_subject_idx ON oauth2_openid_connect_session (client_id, subject);
+
+INSERT INTO oauth2_openid_connect_session (challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data)
+SELECT challenge_id, request_id, client_id, signature, subject, requested_at, requested_scopes, granted_scopes, requested_audience, granted_audience, active, revoked, form_data, session_data
+FROM _bkp_UP_V0007_oauth2_openid_connect_session
+ORDER BY id;
+
+DROP TABLE IF EXISTS _bkp_UP_V0007_oauth2_openid_connect_session;
+
+COMMIT;
+
+PRAGMA foreign_keys=on;
diff --git a/internal/storage/migrations_test.go b/internal/storage/migrations_test.go
index f7c9df73e..b60a13628 100644
--- a/internal/storage/migrations_test.go
+++ b/internal/storage/migrations_test.go
@@ -9,7 +9,7 @@ import (
const (
// This is the latest schema version for the purpose of tests.
- LatestVersion = 6
+ LatestVersion = 7
)
func TestShouldObtainCorrectUpMigrations(t *testing.T) {