diff --git a/cmd/cloudflared/access/cmd.go b/cmd/cloudflared/access/cmd.go index eaacb5f2..73c6ae40 100644 --- a/cmd/cloudflared/access/cmd.go +++ b/cmd/cloudflared/access/cmd.go @@ -91,12 +91,6 @@ func Commands() []*cli.Command { Once authenticated with your identity provider, the login command will generate a JSON Web Token (JWT) scoped to your identity, the application you intend to reach, and valid for a session duration set by your administrator. cloudflared stores the token in local storage.`, - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "url", - Hidden: true, - }, - }, }, { Name: "curl", diff --git a/cmd/cloudflared/cliutil/handler.go b/cmd/cloudflared/cliutil/handler.go index b30ff250..d3cf0038 100644 --- a/cmd/cloudflared/cliutil/handler.go +++ b/cmd/cloudflared/cliutil/handler.go @@ -9,6 +9,10 @@ import ( ) func Action(actionFunc cli.ActionFunc) cli.ActionFunc { + return WithErrorHandler(actionFunc) +} + +func ConfiguredAction(actionFunc cli.ActionFunc) cli.ActionFunc { return WithErrorHandler(func(c *cli.Context) error { if err := setFlagsFromConfigFile(c); err != nil { return err diff --git a/cmd/cloudflared/linux_service.go b/cmd/cloudflared/linux_service.go index aeb4010c..e65c12fb 100644 --- a/cmd/cloudflared/linux_service.go +++ b/cmd/cloudflared/linux_service.go @@ -24,7 +24,7 @@ func runApp(app *cli.App, graceShutdownC chan struct{}) { { Name: "install", Usage: "Install Argo Tunnel as a system service", - Action: cliutil.Action(installLinuxService), + Action: cliutil.ConfiguredAction(installLinuxService), Flags: []cli.Flag{ &cli.BoolFlag{ Name: "legacy", @@ -35,7 +35,7 @@ func runApp(app *cli.App, graceShutdownC chan struct{}) { { Name: "uninstall", Usage: "Uninstall the Argo Tunnel service", - Action: cliutil.Action(uninstallLinuxService), + Action: cliutil.ConfiguredAction(uninstallLinuxService), }, }, }) diff --git a/cmd/cloudflared/macos_service.go b/cmd/cloudflared/macos_service.go index 58072e8d..e7c35c09 100644 --- a/cmd/cloudflared/macos_service.go +++ b/cmd/cloudflared/macos_service.go @@ -25,12 +25,12 @@ func runApp(app *cli.App, graceShutdownC chan struct{}) { { Name: "install", Usage: "Install Argo Tunnel as an user launch agent", - Action: cliutil.Action(installLaunchd), + Action: cliutil.ConfiguredAction(installLaunchd), }, { Name: "uninstall", Usage: "Uninstall the Argo Tunnel launch agent", - Action: cliutil.Action(uninstallLaunchd), + Action: cliutil.ConfiguredAction(uninstallLaunchd), }, }, }) diff --git a/cmd/cloudflared/main.go b/cmd/cloudflared/main.go index 3c4e7929..9036a5ac 100644 --- a/cmd/cloudflared/main.go +++ b/cmd/cloudflared/main.go @@ -8,10 +8,10 @@ import ( "github.com/cloudflare/cloudflared/cmd/cloudflared/access" "github.com/cloudflare/cloudflared/cmd/cloudflared/cliutil" - "github.com/cloudflare/cloudflared/config" "github.com/cloudflare/cloudflared/cmd/cloudflared/proxydns" "github.com/cloudflare/cloudflared/cmd/cloudflared/tunnel" "github.com/cloudflare/cloudflared/cmd/cloudflared/updater" + "github.com/cloudflare/cloudflared/config" "github.com/cloudflare/cloudflared/logger" "github.com/cloudflare/cloudflared/metrics" "github.com/cloudflare/cloudflared/overwatch" @@ -89,7 +89,7 @@ func commands(version func(c *cli.Context)) []*cli.Command { cmds := []*cli.Command{ { Name: "update", - Action: cliutil.Action(updater.Update), + Action: cliutil.ConfiguredAction(updater.Update), Usage: "Update the agent if a new version exists", Flags: []cli.Flag{ &cli.BoolFlag{ @@ -144,7 +144,7 @@ func isEmptyInvocation(c *cli.Context) bool { } func action(graceShutdownC chan struct{}) cli.ActionFunc { - return cliutil.Action(func(c *cli.Context) (err error) { + return cliutil.ConfiguredAction(func(c *cli.Context) (err error) { if isEmptyInvocation(c) { return handleServiceMode(c, graceShutdownC) } diff --git a/cmd/cloudflared/proxydns/cmd.go b/cmd/cloudflared/proxydns/cmd.go index ec12c6cc..f560635d 100644 --- a/cmd/cloudflared/proxydns/cmd.go +++ b/cmd/cloudflared/proxydns/cmd.go @@ -17,9 +17,9 @@ import ( func Command(hidden bool) *cli.Command { return &cli.Command{ Name: "proxy-dns", - Action: cliutil.Action(Run), + Action: cliutil.ConfiguredAction(Run), - Usage: "Run a DNS over HTTPS proxy server.", + Usage: "Run a DNS over HTTPS proxy server.", Flags: []cli.Flag{ &cli.StringFlag{ Name: "metrics", @@ -112,5 +112,3 @@ func Run(c *cli.Context) error { } return err } - - diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index aff70c2d..20962f3d 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -119,7 +119,7 @@ func Commands() []*cli.Command { func buildTunnelCommand(subcommands []*cli.Command) *cli.Command { return &cli.Command{ Name: "tunnel", - Action: cliutil.Action(TunnelCommand), + Action: cliutil.ConfiguredAction(TunnelCommand), Category: "Tunnel", Usage: "Make a locally-running web service accessible over the internet using Argo Tunnel.", ArgsUsage: " ", diff --git a/cmd/cloudflared/tunnel/ingress_subcommands.go b/cmd/cloudflared/tunnel/ingress_subcommands.go index 2cd2f9b6..68e159d2 100644 --- a/cmd/cloudflared/tunnel/ingress_subcommands.go +++ b/cmd/cloudflared/tunnel/ingress_subcommands.go @@ -45,7 +45,7 @@ func buildIngressSubcommand() *cli.Command { func buildValidateIngressCommand() *cli.Command { return &cli.Command{ Name: "validate", - Action: cliutil.Action(validateIngressCommand), + Action: cliutil.ConfiguredAction(validateIngressCommand), Usage: "Validate the ingress configuration ", UsageText: "cloudflared tunnel [--config FILEPATH] ingress validate", Description: "Validates the configuration file, ensuring your ingress rules are OK.", @@ -55,7 +55,7 @@ func buildValidateIngressCommand() *cli.Command { func buildTestURLCommand() *cli.Command { return &cli.Command{ Name: "rule", - Action: cliutil.Action(testURLCommand), + Action: cliutil.ConfiguredAction(testURLCommand), Usage: "Check which ingress rule matches a given request URL", UsageText: "cloudflared tunnel [--config FILEPATH] ingress rule URL", ArgsUsage: "URL", diff --git a/cmd/cloudflared/tunnel/login.go b/cmd/cloudflared/tunnel/login.go index 1d2d7e00..a5908d8c 100644 --- a/cmd/cloudflared/tunnel/login.go +++ b/cmd/cloudflared/tunnel/login.go @@ -26,16 +26,10 @@ const ( func buildLoginSubcommand(hidden bool) *cli.Command { return &cli.Command{ Name: "login", - Action: cliutil.Action(login), + Action: cliutil.ConfiguredAction(login), Usage: "Generate a configuration file with your login details", ArgsUsage: " ", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "url", - Hidden: true, - }, - }, - Hidden: hidden, + Hidden: hidden, } } diff --git a/cmd/cloudflared/tunnel/subcommands.go b/cmd/cloudflared/tunnel/subcommands.go index 4f91ad92..1640e201 100644 --- a/cmd/cloudflared/tunnel/subcommands.go +++ b/cmd/cloudflared/tunnel/subcommands.go @@ -119,7 +119,7 @@ var ( func buildCreateCommand() *cli.Command { return &cli.Command{ Name: "create", - Action: cliutil.Action(createCommand), + Action: cliutil.ConfiguredAction(createCommand), Usage: "Create a new tunnel with given name", UsageText: "cloudflared tunnel [tunnel command options] create [subcommand options] NAME", Description: `Creates a tunnel, registers it with Cloudflare edge and generates credential file used to run this tunnel. @@ -190,7 +190,7 @@ func writeTunnelCredentials( func buildListCommand() *cli.Command { return &cli.Command{ Name: "list", - Action: cliutil.Action(listCommand), + Action: cliutil.ConfiguredAction(listCommand), Usage: "List existing tunnels", UsageText: "cloudflared tunnel [tunnel command options] list [subcommand options]", Description: "cloudflared tunnel list will display all active tunnels, their created time and associated connections. Use -d flag to include deleted tunnels. See the list of options to filter the list", @@ -339,7 +339,7 @@ func fmtConnections(connections []tunnelstore.Connection, showRecentlyDisconnect func buildDeleteCommand() *cli.Command { return &cli.Command{ Name: "delete", - Action: cliutil.Action(deleteCommand), + Action: cliutil.ConfiguredAction(deleteCommand), Usage: "Delete existing tunnel by UUID or name", UsageText: "cloudflared tunnel [tunnel command options] delete [subcommand options] TUNNEL", Description: "cloudflared tunnel delete will delete tunnels with the given tunnel UUIDs or names. A tunnel cannot be deleted if it has active connections. To delete the tunnel unconditionally, use -f flag.", @@ -392,7 +392,7 @@ func buildRunCommand() *cli.Command { flags = append(flags, configureProxyFlags(false)...) return &cli.Command{ Name: "run", - Action: cliutil.Action(runCommand), + Action: cliutil.ConfiguredAction(runCommand), Usage: "Proxy a local web server by running the given tunnel", UsageText: "cloudflared tunnel [tunnel command options] run [subcommand options] [TUNNEL]", Description: `Runs the tunnel identified by name or UUUD, creating highly available connections @@ -444,7 +444,7 @@ func runNamedTunnel(sc *subcommandContext, tunnelRef string) error { func buildCleanupCommand() *cli.Command { return &cli.Command{ Name: "cleanup", - Action: cliutil.Action(cleanupCommand), + Action: cliutil.ConfiguredAction(cleanupCommand), Usage: "Cleanup tunnel connections", UsageText: "cloudflared tunnel [tunnel command options] cleanup [subcommand options] TUNNEL", Description: "Delete connections for tunnels with the given UUIDs or names.", @@ -473,7 +473,7 @@ func cleanupCommand(c *cli.Context) error { func buildRouteCommand() *cli.Command { return &cli.Command{ Name: "route", - Action: cliutil.Action(routeCommand), + Action: cliutil.ConfiguredAction(routeCommand), Usage: "Define which traffic routed from Cloudflare edge to this tunnel: requests to a DNS hostname, to a Cloudflare Load Balancer, or traffic originating from Cloudflare WARP clients", UsageText: "cloudflared tunnel [tunnel command options] route [subcommand options] [dns TUNNEL HOSTNAME]|[lb TUNNEL HOSTNAME LB-POOL]|[ip NETWORK TUNNEL]", Description: `The route command defines how Cloudflare will proxy requests to this tunnel. diff --git a/cmd/cloudflared/tunnel/teamnet_subcommands.go b/cmd/cloudflared/tunnel/teamnet_subcommands.go index afbf41d7..d87c9892 100644 --- a/cmd/cloudflared/tunnel/teamnet_subcommands.go +++ b/cmd/cloudflared/tunnel/teamnet_subcommands.go @@ -6,10 +6,11 @@ import ( "os" "text/tabwriter" + "github.com/pkg/errors" + "github.com/cloudflare/cloudflared/cmd/cloudflared/cliutil" "github.com/cloudflare/cloudflared/cmd/cloudflared/updater" "github.com/cloudflare/cloudflared/teamnet" - "github.com/pkg/errors" "github.com/urfave/cli/v2" ) @@ -25,7 +26,7 @@ Cloudflare WARP client. You can also build rules to determine who can reach cert Subcommands: []*cli.Command{ { Name: "add", - Action: cliutil.Action(addRouteCommand), + Action: cliutil.ConfiguredAction(addRouteCommand), Usage: "Add any new network to the routing table reachable via the tunnel", UsageText: "cloudflared tunnel [--config FILEPATH] route ip add [CIDR] [TUNNEL] [COMMENT?]", Description: `Adds any network route space (represented as a CIDR) to your routing table. @@ -38,23 +39,23 @@ reachable from the tunnel.`, { Name: "show", Aliases: []string{"list"}, - Action: cliutil.Action(showRoutesCommand), + Action: cliutil.ConfiguredAction(showRoutesCommand), Usage: "Show the routing table", UsageText: "cloudflared tunnel [--config FILEPATH] route ip show [flags]", Description: `Shows your organization private routing table. You can use flags to filter the results.`, Flags: showRoutesFlags(), }, { - Name: "delete", - Action: cliutil.Action(deleteRouteCommand), - Usage: "Delete a row from your organization's private routing table", - UsageText: "cloudflared tunnel [--config FILEPATH] route ip delete [CIDR]", + Name: "delete", + Action: cliutil.ConfiguredAction(deleteRouteCommand), + Usage: "Delete a row from your organization's private routing table", + UsageText: "cloudflared tunnel [--config FILEPATH] route ip delete [CIDR]", Description: `Deletes the row for a given CIDR from your routing table. That portion of your network will no longer be reachable by the WARP clients.`, }, { Name: "get", - Action: cliutil.Action(getRouteByIPCommand), + Action: cliutil.ConfiguredAction(getRouteByIPCommand), Usage: "Check which row of the routing table matches a given IP.", UsageText: "cloudflared tunnel [--config FILEPATH] route ip get [IP]", Description: `Checks which row of the routing table will be used to proxy a given IP. diff --git a/cmd/cloudflared/windows_service.go b/cmd/cloudflared/windows_service.go index 3d3d2e84..8f623790 100644 --- a/cmd/cloudflared/windows_service.go +++ b/cmd/cloudflared/windows_service.go @@ -51,12 +51,12 @@ func runApp(app *cli.App, graceShutdownC chan struct{}) { { Name: "install", Usage: "Install Argo Tunnel as a Windows service", - Action: cliutil.Action(installWindowsService), + Action: cliutil.ConfiguredAction(installWindowsService), }, { Name: "uninstall", Usage: "Uninstall the Argo Tunnel service", - Action: cliutil.Action(uninstallWindowsService), + Action: cliutil.ConfiguredAction(uninstallWindowsService), }, }, })