From 560911bcc81291cc50a092a69acc3cea18c81110 Mon Sep 17 00:00:00 2001 From: Cyb3r-Jak3 Date: Sun, 25 Aug 2024 09:30:34 -0400 Subject: [PATCH] adds a new command line for tunnel run for token file --- cmd/cloudflared/tunnel/subcommands.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/cmd/cloudflared/tunnel/subcommands.go b/cmd/cloudflared/tunnel/subcommands.go index bef86887..0c49e3e7 100644 --- a/cmd/cloudflared/tunnel/subcommands.go +++ b/cmd/cloudflared/tunnel/subcommands.go @@ -35,6 +35,7 @@ const ( CredFileFlag = "credentials-file" CredContentsFlag = "credentials-contents" TunnelTokenFlag = "token" + TunnelTokenFileFlag = "token-file" overwriteDNSFlagName = "overwrite-dns" LogFieldTunnelID = "tunnelID" @@ -113,9 +114,14 @@ var ( }) tunnelTokenFlag = altsrc.NewStringFlag(&cli.StringFlag{ Name: TunnelTokenFlag, - Usage: "The Tunnel token. When provided along with credentials, this will take precedence.", + Usage: "The Tunnel token. When provided along with credentials, this will take precedence. Also takes precedence over token-file", EnvVars: []string{"TUNNEL_TOKEN"}, }) + tunnelTokenFileFlag = altsrc.NewStringFlag(&cli.StringFlag{ + Name: TunnelTokenFileFlag, + Usage: "Filepath at which to read the tunnel token. When provided along with credentials, this will take precedence.", + EnvVars: []string{"TUNNEL_TOKEN_FILE"}, + }) forceDeleteFlag = &cli.BoolFlag{ Name: "force", Aliases: []string{"f"}, @@ -613,6 +619,7 @@ func buildRunCommand() *cli.Command { selectProtocolFlag, featuresFlag, tunnelTokenFlag, + tunnelTokenFileFlag, icmpv4SrcFlag, icmpv6SrcFlag, } @@ -652,12 +659,25 @@ func runCommand(c *cli.Context) error { "your origin will not be reachable. You should remove the `hostname` property to avoid this warning.") } + tokenStr := c.String(TunnelTokenFlag) + // Check if tokenStr is blank before checking for tokenFile + if tokenStr == "" { + if tokenFile := c.String(TunnelTokenFileFlag); tokenFile != "" { + data, err := os.ReadFile(tokenFile) + if err != nil { + return cliutil.UsageError("Failed to read token file: " + err.Error()) + } + tokenStr = strings.TrimSpace(string(data)) + if _, err := ParseToken(tokenStr); err != nil { + return cliutil.UsageError("Failed to parse token file: " + err.Error()) + } + } + } // Check if token is provided and if not use default tunnelID flag method - if tokenStr := c.String(TunnelTokenFlag); tokenStr != "" { + if tokenStr != "" { if token, err := ParseToken(tokenStr); err == nil { return sc.runWithCredentials(token.Credentials()) } - return cliutil.UsageError("Provided Tunnel token is not valid.") } else { tunnelRef := c.Args().First()