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

Commit13a89c4

Browse files
committed
Add --user flag to "secrets" and "envs"
1 parent3dc2d89 commit13a89c4

File tree

14 files changed

+133
-88
lines changed

14 files changed

+133
-88
lines changed

‎cmd/coder/auth.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import (
1111
)
1212

1313
// requireAuth exits the process with a nonzero exit code if the user is not authenticated to make requests
14-
funcrequireAuth()*entclient.Client {
15-
client,err:=newClient()
14+
funcrequireAuth(userstring)*entclient.Client {
15+
client,err:=newClient(user)
1616
iferr!=nil {
1717
flog.Fatal("%v",err)
1818
}
1919
returnclient
2020
}
2121

22-
funcnewClient() (*entclient.Client,error) {
22+
funcnewClient(userFlagstring) (*entclient.Client,error) {
2323
sessionToken,err:=config.Session.Read()
2424
iferr!=nil {
2525
returnnil,xerrors.Errorf("read session: %v (did you run coder login?)",err)
@@ -35,8 +35,19 @@ func newClient() (*entclient.Client, error) {
3535
returnnil,xerrors.Errorf("url misformatted: %v (try runing coder login)",err)
3636
}
3737

38-
return&entclient.Client{
38+
client:=&entclient.Client{
3939
BaseURL:u,
4040
Token:sessionToken,
41-
},nil
41+
UserID:entclient.Me,
42+
}
43+
44+
user,err:=client.UserByEmail(userFlag)
45+
iferr!=nil {
46+
returnnil,xerrors.Errorf("failed to find user (%v) by email: %v",userFlag,err)
47+
}
48+
49+
// perform all additional actions as this user
50+
client.UserID=user.ID
51+
52+
returnclient,nil
4253
}

‎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
@@ -76,14 +76,14 @@ func configSSH(filepath *string, remove *bool) func(cmd *cobra.Command, _ []stri
7676
returnnil
7777
}
7878

79-
entClient:=requireAuth()
79+
entClient:=requireAuth(entclient.Me)
8080

8181
sshAvailable:=isSSHAvailable(ctx)
8282
if!sshAvailable {
8383
returnxerrors.New("SSH is disabled or not available for your Coder Enterprise deployment.")
8484
}
8585

86-
me,err:=entClient.Me()
86+
me,err:=entClient.TargetUser()
8787
iferr!=nil {
8888
returnxerrors.Errorf("fetch username: %w",err)
8989
}

‎cmd/coder/envs.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,28 @@ 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/spf13/cobra"
910
"golang.org/x/xerrors"
1011
)
1112

1213
funcmakeEnvsCommand()*cobra.Command {
1314
varoutputFmtstring
15+
varuserstring
1416
cmd:=&cobra.Command{
1517
Use:"envs",
1618
Short:"Interact with Coder environments",
1719
Long:"Perform operations on the Coder environments owned by the active user.",
1820
}
21+
cmd.PersistentFlags().StringVar(&user,"user",entclient.Me,"Specify the user whose resources to target")
1922

2023
lsCmd:=&cobra.Command{
2124
Use:"ls",
2225
Short:"list all environments owned by the active user",
2326
Long:"List all Coder environments owned by the active user.",
2427
RunE:func(cmd*cobra.Command,args []string)error {
25-
entClient:=requireAuth()
28+
entClient:=requireAuth(user)
2629
envs,err:=getEnvs(entClient)
2730
iferr!=nil {
2831
returnerr

‎cmd/coder/secrets.go

Lines changed: 69 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,39 @@ import (
1515
)
1616

1717
funcmakeSecretsCmd()*cobra.Command {
18+
varuserstring
1819
cmd:=&cobra.Command{
1920
Use:"secrets",
2021
Short:"Interact with Coder Secrets",
2122
Long:"Interact with secrets objects owned by the active user.",
2223
}
24+
cmd.PersistentFlags().StringVar(&user,"user",entclient.Me,"Specify the user whose resources to target")
2325
cmd.AddCommand(
2426
&cobra.Command{
2527
Use:"ls",
2628
Short:"List all secrets owned by the active user",
27-
RunE:listSecrets,
29+
RunE:listSecrets(&user),
2830
},
29-
makeCreateSecret(),
31+
makeCreateSecret(&user),
3032
&cobra.Command{
3133
Use:"rm [...secret_name]",
3234
Short:"Remove one or more secrets by name",
3335
Args:cobra.MinimumNArgs(1),
34-
RunE:removeSecrets,
36+
RunE:makeRemoveSecrets(&user),
3537
Example:"coder secrets rm mysql-password mysql-user",
3638
},
3739
&cobra.Command{
3840
Use:"view [secret_name]",
3941
Short:"View a secret by name",
4042
Args:cobra.ExactArgs(1),
41-
RunE:viewSecret,
43+
RunE:makeViewSecret(&user),
4244
Example:"coder secrets view mysql-password",
4345
},
4446
)
4547
returncmd
4648
}
4749

48-
funcmakeCreateSecret()*cobra.Command {
50+
funcmakeCreateSecret(user*string)*cobra.Command {
4951
var (
5052
fromFilestring
5153
fromLiteralstring
@@ -77,7 +79,7 @@ coder secrets create aws-credentials --from-file ./credentials.json`,
7779
},
7880
RunE:func(cmd*cobra.Command,args []string)error {
7981
var (
80-
client=requireAuth()
82+
client=requireAuth(*user)
8183
name=args[0]
8284
valuestring
8385
errerror
@@ -127,71 +129,78 @@ coder secrets create aws-credentials --from-file ./credentials.json`,
127129
returncmd
128130
}
129131

130-
funclistSecrets(cmd*cobra.Command,_ []string)error {
131-
client:=requireAuth()
132+
funclistSecrets(user*string)func(cmd*cobra.Command,_ []string)error {
133+
returnfunc(cmd*cobra.Command,_ []string)error {
134+
client:=requireAuth(*user)
132135

133-
secrets,err:=client.Secrets()
134-
iferr!=nil {
135-
returnxerrors.Errorf("get secrets: %w",err)
136-
}
136+
secrets,err:=client.Secrets()
137+
iferr!=nil {
138+
returnxerrors.Errorf("get secrets: %w",err)
139+
}
137140

138-
iflen(secrets)<1 {
139-
flog.Info("No secrets found")
140-
returnnil
141-
}
141+
iflen(secrets)<1 {
142+
flog.Info("No secrets found")
143+
returnnil
144+
}
142145

143-
err=xtabwriter.WriteTable(len(secrets),func(iint)interface{} {
144-
s:=secrets[i]
145-
s.Value="******"// value is omitted from bulk responses
146-
returns
147-
})
148-
iferr!=nil {
149-
returnxerrors.Errorf("write table of secrets: %w",err)
146+
err=xtabwriter.WriteTable(len(secrets),func(iint)interface{} {
147+
s:=secrets[i]
148+
s.Value="******"// value is omitted from bulk responses
149+
returns
150+
})
151+
iferr!=nil {
152+
returnxerrors.Errorf("write table of secrets: %w",err)
153+
}
154+
returnnil
150155
}
151-
returnnil
152156
}
153157

154-
funcviewSecret(_*cobra.Command,args []string)error {
155-
var (
156-
client=requireAuth()
157-
name=args[0]
158-
)
159-
ifname=="" {
160-
returnxerrors.New("[name] is a required argument")
161-
}
158+
funcmakeViewSecret(user*string)func(cmd*cobra.Command,args []string)error {
159+
returnfunc (_*cobra.Command,args []string)error {
160+
var (
161+
client=requireAuth(*user)
162+
name=args[0]
163+
)
164+
ifname=="" {
165+
returnxerrors.New("[name] is a required argument")
166+
}
162167

163-
secret,err:=client.SecretByName(name)
164-
iferr!=nil {
165-
returnxerrors.Errorf("get secret by name: %w",err)
166-
}
168+
secret,err:=client.SecretByName(name)
169+
iferr!=nil {
170+
returnxerrors.Errorf("get secret by name: %w",err)
171+
}
167172

168-
_,err=fmt.Fprintln(os.Stdout,secret.Value)
169-
iferr!=nil {
170-
returnxerrors.Errorf("write secret value: %w",err)
171-
}
172-
returnnil
173+
_,err=fmt.Fprintln(os.Stdout,secret.Value)
174+
iferr!=nil {
175+
returnxerrors.Errorf("write secret value: %w",err)
176+
}
177+
returnnil
178+
}
173179
}
174180

175-
funcremoveSecrets(_*cobra.Command,args []string)error {
176-
var (
177-
client=requireAuth()
178-
)
179-
iflen(args)<1 {
180-
returnxerrors.New("[...secret_name] is a required argument")
181-
}
181+
funcmakeRemoveSecrets(user*string)func(c*cobra.Command,args []string)error {
182+
returnfunc (_*cobra.Command,args []string)error {
183+
var (
184+
client=requireAuth(*user)
185+
)
186+
iflen(args)<1 {
187+
returnxerrors.New("[...secret_name] is a required argument")
188+
}
182189

183-
errorSeen:=false
184-
for_,n:=rangeargs {
185-
err:=client.DeleteSecretByName(n)
186-
iferr!=nil {
187-
flog.Error("failed to delete secret %q: %v",n,err)
188-
errorSeen=true
189-
}else {
190-
flog.Success("successfully deleted secret %q",n)
190+
errorSeen:=false
191+
for_,n:=rangeargs {
192+
err:=client.DeleteSecretByName(n)
193+
iferr!=nil {
194+
flog.Error("failed to delete secret %q: %v",n,err)
195+
errorSeen=true
196+
}else {
197+
flog.Success("successfully deleted secret %q",n)
198+
}
191199
}
200+
iferrorSeen {
201+
os.Exit(1)
202+
}
203+
returnnil
192204
}
193-
iferrorSeen {
194-
os.Exit(1)
195-
}
196-
returnnil
197205
}
206+

‎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/spf13/cobra"
@@ -94,7 +95,7 @@ func sendResizeEvents(ctx context.Context, termfd uintptr, process wsep.Process)
9495

9596
funcrunCommand(ctx context.Context,envNamestring,commandstring,args []string)error {
9697
var (
97-
entClient=requireAuth()
98+
entClient=requireAuth(entclient.Me)
9899
)
99100
env,err:=findEnv(entClient,envName)
100101
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/spf13/cobra"
1314
"golang.org/x/xerrors"
@@ -51,7 +52,7 @@ func makeRunSync(init *bool) func(cmd *cobra.Command, args []string) error {
5152
remote=args[1]
5253
)
5354

54-
entClient:=requireAuth()
55+
entClient:=requireAuth(entclient.Me)
5556

5657
info,err:=os.Stat(local)
5758
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/spf13/cobra"
1415
"golang.org/x/xerrors"
@@ -147,7 +148,7 @@ func makeCreateDevURL() *cobra.Command {
147148
ifurlname!=""&&!devURLNameValidRx.MatchString(urlname) {
148149
returnxerrors.New("update devurl: name must be < 64 chars in length, begin with a letter and only contain letters or digits.")
149150
}
150-
entClient:=requireAuth()
151+
entClient:=requireAuth(entclient.Me)
151152

152153
env,err:=findEnv(entClient,envName)
153154
iferr!=nil {
@@ -213,7 +214,7 @@ func removeDevURL(cmd *cobra.Command, args []string) error {
213214
returnxerrors.Errorf("validate port: %w",err)
214215
}
215216

216-
entClient:=requireAuth()
217+
entClient:=requireAuth(entclient.Me)
217218
env,err:=findEnv(entClient,envName)
218219
iferr!=nil {
219220
returnerr
@@ -240,7 +241,7 @@ func removeDevURL(cmd *cobra.Command, args []string) error {
240241

241242
// urlList returns the list of active devURLs from the cemanager.
242243
funcurlList(envNamestring) ([]DevURL,error) {
243-
entClient:=requireAuth()
244+
entClient:=requireAuth(entclient.Me)
244245
env,err:=findEnv(entClient,envName)
245246
iferr!=nil {
246247
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/spf13/cobra"
910
"golang.org/x/xerrors"
@@ -31,7 +32,7 @@ coder users ls -o json | jq .[] | jq -r .email`,
3132

3233
funclistUsers(outputFmt*string)func(cmd*cobra.Command,args []string)error {
3334
returnfunc(cmd*cobra.Command,args []string)error {
34-
entClient:=requireAuth()
35+
entClient:=requireAuth(entclient.Me)
3536

3637
users,err:=entClient.Users()
3738
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