Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Aug 30, 2024. It is now read-only.
/coder-v1-cliPublic archive

Commita5570f2

Browse files
committed
Add --user flag to "secrets" and "envs"
1 parent4d9a0c9 commita5570f2

File tree

14 files changed

+141
-86
lines changed

14 files changed

+141
-86
lines changed

‎cmd/coder/auth.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
)
1111

1212
// requireAuth exits the process with a nonzero exit code if the user is not authenticated to make requests
13-
funcrequireAuth()*entclient.Client {
13+
funcrequireAuth(userFlagstring)*entclient.Client {
1414
sessionToken,err:=config.Session.Read()
1515
requireSuccess(err,"read session: %v (did you run coder login?)",err)
1616

@@ -20,10 +20,19 @@ func requireAuth() *entclient.Client {
2020
u,err:=url.Parse(rawURL)
2121
requireSuccess(err,"url misformatted: %v (try runing coder login)",err)
2222

23-
return&entclient.Client{
23+
client:=&entclient.Client{
2424
BaseURL:u,
2525
Token:sessionToken,
26+
UserID:entclient.Me,
2627
}
28+
29+
user,err:=client.UserByEmail(userFlag)
30+
requireSuccess(err,"failed to find user (%v) by email: %v",userFlag,err)
31+
32+
// perform all additional actions as this user
33+
client.UserID=user.ID
34+
35+
returnclient
2736
}
2837

2938
// requireSuccess prints the given message and format args as a fatal error if err != nil

‎cmd/coder/ceapi.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ outer:
2828

2929
// getEnvs returns all environments for the user.
3030
funcgetEnvs(client*entclient.Client) ([]entclient.Environment,error) {
31-
me,err:=client.Me()
31+
me,err:=client.TargetUser()
3232
iferr!=nil {
3333
returnnil,xerrors.Errorf("get self: %+v",err)
3434
}

‎cmd/coder/configssh.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,14 @@ func configSSH(filepath *string, remove *bool) func(c *cli.Context) error {
8686
returnnil
8787
}
8888

89-
entClient:=requireAuth()
89+
entClient:=requireAuth(entclient.Me)
9090

9191
sshAvailable:=isSSHAvailable(ctx)
9292
if!sshAvailable {
9393
returnxerrors.New("SSH is disabled or not available for your Coder Enterprise deployment.")
9494
}
9595

96-
me,err:=entClient.Me()
96+
me,err:=entClient.TargetUser()
9797
iferr!=nil {
9898
returnxerrors.Errorf("failed to fetch username: %w",err)
9999
}

‎cmd/coder/envs.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,36 @@ import (
44
"encoding/json"
55
"os"
66

7+
"cdr.dev/coder-cli/internal/entclient"
78
"cdr.dev/coder-cli/internal/x/xtabwriter"
89
"github.com/urfave/cli"
910
"golang.org/x/xerrors"
1011
)
1112

1213
funcmakeEnvsCommand() cli.Command {
1314
varoutputFmtstring
15+
varuserstring
1416
return cli.Command{
1517
Name:"envs",
1618
Usage:"Interact with Coder environments",
1719
Description:"Perform operations on the Coder environments owned by the active user.",
1820
Action:exitHelp,
21+
Flags: []cli.Flag{
22+
cli.StringFlag{
23+
Name:"user",
24+
Usage:"Specify the user whose resources to target",
25+
Value:entclient.Me,
26+
Destination:&user,
27+
},
28+
},
1929
Subcommands: []cli.Command{
2030
{
2131
Name:"ls",
2232
Usage:"list all environments owned by the active user",
2333
Description:"List all Coder environments owned by the active user.",
2434
ArgsUsage:"[...flags]>",
2535
Action:func(c*cli.Context)error {
26-
entClient:=requireAuth()
36+
entClient:=requireAuth(user)
2737
envs,err:=getEnvs(entClient)
2838
iferr!=nil {
2939
returnerr

‎cmd/coder/secrets.go

Lines changed: 75 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,44 @@ import (
1515
)
1616

1717
funcmakeSecretsCmd() cli.Command {
18+
varuserstring
1819
return cli.Command{
1920
Name:"secrets",
2021
Usage:"Interact with Coder Secrets",
2122
Description:"Interact with secrets objects owned by the active user.",
2223
Action:exitHelp,
24+
Flags: []cli.Flag{
25+
cli.StringFlag{
26+
Name:"user",
27+
Usage:"Specify the user whose resources to target",
28+
Value:entclient.Me,
29+
Destination:&user,
30+
},
31+
},
2332
Subcommands: []cli.Command{
33+
makeCreateSecret(&user),
2434
{
2535
Name:"ls",
2636
Usage:"List all secrets owned by the active user",
27-
Action:listSecrets,
37+
Action:makeListSecrets(&user),
2838
},
29-
makeCreateSecret(),
3039
{
3140
Name:"rm",
3241
Usage:"Remove one or more secrets by name",
3342
ArgsUsage:"[...secret_name]",
34-
Action:removeSecrets,
43+
Action:makeRemoveSecrets(&user),
3544
},
3645
{
3746
Name:"view",
3847
Usage:"View a secret by name",
3948
ArgsUsage:"[secret_name]",
40-
Action:viewSecret,
49+
Action:makeViewSecret(&user),
4150
},
4251
},
4352
}
4453
}
4554

46-
funcmakeCreateSecret() cli.Command {
55+
funcmakeCreateSecret(user*string) cli.Command {
4756
var (
4857
fromFilestring
4958
fromLiteralstring
@@ -73,7 +82,7 @@ func makeCreateSecret() cli.Command {
7382
},
7483
Action:func(c*cli.Context)error {
7584
var (
76-
client=requireAuth()
85+
client=requireAuth(*user)
7786
name=c.Args().First()
7887
valuestring
7988
errerror
@@ -139,72 +148,77 @@ func makeCreateSecret() cli.Command {
139148
}
140149
}
141150

142-
funclistSecrets(_*cli.Context)error {
143-
client:=requireAuth()
151+
funcmakeListSecrets(user*string)func(c*cli.Context)error {
152+
returnfunc(_*cli.Context)error {
153+
client:=requireAuth(*user)
144154

145-
secrets,err:=client.Secrets()
146-
iferr!=nil {
147-
returnxerrors.Errorf("failed to get secrets: %w",err)
148-
}
155+
secrets,err:=client.Secrets()
156+
iferr!=nil {
157+
returnxerrors.Errorf("failed to get secrets: %w",err)
158+
}
149159

150-
iflen(secrets)<1 {
151-
flog.Info("No secrets found")
152-
returnnil
153-
}
160+
iflen(secrets)<1 {
161+
flog.Info("No secrets found")
162+
returnnil
163+
}
154164

155-
err=xtabwriter.WriteTable(len(secrets),func(iint)interface{} {
156-
s:=secrets[i]
157-
s.Value="******"// value is omitted from bulk responses
158-
returns
159-
})
160-
iferr!=nil {
161-
returnxerrors.Errorf("failed to write table of secrets: %w",err)
165+
err=xtabwriter.WriteTable(len(secrets),func(iint)interface{} {
166+
s:=secrets[i]
167+
s.Value="******"// value is omitted from bulk responses
168+
returns
169+
})
170+
iferr!=nil {
171+
returnxerrors.Errorf("failed to write table of secrets: %w",err)
172+
}
173+
returnnil
162174
}
163-
returnnil
164175
}
165176

166-
funcviewSecret(c*cli.Context)error {
167-
var (
168-
client=requireAuth()
169-
name=c.Args().First()
170-
)
171-
ifname=="" {
172-
returnxerrors.New("[name] is a required argument")
173-
}
177+
funcmakeViewSecret(user*string)func(c*cli.Context)error {
178+
returnfunc(c*cli.Context)error {
179+
var (
180+
client=requireAuth(*user)
181+
name=c.Args().First()
182+
)
183+
ifname=="" {
184+
returnxerrors.New("[name] is a required argument")
185+
}
174186

175-
secret,err:=client.SecretByName(name)
176-
iferr!=nil {
177-
returnxerrors.Errorf("failed to get secret by name: %w",err)
178-
}
187+
secret,err:=client.SecretByName(name)
188+
iferr!=nil {
189+
returnxerrors.Errorf("failed to get secret by name: %w",err)
190+
}
179191

180-
_,err=fmt.Fprintln(os.Stdout,secret.Value)
181-
iferr!=nil {
182-
returnxerrors.Errorf("failed to write: %w",err)
192+
_,err=fmt.Fprintln(os.Stdout,secret.Value)
193+
iferr!=nil {
194+
returnxerrors.Errorf("failed to write: %w",err)
195+
}
196+
returnnil
183197
}
184-
returnnil
185198
}
199+
funcmakeRemoveSecrets(user*string)func(c*cli.Context)error {
200+
returnfunc(c*cli.Context)error {
201+
var (
202+
client=requireAuth(*user)
203+
names=append([]string{c.Args().First()},c.Args().Tail()...)
204+
)
205+
iflen(names)<1||names[0]=="" {
206+
returnxerrors.New("[...secret_name] is a required argument")
207+
}
186208

187-
funcremoveSecrets(c*cli.Context)error {
188-
var (
189-
client=requireAuth()
190-
names=append([]string{c.Args().First()},c.Args().Tail()...)
191-
)
192-
iflen(names)<1||names[0]=="" {
193-
returnxerrors.New("[...secret_name] is a required argument")
194-
}
195-
196-
errorSeen:=false
197-
for_,n:=rangenames {
198-
err:=client.DeleteSecretByName(n)
199-
iferr!=nil {
200-
flog.Error("Failed to delete secret: %v",err)
201-
errorSeen=true
202-
}else {
203-
flog.Info("Successfully deleted secret %q",n)
209+
errorSeen:=false
210+
for_,n:=rangenames {
211+
err:=client.DeleteSecretByName(n)
212+
iferr!=nil {
213+
flog.Error("Failed to delete secret: %v",err)
214+
errorSeen=true
215+
}else {
216+
flog.Info("Successfully deleted secret %q",n)
217+
}
204218
}
219+
iferrorSeen {
220+
os.Exit(1)
221+
}
222+
returnnil
205223
}
206-
iferrorSeen {
207-
os.Exit(1)
208-
}
209-
returnnil
210224
}

‎cmd/coder/shell.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"time"
99

1010
"cdr.dev/coder-cli/internal/activity"
11+
"cdr.dev/coder-cli/internal/entclient"
1112
"cdr.dev/coder-cli/internal/x/xterminal"
1213
"cdr.dev/wsep"
1314
"github.com/urfave/cli"
@@ -83,7 +84,7 @@ func sendResizeEvents(ctx context.Context, termfd uintptr, process wsep.Process)
8384

8485
funcrunCommand(ctx context.Context,envNamestring,commandstring,args []string)error {
8586
var (
86-
entClient=requireAuth()
87+
entClient=requireAuth(entclient.Me)
8788
)
8889
env,err:=findEnv(entClient,envName)
8990
iferr!=nil {

‎cmd/coder/sync.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"path/filepath"
99
"strings"
1010

11+
"cdr.dev/coder-cli/internal/entclient"
1112
"cdr.dev/coder-cli/internal/sync"
1213
"github.com/urfave/cli"
1314
"golang.org/x/xerrors"
@@ -62,7 +63,7 @@ func makeRunSync(init *bool) func(c *cli.Context) error {
6263
remote=c.Args().Get(1)
6364
)
6465

65-
entClient:=requireAuth()
66+
entClient:=requireAuth(entclient.Me)
6667

6768
info,err:=os.Stat(local)
6869
iferr!=nil {

‎cmd/coder/urls.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"strconv"
1010
"strings"
1111

12+
"cdr.dev/coder-cli/internal/entclient"
1213
"cdr.dev/coder-cli/internal/x/xtabwriter"
1314
"github.com/urfave/cli"
1415
"golang.org/x/xerrors"
@@ -191,7 +192,7 @@ func makeCreateDevURL() cli.Command {
191192
ifurlname!=""&&!devURLNameValidRx.MatchString(urlname) {
192193
returnxerrors.New("update devurl: name must be < 64 chars in length, begin with a letter and only contain letters or digits.")
193194
}
194-
entClient:=requireAuth()
195+
entClient:=requireAuth(entclient.Me)
195196

196197
env,err:=findEnv(entClient,envName)
197198
iferr!=nil {
@@ -251,7 +252,7 @@ func removeDevURL(c *cli.Context) error {
251252
returnxerrors.Errorf("failed to validate port: %w",err)
252253
}
253254

254-
entClient:=requireAuth()
255+
entClient:=requireAuth(entclient.Me)
255256
env,err:=findEnv(entClient,envName)
256257
iferr!=nil {
257258
returnerr
@@ -278,7 +279,7 @@ func removeDevURL(c *cli.Context) error {
278279

279280
// urlList returns the list of active devURLs from the cemanager.
280281
funcurlList(envNamestring) ([]DevURL,error) {
281-
entClient:=requireAuth()
282+
entClient:=requireAuth(entclient.Me)
282283
env,err:=findEnv(entClient,envName)
283284
iferr!=nil {
284285
returnnil,err

‎cmd/coder/users.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"os"
66

7+
"cdr.dev/coder-cli/internal/entclient"
78
"cdr.dev/coder-cli/internal/x/xtabwriter"
89
"github.com/urfave/cli"
910
"golang.org/x/xerrors"
@@ -35,7 +36,7 @@ func makeUsersCmd() cli.Command {
3536

3637
funclistUsers(outputFmt*string)func(c*cli.Context)error {
3738
returnfunc(c*cli.Context)error {
38-
entClient:=requireAuth()
39+
entClient:=requireAuth(entclient.Me)
3940

4041
users,err:=entClient.Users()
4142
iferr!=nil {

‎internal/entclient/client.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ import (
66
"net/url"
77
)
88

9+
// Me is the route param to access resources of the authenticated user
10+
constMe="me"
11+
912
// Client wraps the Coder HTTP API
1013
typeClientstruct {
1114
BaseURL*url.URL
1215
Tokenstring
16+
UserIDstring
1317
}
1418

1519
func (cClient)copyURL()*url.URL {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp