aboutsummaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorMike Crute <mike@crute.us>2022-11-23 14:20:32 -0800
committerMike Crute <mike@crute.us>2022-11-23 14:20:32 -0800
commitff2ad17daaf770644ced5d44d949f063210063d9 (patch)
treed393554867bd0bb8e26442bf12e5f9a775b1c536 /db
parent6a24803254758541cd73bbdac3341413b5058345 (diff)
downloadgolib-ff2ad17daaf770644ced5d44d949f063210063d9.tar.bz2
golib-ff2ad17daaf770644ced5d44d949f063210063d9.tar.xz
golib-ff2ad17daaf770644ced5d44d949f063210063d9.zip
db/mongodb: migrate to secrets API for v2db/mongodb/v2.0.0
Diffstat (limited to 'db')
-rw-r--r--db/mongodb/client.go13
-rw-r--r--db/mongodb/go.mod17
-rw-r--r--db/mongodb/go.sum32
3 files changed, 32 insertions, 30 deletions
diff --git a/db/mongodb/client.go b/db/mongodb/client.go
index 1f3815d..f06f5ec 100644
--- a/db/mongodb/client.go
+++ b/db/mongodb/client.go
@@ -7,12 +7,11 @@ import (
7 "net/url" 7 "net/url"
8 "strings" 8 "strings"
9 9
10 "code.crute.us/mcrute/golib/secrets"
10 "go.mongodb.org/mongo-driver/bson" 11 "go.mongodb.org/mongo-driver/bson"
11 "go.mongodb.org/mongo-driver/mongo" 12 "go.mongodb.org/mongo-driver/mongo"
12 "go.mongodb.org/mongo-driver/mongo/options" 13 "go.mongodb.org/mongo-driver/mongo/options"
13 "go.mongodb.org/mongo-driver/x/mongo/driver/connstring" 14 "go.mongodb.org/mongo-driver/x/mongo/driver/connstring"
14
15 "code.crute.us/mcrute/golib/vault"
16) 15)
17 16
18// AnyInTopLevelArray is just a convenience method so apps don't have to repeat 17// AnyInTopLevelArray is just a convenience method so apps don't have to repeat
@@ -26,12 +25,12 @@ type Mongo struct {
26 db *mongo.Database 25 db *mongo.Database
27} 26}
28 27
29func Connect(ctx context.Context, uri string, vc vault.VaultClient) (*Mongo, error) { 28func Connect(ctx context.Context, uri string, sc secrets.Client) (*Mongo, error) {
30 db := &Mongo{} 29 db := &Mongo{}
31 30
32 // Prefix uri with mongodb:// unless it already includes one of the 31 // Prefix uri with mongodb:// unless it already includes one of the
33 // standard prefixes (only these two are valid). Otherwise if scheme is 32 // standard prefixes (only these two are valid). Otherwise if scheme is
34 // omitted then url parsing will fail to capture the username for Vault 33 // omitted then url parsing will fail to capture the username for secret
35 // lookup. 34 // lookup.
36 if !strings.HasPrefix(uri, "mongodb://") && !strings.HasPrefix(uri, "mongodb+srv://") { 35 if !strings.HasPrefix(uri, "mongodb://") && !strings.HasPrefix(uri, "mongodb+srv://") {
37 uri = "mongodb://" + uri 36 uri = "mongodb://" + uri
@@ -43,11 +42,11 @@ func Connect(ctx context.Context, uri string, vc vault.VaultClient) (*Mongo, err
43 } 42 }
44 43
45 // The username provided by the user (there should be no 44 // The username provided by the user (there should be no
46 // password) will be a reference to a vault material with the 45 // password) will be a reference to a secret material with the
47 // prefix database/creds/. This needs to be replaced with the real 46 // prefix database/creds/. This needs to be replaced with the real
48 // username/password pair fetched from Vault before attempting to 47 // username/password pair fetched from secret before attempting to
49 // connect. 48 // connect.
50 cred, err := vc.DbCredential(ctx, u.User.Username()) 49 cred, _, err := sc.DatabaseCredential(ctx, u.User.Username())
51 if err != nil { 50 if err != nil {
52 return nil, err 51 return nil, err
53 } 52 }
diff --git a/db/mongodb/go.mod b/db/mongodb/go.mod
index 06df033..6d5ba3b 100644
--- a/db/mongodb/go.mod
+++ b/db/mongodb/go.mod
@@ -1,13 +1,14 @@
1module code.crute.us/mcrute/golib/db/mongodb 1module code.crute.us/mcrute/golib/db/mongodb/v2
2 2
3go 1.17 3go 1.17
4 4
5require ( 5require (
6 code.crute.us/mcrute/golib/vault v0.2.0 6 code.crute.us/mcrute/golib/secrets v0.1.0
7 go.mongodb.org/mongo-driver v1.7.4 7 go.mongodb.org/mongo-driver v1.7.4
8) 8)
9 9
10require ( 10require (
11 code.crute.us/mcrute/golib v0.4.0 // indirect
11 github.com/armon/go-metrics v0.3.9 // indirect 12 github.com/armon/go-metrics v0.3.9 // indirect
12 github.com/armon/go-radix v1.0.0 // indirect 13 github.com/armon/go-radix v1.0.0 // indirect
13 github.com/cenkalti/backoff/v3 v3.0.0 // indirect 14 github.com/cenkalti/backoff/v3 v3.0.0 // indirect
@@ -24,16 +25,16 @@ require (
24 github.com/hashicorp/go-retryablehttp v0.6.6 // indirect 25 github.com/hashicorp/go-retryablehttp v0.6.6 // indirect
25 github.com/hashicorp/go-rootcerts v1.0.2 // indirect 26 github.com/hashicorp/go-rootcerts v1.0.2 // indirect
26 github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 // indirect 27 github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 // indirect
27 github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 // indirect 28 github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect
28 github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 // indirect 29 github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
29 github.com/hashicorp/go-sockaddr v1.0.2 // indirect 30 github.com/hashicorp/go-sockaddr v1.0.2 // indirect
30 github.com/hashicorp/go-uuid v1.0.2 // indirect 31 github.com/hashicorp/go-uuid v1.0.2 // indirect
31 github.com/hashicorp/go-version v1.2.0 // indirect 32 github.com/hashicorp/go-version v1.2.0 // indirect
32 github.com/hashicorp/golang-lru v0.5.4 // indirect 33 github.com/hashicorp/golang-lru v0.5.4 // indirect
33 github.com/hashicorp/hcl v1.0.0 // indirect 34 github.com/hashicorp/hcl v1.0.0 // indirect
34 github.com/hashicorp/vault/api v1.5.0 // indirect 35 github.com/hashicorp/vault/api v1.8.0 // indirect
35 github.com/hashicorp/vault/api/auth/approle v0.1.1 // indirect 36 github.com/hashicorp/vault/api/auth/approle v0.3.0 // indirect
36 github.com/hashicorp/vault/sdk v0.4.1 // indirect 37 github.com/hashicorp/vault/sdk v0.6.0 // indirect
37 github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb // indirect 38 github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb // indirect
38 github.com/klauspost/compress v1.13.6 // indirect 39 github.com/klauspost/compress v1.13.6 // indirect
39 github.com/mattn/go-colorable v0.1.6 // indirect 40 github.com/mattn/go-colorable v0.1.6 // indirect
@@ -41,7 +42,7 @@ require (
41 github.com/mitchellh/copystructure v1.0.0 // indirect 42 github.com/mitchellh/copystructure v1.0.0 // indirect
42 github.com/mitchellh/go-homedir v1.1.0 // indirect 43 github.com/mitchellh/go-homedir v1.1.0 // indirect
43 github.com/mitchellh/go-testing-interface v1.0.0 // indirect 44 github.com/mitchellh/go-testing-interface v1.0.0 // indirect
44 github.com/mitchellh/mapstructure v1.4.2 // indirect 45 github.com/mitchellh/mapstructure v1.5.0 // indirect
45 github.com/mitchellh/reflectwalk v1.0.0 // indirect 46 github.com/mitchellh/reflectwalk v1.0.0 // indirect
46 github.com/oklog/run v1.0.0 // indirect 47 github.com/oklog/run v1.0.0 // indirect
47 github.com/pierrec/lz4 v2.5.2+incompatible // indirect 48 github.com/pierrec/lz4 v2.5.2+incompatible // indirect
diff --git a/db/mongodb/go.sum b/db/mongodb/go.sum
index 51dd0bf..e677ffc 100644
--- a/db/mongodb/go.sum
+++ b/db/mongodb/go.sum
@@ -1,7 +1,9 @@
1cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 1cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 2cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
3code.crute.us/mcrute/golib/vault v0.2.0 h1:8n1DRZIo9WA9uPWAw0BPk9DfRs3kz8B58p6n1RF7Zk8= 3code.crute.us/mcrute/golib v0.4.0 h1:VWxb7v4gGkqL700zxDwgROweBsfx5RbiB35VW0O0oi0=
4code.crute.us/mcrute/golib/vault v0.2.0/go.mod h1:23C5g8O0zaeFfo7v6sCO0RKgnHIiHM9ku+ASOWHJD9k= 4code.crute.us/mcrute/golib v0.4.0/go.mod h1:dukLPhs1H8dxtkhXtpJZYo/bMzefLRbdRj9Tj67wdaQ=
5code.crute.us/mcrute/golib/secrets v0.1.0 h1:22W0rLhE5jvIQlsUDQt1soGBEoBn4rl4a883f1yBybI=
6code.crute.us/mcrute/golib/secrets v0.1.0/go.mod h1:O1ypm8JirXI4SekwNCHwQbfsieDQJxeRNwZYoot6fvw=
5github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 7github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
6github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= 8github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
7github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 9github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -128,7 +130,7 @@ github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39
128github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 130github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
129github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= 131github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
130github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 132github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
131github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= 133github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0/go.mod h1:xvb32K2keAc+R8DSFG2IwDcydK9DBQE+fGA5fsw6hSk=
132github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= 134github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
133github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= 135github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
134github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= 136github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
@@ -142,11 +144,13 @@ github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR3
142github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= 144github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw=
143github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc= 145github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc=
144github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= 146github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I=
145github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI=
146github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= 147github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8=
148github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 h1:om4Al8Oy7kCm/B86rLCLah4Dt5Aa0Fr5rYBG60OzwHQ=
149github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8=
147github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= 150github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo=
148github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788=
149github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= 151github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U=
152github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=
153github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
150github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= 154github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs=
151github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= 155github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
152github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= 156github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
@@ -160,14 +164,12 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l
160github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 164github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
161github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= 165github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
162github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= 166github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
163github.com/hashicorp/vault/api v1.3.0/go.mod h1:EabNQLI0VWbWoGlA+oBLC8PXmR9D60aUVgQGvangFWQ= 167github.com/hashicorp/vault/api v1.8.0 h1:7765sW1XBt+qf4XKIYE4ebY9qc/yi9V2/egzGSUNMZU=
164github.com/hashicorp/vault/api v1.5.0 h1:Bp6yc2bn7CWkOrVIzFT/Qurzx528bdavF3nz590eu28= 168github.com/hashicorp/vault/api v1.8.0/go.mod h1:uJrw6D3y9Rv7hhmS17JQC50jbPDAZdjZoTtrCCxxs7E=
165github.com/hashicorp/vault/api v1.5.0/go.mod h1:LkMdrZnWNrFaQyYYazWVn7KshilfDidgVBq6YiTq/bM= 169github.com/hashicorp/vault/api/auth/approle v0.3.0 h1:Ib0oCNXsCq/QZhPYtXPzJEbGS5WR/KoZf8c84QoFdkU=
166github.com/hashicorp/vault/api/auth/approle v0.1.1 h1:R5yA+xcNvw1ix6bDuWOaLOq2L4L77zDCVsethNw97xQ= 170github.com/hashicorp/vault/api/auth/approle v0.3.0/go.mod h1:hm51TbjzUkPO0Y17wkrpwOpvyyMRpXJNueTHiG04t3k=
167github.com/hashicorp/vault/api/auth/approle v0.1.1/go.mod h1:mHOLgh//xDx4dpqXoq6tS8Ob0FoCFWLU2ibJ26Lfmag= 171github.com/hashicorp/vault/sdk v0.6.0 h1:6Z+In5DXHiUfZvIZdMx7e2loL1PPyDjA4bVh9ZTIAhs=
168github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= 172github.com/hashicorp/vault/sdk v0.6.0/go.mod h1:+DRpzoXIdMvKc88R4qxr+edwy/RvH5QK8itmxLiDHLc=
169github.com/hashicorp/vault/sdk v0.4.1 h1:3SaHOJY687jY1fnB61PtL0cOkKItphrbLmux7T92HBo=
170github.com/hashicorp/vault/sdk v0.4.1/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0=
171github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= 173github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M=
172github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= 174github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
173github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 175github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
@@ -215,8 +217,8 @@ github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdI
215github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= 217github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
216github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= 218github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
217github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 219github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
218github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= 220github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
219github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 221github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
220github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= 222github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
221github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= 223github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
222github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 224github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=