File tree Expand file tree Collapse file tree 2 files changed +39
-17
lines changed Expand file tree Collapse file tree 2 files changed +39
-17
lines changed Original file line number Diff line number Diff line change @@ -199,9 +199,19 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
199
199
var exchangeToken func (context.Context ) (agentsdk.AuthenticateResponse , error )
200
200
switch auth {
201
201
case "token" :
202
- token , err := inv .ParsedFlags ().GetString (varAgentToken )
203
- if err != nil {
204
- return xerrors .Errorf ("CODER_AGENT_TOKEN must be set for token auth: %w" , err )
202
+ token , _ := inv .ParsedFlags ().GetString (varAgentToken )
203
+ if token == "" {
204
+ tokenFile , _ := inv .ParsedFlags ().GetString (varAgentTokenFile )
205
+ if tokenFile != "" {
206
+ tokenBytes , err := os .ReadFile (tokenFile )
207
+ if err != nil {
208
+ return xerrors .Errorf ("read token file %q: %w" , tokenFile , err )
209
+ }
210
+ token = strings .TrimSpace (string (tokenBytes ))
211
+ }
212
+ }
213
+ if token == "" {
214
+ return xerrors .Errorf ("CODER_AGENT_TOKEN or CODER_AGENT_TOKEN_FILE must be set for token auth" )
205
215
}
206
216
client .SetSessionToken (token )
207
217
case "google-instance-identity" :
Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ const (
55
55
varURL = "url"
56
56
varToken = "token"
57
57
varAgentToken = "agent-token"
58
+ varAgentTokenFile = "agent-token-file"
58
59
varAgentURL = "agent-url"
59
60
varHeader = "header"
60
61
varHeaderCommand = "header-command"
@@ -71,7 +72,9 @@ const (
71
72
envSessionToken = "CODER_SESSION_TOKEN"
72
73
//nolint:gosec
73
74
envAgentToken = "CODER_AGENT_TOKEN"
74
- envURL = "CODER_URL"
75
+ //nolint:gosec
76
+ envAgentTokenFile = "CODER_AGENT_TOKEN_FILE"
77
+ envURL = "CODER_URL"
75
78
)
76
79
77
80
var errUnauthenticated = xerrors .New (notLoggedInMessage )
@@ -328,6 +331,14 @@ func (r *RootCmd) Command(subcommands []*clibase.Cmd) (*clibase.Cmd, error) {
328
331
Hidden : true ,
329
332
Group : globalGroup ,
330
333
},
334
+ {
335
+ Flag : varAgentTokenFile ,
336
+ Env : envAgentTokenFile ,
337
+ Description : "A file containing an agent authentication token." ,
338
+ Value : clibase .StringOf (& r .agentTokenFile ),
339
+ Hidden : true ,
340
+ Group : globalGroup ,
341
+ },
331
342
{
332
343
Flag : varAgentURL ,
333
344
Env : "CODER_AGENT_URL" ,
@@ -446,19 +457,20 @@ func LoggerFromContext(ctx context.Context) (slog.Logger, bool) {
446
457
447
458
// RootCmd contains parameters and helpers useful to all commands.
448
459
type RootCmd struct {
449
- clientURL * url.URL
450
- token string
451
- globalConfig string
452
- header []string
453
- headerCommand string
454
- agentToken string
455
- agentURL * url.URL
456
- forceTTY bool
457
- noOpen bool
458
- verbose bool
459
- versionFlag bool
460
- disableDirect bool
461
- debugHTTP bool
460
+ clientURL * url.URL
461
+ token string
462
+ globalConfig string
463
+ header []string
464
+ headerCommand string
465
+ agentToken string
466
+ agentTokenFile string
467
+ agentURL * url.URL
468
+ forceTTY bool
469
+ noOpen bool
470
+ verbose bool
471
+ versionFlag bool
472
+ disableDirect bool
473
+ debugHTTP bool
462
474
463
475
noVersionCheck bool
464
476
noFeatureWarning bool
You can’t perform that action at this time.
0 commit comments