Skip to content

Commit 444c8aa

Browse files
authored
separate args for client and server listen ports (#85)
1 parent a46e331 commit 444c8aa

File tree

6 files changed

+85
-70
lines changed

6 files changed

+85
-70
lines changed

src/cmd/add.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ import (
77
)
88

99
type addCmdConfig struct {
10-
endpoint string
11-
outbound bool
12-
keepalive int
10+
endpoint string
11+
outboundEndpoint string
12+
keepalive int
1313
}
1414

1515
// Defaults for add command.
1616
// See root command for shared defaults.
1717
var addCmdArgs = addCmdConfig{
18-
endpoint: Endpoint,
19-
outbound: false,
20-
keepalive: Keepalive,
18+
endpoint: Endpoint,
19+
outboundEndpoint: Endpoint,
20+
keepalive: Keepalive,
2121
}
2222

2323
// addCmd represents the add command.
@@ -31,14 +31,11 @@ var addCmd = &cobra.Command{
3131
func init() {
3232
rootCmd.AddCommand(addCmd)
3333

34-
addCmd.PersistentFlags().StringVarP(&addCmdArgs.endpoint, "endpoint", "e", addCmdArgs.endpoint, "[REQUIRED] socket address of wireguard listener; client address if inbound handshake and server address if outbound (example \"1.2.3.4:51820\")")
35-
addCmd.PersistentFlags().BoolVar(&addCmdArgs.outbound, "outbound", addCmdArgs.outbound, "use endpoint to initiate handshake out to server instead of the other way around")
34+
addCmd.PersistentFlags().StringVarP(&addCmdArgs.endpoint, "endpoint", "e", addCmdArgs.endpoint, "IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that server will connect to (example \"1.2.3.4:51820\")")
35+
addCmd.PersistentFlags().StringVarP(&addCmdArgs.outboundEndpoint, "outbound-endpoint", "o", addCmdArgs.outboundEndpoint, "IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that client will connect to (example \"4.3.2.1:51820\"")
3636

3737
addCmd.PersistentFlags().IntVarP(&addCmdArgs.keepalive, "keepalive", "k", addCmdArgs.keepalive, "tunnel keepalive in seconds")
3838

39-
err := addCmd.MarkPersistentFlagRequired("endpoint")
40-
check("failed to mark flag required", err)
41-
4239
addCmd.Flags().SortFlags = false
4340
addCmd.PersistentFlags().SortFlags = false
4441

src/cmd/add_client.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,17 @@ func init() {
5151
addCmd.AddCommand(addClientCmd)
5252

5353
addClientCmd.Flags().StringVarP(&addClientCmdArgs.serverAddress, "server-address", "s", addClientCmdArgs.serverAddress, "API address of server that new client will connect to. By default new clients connect to existing relay servers")
54-
addClientCmd.Flags().IntVarP(&addClientCmdArgs.port, "port", "p", addClientCmdArgs.port, "port of wireguard listener to start; server port if --outbound, client port otherwise. Default is the port specified in --endpoint")
54+
addClientCmd.Flags().IntVarP(&addClientCmdArgs.port, "port", "p", addClientCmdArgs.port, "port of wireguard listener to start; server port if --outbound-endpoint, client port otherwise. Default is the port specified in --endpoint")
5555
addClientCmd.Flags().IntVarP(&addClientCmdArgs.mtu, "mtu", "m", addClientCmdArgs.mtu, "tunnel MTU")
56-
56+
5757
addClientCmd.Flags().StringVarP(&addClientCmdArgs.outputConfigFileRelay, "relay-output", "", addClientCmdArgs.outputConfigFileRelay, "filename of output relay config file")
5858
addClientCmd.Flags().StringVarP(&addClientCmdArgs.outputConfigFileE2EE, "e2ee-output", "", addClientCmdArgs.outputConfigFileE2EE, "filename of output E2EE config file")
5959
addClientCmd.Flags().StringVarP(&addClientCmdArgs.inputConfigFileRelay, "relay-input", "", addClientCmdArgs.inputConfigFileRelay, "filename of input relay config file")
6060
addClientCmd.Flags().StringVarP(&addClientCmdArgs.inputConfigFileE2EE, "e2ee-input", "", addClientCmdArgs.inputConfigFileE2EE, "filename of input E2EE config file")
6161

6262
addClientCmd.Flags().SortFlags = false
6363
addClientCmd.PersistentFlags().SortFlags = false
64-
64+
6565
helpFunc := addCmd.HelpFunc()
6666
addCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
6767
if !ShowHidden {
@@ -104,9 +104,13 @@ func (c addClientCmdConfig) Run() {
104104
if len(baseConfigE2EE.GetAddresses()) == 1 {
105105
disableV6 = true
106106
}
107-
107+
108108
if c.port == USE_ENDPOINT_PORT {
109-
c.port = portFromEndpoint(addArgs.endpoint);
109+
if len(addArgs.outboundEndpoint) > 0 {
110+
c.port = portFromEndpoint(addArgs.outboundEndpoint)
111+
} else {
112+
c.port = portFromEndpoint(addArgs.endpoint)
113+
}
110114
}
111115

112116
// Make new configs for client.
@@ -186,14 +190,14 @@ func (c addClientCmdConfig) Run() {
186190
return allowed
187191
}(),
188192
Endpoint: func() string {
189-
if addArgs.outbound {
193+
if len(addArgs.outboundEndpoint) > 0 {
190194
return ""
191195
} else {
192196
return addArgs.endpoint
193197
}
194198
}(),
195199
PersistentKeepaliveInterval: func() int {
196-
if addArgs.outbound {
200+
if len(addArgs.outboundEndpoint) > 0 {
197201
return 0
198202
} else {
199203
return addArgs.keepalive

src/cmd/add_server.go

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func init() {
5656

5757
addServerCmd.Flags().StringSliceVarP(&addServerCmdArgs.allowedIPs, "routes", "r", addServerCmdArgs.allowedIPs, "[REQUIRED] CIDR IP ranges that will be routed through wiretap")
5858
addServerCmd.Flags().StringVarP(&addServerCmdArgs.serverAddress, "server-address", "s", addServerCmdArgs.serverAddress, "API address of server that new server will connect to, connects to client by default")
59-
addServerCmd.Flags().IntVarP(&addServerCmdArgs.port, "port", "p", addServerCmdArgs.port, "listener port to start on new server for wireguard relay. If --outbound, default is the port specified in --endpoint; otherwise default is 51820")
59+
addServerCmd.Flags().IntVarP(&addServerCmdArgs.port, "port", "p", addServerCmdArgs.port, "listener port to start on new server for wireguard relay. If --outbound-endpoint, default is the port specified in --outbound-endpoint; otherwise default is 51820")
6060
addServerCmd.Flags().StringVarP(&addServerCmdArgs.nickname, "nickname", "n", addServerCmdArgs.nickname, "Server nickname to display in 'status' command")
6161
addServerCmd.Flags().StringVarP(&addServerCmdArgs.localhostIP, "localhost-ip", "i", addServerCmdArgs.localhostIP, "[EXPERIMENTAL] Redirect wiretap packets destined for this IPv4 address to server's localhost")
6262
addServerCmd.Flags().BoolVarP(&addServerCmdArgs.writeToClipboard, "clipboard", "c", addServerCmdArgs.writeToClipboard, "copy configuration args to clipboard")
@@ -150,14 +150,14 @@ func (c addServerCmdConfig) Run() {
150150
return allowedIPs
151151
}(),
152152
Endpoint: func() string {
153-
if addArgs.outbound {
154-
return addArgs.endpoint
153+
if len(addArgs.outboundEndpoint) > 0 {
154+
return addArgs.outboundEndpoint
155155
} else {
156156
return ""
157157
}
158158
}(),
159159
PersistentKeepaliveInterval: func() int {
160-
if addArgs.outbound {
160+
if len(addArgs.outboundEndpoint) > 0 {
161161
return addArgs.keepalive
162162
} else {
163163
return 0
@@ -185,13 +185,11 @@ func (c addServerCmdConfig) Run() {
185185
clientPeerConfigE2EE, err := clientConfigE2EE.AsPeer()
186186
check("failed to parse e2ee config as peer", err)
187187
if len(addArgs.endpoint) > 0 {
188-
if !addArgs.outbound {
189-
err = clientPeerConfigRelay.SetEndpoint(addArgs.endpoint)
190-
check("failed to set endpoint", err)
188+
err = clientPeerConfigRelay.SetEndpoint(addArgs.endpoint)
189+
check("failed to set endpoint", err)
191190

192-
err = clientPeerConfigE2EE.SetEndpoint(net.JoinHostPort(clientConfigRelay.GetAddresses()[0].IP.String(), fmt.Sprint(E2EEPort)))
193-
check("failed to set endpoint", err)
194-
}
191+
err = clientPeerConfigE2EE.SetEndpoint(net.JoinHostPort(clientConfigRelay.GetAddresses()[0].IP.String(), fmt.Sprint(E2EEPort)))
192+
check("failed to set endpoint", err)
195193
}
196194
serverConfigRelay.AddPeer(clientPeerConfigRelay)
197195
serverConfigE2EE.AddPeer(clientPeerConfigE2EE)
@@ -236,13 +234,11 @@ func (c addServerCmdConfig) Run() {
236234

237235
// Assign endpoints if inbound-initiated communication is used.
238236
if len(addArgs.endpoint) > 0 {
239-
if !addArgs.outbound {
240-
err = leafServerPeerConfigRelay.SetEndpoint(addArgs.endpoint)
241-
check("failed to set endpoint", err)
237+
err = leafServerPeerConfigRelay.SetEndpoint(addArgs.endpoint)
238+
check("failed to set endpoint", err)
242239

243-
err = clientPeerConfigE2EE.SetEndpoint(net.JoinHostPort(clientConfigRelay.GetAddresses()[0].IP.String(), fmt.Sprint(E2EEPort)))
244-
check("failed to set endpoint", err)
245-
}
240+
err = clientPeerConfigE2EE.SetEndpoint(net.JoinHostPort(clientConfigRelay.GetAddresses()[0].IP.String(), fmt.Sprint(E2EEPort)))
241+
check("failed to set endpoint", err)
246242
}
247243

248244
// Make allowed IPs all of current peer's allowed IPs:
@@ -281,14 +277,14 @@ func (c addServerCmdConfig) Run() {
281277
PublicKey: serverConfigRelay.GetPublicKey(),
282278
AllowedIPs: addrs,
283279
Endpoint: func() string {
284-
if addArgs.outbound {
285-
return addArgs.endpoint
280+
if len(addArgs.outboundEndpoint) > 0 {
281+
return addArgs.outboundEndpoint
286282
} else {
287283
return ""
288284
}
289285
}(),
290286
PersistentKeepaliveInterval: func() int {
291-
if addArgs.outbound {
287+
if len(addArgs.outboundEndpoint) > 0 {
292288
return addArgs.keepalive
293289
} else {
294290
return 0
@@ -342,8 +338,8 @@ func (c addServerCmdConfig) Run() {
342338

343339
// Set port defaults
344340
if c.port == USE_ENDPOINT_PORT {
345-
if addArgs.outbound { //for outbound, default port is same as endpoint port
346-
c.port = portFromEndpoint(addArgs.endpoint)
341+
if len(addArgs.outboundEndpoint) > 0 { //for outbound, default port is same as endpoint port
342+
c.port = portFromEndpoint(addArgs.outboundEndpoint)
347343

348344
} else { //for inbound, use a reasonable default for server relay listening port
349345
c.port = Port

src/cmd/configure.go

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"errors"
45
"fmt"
56
"net"
67
"net/netip"
@@ -16,8 +17,9 @@ import (
1617
type configureCmdConfig struct {
1718
allowedIPs []string
1819
endpoint string
19-
outbound bool
20+
outboundEndpoint string
2021
port int
22+
sport int
2123
nickname string
2224
configFileRelay string
2325
configFileE2EE string
@@ -43,8 +45,9 @@ type configureCmdConfig struct {
4345
var configureCmdArgs = configureCmdConfig{
4446
allowedIPs: []string{""},
4547
endpoint: Endpoint,
46-
outbound: false,
48+
outboundEndpoint: Endpoint,
4749
port: USE_ENDPOINT_PORT,
50+
sport: USE_ENDPOINT_PORT,
4851
nickname: "",
4952
configFileRelay: ConfigRelay,
5053
configFileE2EE: ConfigE2EE,
@@ -80,9 +83,10 @@ func init() {
8083
rootCmd.AddCommand(configureCmd)
8184

8285
configureCmd.Flags().StringSliceVarP(&configureCmdArgs.allowedIPs, "routes", "r", configureCmdArgs.allowedIPs, "[REQUIRED] CIDR IP ranges that will be routed through wiretap (example \"10.0.0.1/24\")")
83-
configureCmd.Flags().StringVarP(&configureCmdArgs.endpoint, "endpoint", "e", configureCmdArgs.endpoint, "[REQUIRED] IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that server will connect to (example \"1.2.3.4:51820\")")
84-
configureCmd.Flags().BoolVar(&configureCmdArgs.outbound, "outbound", configureCmdArgs.outbound, "client will initiate handshake to server; --endpoint now specifies server's listening socket instead of client's, and --port assigns the server's listening port instead of client's")
85-
configureCmd.Flags().IntVarP(&configureCmdArgs.port, "port", "p", configureCmdArgs.port, "listener port for wireguard relay. Default is to copy the --endpoint port. If --outbound, sets port for the server; else for the client.")
86+
configureCmd.Flags().StringVarP(&configureCmdArgs.endpoint, "endpoint", "e", configureCmdArgs.endpoint, "IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that server will connect to (example \"1.2.3.4:51820\")")
87+
configureCmd.Flags().StringVarP(&configureCmdArgs.outboundEndpoint, "outbound-endpoint", "o", configureCmdArgs.outboundEndpoint, "IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that client will connect to (example \"4.3.2.1:51820\"")
88+
configureCmd.Flags().IntVarP(&configureCmdArgs.port, "port", "p", configureCmdArgs.port, "listener port for client wireguard relay. Default is to copy the --endpoint port, or fallback to 51820")
89+
configureCmd.Flags().IntVarP(&configureCmdArgs.sport, "sport", "S", configureCmdArgs.sport, "listener port for server wireguard relay. Default is to copy the --outbound-endpoint port, or fallback to 51820")
8690
configureCmd.Flags().StringVarP(&configureCmdArgs.nickname, "nickname", "n", configureCmdArgs.nickname, "Server nickname to display in 'status' command")
8791
configureCmd.Flags().StringVarP(&configureCmdArgs.localhostIP, "localhost-ip", "i", configureCmdArgs.localhostIP, "[EXPERIMENTAL] Redirect wiretap packets destined for this IPv4 address to server's localhost")
8892

@@ -106,8 +110,8 @@ func init() {
106110

107111
err := configureCmd.MarkFlagRequired("routes")
108112
check("failed to mark flag required", err)
109-
err = configureCmd.MarkFlagRequired("endpoint")
110-
check("failed to mark flag required", err)
113+
configureCmd.MarkFlagsMutuallyExclusive("endpoint", "outbound-endpoint")
114+
configureCmd.MarkFlagsOneRequired("endpoint", "outbound-endpoint")
111115

112116
configureCmd.Flags().SortFlags = false
113117

@@ -185,23 +189,32 @@ func (c configureCmdConfig) Run() {
185189
clientE2EEAddrs = append(clientE2EEAddrs, c.clientAddr6E2EE)
186190
}
187191

188-
if c.port == USE_ENDPOINT_PORT {
189-
c.port = portFromEndpoint(c.endpoint)
192+
// Check for how client and server should connect
193+
if c.endpoint == Endpoint && c.outboundEndpoint == Endpoint {
194+
check("endpoint error", errors.New("must specify either --endpoint or --outbound-endpoint"))
195+
} else if len(c.endpoint) > 0 && len(c.outboundEndpoint) > 0 {
196+
check("endpoint error", errors.New("cannot set both --endpoint and --outbound-endpoint"))
190197
}
191198

192-
// We only configure one of these (based on --outbound or not)
193-
// The other must be manually changed in the configs/command/envs
194-
var clientPort int
195-
var serverPort int
199+
if c.port == USE_ENDPOINT_PORT {
200+
if len(c.endpoint) > 0 {
201+
c.port = portFromEndpoint(c.endpoint)
202+
} else {
203+
c.port = Port
204+
}
205+
}
196206

197-
if c.outbound {
198-
clientPort = Port
199-
serverPort = c.port
200-
} else {
201-
clientPort = c.port
202-
serverPort = Port
207+
if c.sport == USE_ENDPOINT_PORT {
208+
if len(c.outboundEndpoint) > 0 {
209+
c.sport = portFromEndpoint(c.outboundEndpoint)
210+
} else {
211+
c.sport = Port
212+
}
203213
}
204214

215+
clientPort := c.port
216+
serverPort := c.sport
217+
205218
err = serverConfigRelay.SetPort(serverPort)
206219
check("failed to set port", err)
207220

@@ -224,14 +237,14 @@ func (c configureCmdConfig) Run() {
224237
}
225238
}(),
226239
Endpoint: func() string {
227-
if c.outbound {
228-
return c.endpoint
240+
if len(c.outboundEndpoint) > 0 {
241+
return c.outboundEndpoint
229242
} else {
230243
return ""
231244
}
232245
}(),
233246
PersistentKeepaliveInterval: func() int {
234-
if c.outbound {
247+
if len(c.outboundEndpoint) > 0 {
235248
return c.keepalive
236249
} else {
237250
return 0
@@ -269,15 +282,13 @@ func (c configureCmdConfig) Run() {
269282
check("failed to parse e2ee config as peer", err)
270283

271284
if len(c.endpoint) > 0 {
272-
if !c.outbound {
273-
err = clientPeerConfigRelay.SetEndpoint(c.endpoint)
274-
check("failed to set endpoint", err)
275-
}
276-
277-
err = clientPeerConfigE2EE.SetEndpoint(net.JoinHostPort(clientConfigRelay.GetAddresses()[0].IP.String(), fmt.Sprint(E2EEPort)))
285+
err = clientPeerConfigRelay.SetEndpoint(c.endpoint)
278286
check("failed to set endpoint", err)
279287
}
280288

289+
err = clientPeerConfigE2EE.SetEndpoint(net.JoinHostPort(clientConfigRelay.GetAddresses()[0].IP.String(), fmt.Sprint(E2EEPort)))
290+
check("failed to set endpoint", err)
291+
281292
serverConfigRelay.AddPeer(clientPeerConfigRelay)
282293
serverConfigE2EE.AddPeer(clientPeerConfigE2EE)
283294
if c.mtu != MTU {

src/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/google/gopacket v1.1.19
1515
github.com/libp2p/go-reuseport v0.2.0
1616
github.com/m1gwings/treedrawer v0.3.3-beta
17-
github.com/spf13/cobra v1.6.1
17+
github.com/spf13/cobra v1.9.1
1818
github.com/spf13/viper v1.15.0
1919
golang.org/x/net v0.23.0
2020
golang.zx2c4.com/wireguard v0.0.0-20220920152132-bb719d3a6e2c
@@ -27,7 +27,7 @@ require (
2727
github.com/google/btree v1.1.2 // indirect
2828
github.com/google/uuid v1.3.0 // indirect
2929
github.com/hashicorp/hcl v1.0.0 // indirect
30-
github.com/inconshreveable/mousetrap v1.0.1 // indirect
30+
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3131
github.com/magiconair/properties v1.8.7 // indirect
3232
github.com/mattn/go-colorable v0.1.13 // indirect
3333
github.com/mattn/go-isatty v0.0.16 // indirect
@@ -36,7 +36,7 @@ require (
3636
github.com/spf13/afero v1.9.3 // indirect
3737
github.com/spf13/cast v1.5.0 // indirect
3838
github.com/spf13/jwalterweatherman v1.1.0 // indirect
39-
github.com/spf13/pflag v1.0.5 // indirect
39+
github.com/spf13/pflag v1.0.6 // indirect
4040
github.com/subosito/gotenv v1.4.2 // indirect
4141
golang.org/x/crypto v0.21.0 // indirect
4242
golang.org/x/sync v0.4.0 // indirect

src/go.sum

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
5151
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
5252
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
5353
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
54+
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
5455
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5556
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
5657
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -142,6 +143,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
142143
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
143144
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
144145
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
146+
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
147+
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
145148
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
146149
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
147150
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -187,10 +190,14 @@ github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
187190
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
188191
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
189192
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
193+
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
194+
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
190195
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
191196
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
192197
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
193198
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
199+
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
200+
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
194201
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
195202
github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
196203
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=

0 commit comments

Comments
 (0)