Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit 9974e45

Browse files
committed
Export entclient to coder-sdk
1 parent ff28df3 commit 9974e45

20 files changed

+86
-80
lines changed

Diff for: ci/integration/users_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"testing"
66

77
"cdr.dev/coder-cli/ci/tcli"
8-
"cdr.dev/coder-cli/internal/entclient"
8+
"cdr.dev/coder-cli/coder-sdk"
99
"cdr.dev/slog/sloggers/slogtest/assert"
1010
)
1111

@@ -20,7 +20,7 @@ func TestUsers(t *testing.T) {
2020

2121
headlessLogin(ctx, t, c)
2222

23-
var user entclient.User
23+
var user coder.User
2424
c.Run(ctx, `coder users ls --output json | jq -c '.[] | select( .username == "charlie")'`).Assert(t,
2525
tcli.Success(),
2626
tcli.StdoutJSONUnmarshal(&user),

Diff for: internal/entclient/activity.go renamed to coder-sdk/activity.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"context"

Diff for: internal/entclient/client.go renamed to coder-sdk/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"net/http"

Diff for: internal/entclient/devurl.go renamed to coder-sdk/devurl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"context"

Diff for: internal/entclient/env.go renamed to coder-sdk/env.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"context"
@@ -34,12 +34,12 @@ type Environment struct {
3434
AutoOffThreshold xjson.Duration `json:"auto_off_threshold" tab:"-"`
3535
}
3636

37-
// EnvironmentsInOrganization gets the list of environments owned by the authenticated user
38-
func (c Client) EnvironmentsInOrganization(ctx context.Context, user *User, org *Org) ([]Environment, error) {
37+
// EnvironmentsByOrganization gets the list of environments owned by the given user.
38+
func (c Client) EnvironmentsByOrganization(ctx context.Context, userID, orgID string) ([]Environment, error) {
3939
var envs []Environment
4040
err := c.requestBody(
4141
ctx,
42-
http.MethodGet, "/api/orgs/"+org.ID+"/members/"+user.ID+"/environments",
42+
http.MethodGet, "/api/orgs/"+orgID+"/members/"+userID+"/environments",
4343
nil,
4444
&envs,
4545
)

Diff for: internal/entclient/error.go renamed to coder-sdk/error.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"encoding/json"

Diff for: internal/entclient/org.go renamed to coder-sdk/org.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
package entclient
1+
package coder
22

3-
import "context"
3+
import (
4+
"context"
5+
"net/http"
6+
)
47

58
// Org describes an Organization in Coder
69
type Org struct {
@@ -12,6 +15,6 @@ type Org struct {
1215
// Orgs gets all Organizations
1316
func (c Client) Orgs(ctx context.Context) ([]Org, error) {
1417
var os []Org
15-
err := c.requestBody(ctx, "GET", "/api/orgs", nil, &os)
18+
err := c.requestBody(ctx, http.MethodGet, "/api/orgs", nil, &os)
1619
return os, err
1720
}

Diff for: internal/entclient/request.go renamed to coder-sdk/request.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"bytes"
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"context"
@@ -17,38 +17,42 @@ type Secret struct {
1717
}
1818

1919
// Secrets gets all secrets for the given user
20-
func (c *Client) Secrets(ctx context.Context, user *User) ([]Secret, error) {
20+
func (c *Client) Secrets(ctx context.Context, userID string) ([]Secret, error) {
2121
var secrets []Secret
22-
err := c.requestBody(ctx, http.MethodGet, "/api/users/"+user.ID+"/secrets", nil, &secrets)
22+
err := c.requestBody(ctx, http.MethodGet, "/api/users/"+userID+"/secrets", nil, &secrets)
2323
return secrets, err
2424
}
2525

26-
func (c *Client) secretByID(ctx context.Context, id string, user *User) (*Secret, error) {
26+
// SecretWithValueByName gets the Coder secret with its value by its name.
27+
func (c *Client) SecretWithValueByName(ctx context.Context, name, userID string) (*Secret, error) {
28+
s, err := c.SecretByName(ctx, name, userID)
29+
if err != nil {
30+
return nil, err
31+
}
2732
var secret Secret
28-
err := c.requestBody(ctx, http.MethodGet, "/api/users/"+user.ID+"/secrets/"+id, nil, &secret)
33+
err = c.requestBody(ctx, http.MethodGet, "/api/users/"+userID+"/secrets/"+s.ID, nil, &secret)
2934
return &secret, err
3035
}
3136

32-
func (c *Client) secretNameToID(ctx context.Context, name string, user *User) (id string, _ error) {
33-
secrets, err := c.Secrets(ctx, user)
34-
if err != nil {
35-
return "", err
36-
}
37-
for _, s := range secrets {
38-
if s.Name == name {
39-
return s.ID, nil
40-
}
41-
}
42-
return "", ErrNotFound
37+
// SecretWithValueByID gets the Coder secret with its value by the secret_id.
38+
func (c *Client) SecretWithValueByID(ctx context.Context, id, userID string) (*Secret, error) {
39+
var secret Secret
40+
err := c.requestBody(ctx, http.MethodGet, "/api/users/"+userID+"/secrets/"+id, nil, &secret)
41+
return &secret, err
4342
}
4443

4544
// SecretByName gets a secret object by name
46-
func (c *Client) SecretByName(ctx context.Context, name string, user *User) (*Secret, error) {
47-
id, err := c.secretNameToID(ctx, name, user)
45+
func (c *Client) SecretByName(ctx context.Context, name, userID string) (*Secret, error) {
46+
secrets, err := c.Secrets(ctx, userID)
4847
if err != nil {
4948
return nil, err
5049
}
51-
return c.secretByID(ctx, id, user)
50+
for _, s := range secrets {
51+
if s.Name == name {
52+
return &s, nil
53+
}
54+
}
55+
return nil, ErrNotFound
5256
}
5357

5458
// InsertSecretReq describes the request body for creating a new secret
@@ -65,11 +69,11 @@ func (c *Client) InsertSecret(ctx context.Context, user *User, req InsertSecretR
6569
}
6670

6771
// DeleteSecretByName deletes the authenticated users secret with the given name
68-
func (c *Client) DeleteSecretByName(ctx context.Context, name string, user *User) error {
69-
id, err := c.secretNameToID(ctx, name, user)
72+
func (c *Client) DeleteSecretByName(ctx context.Context, name, userID string) error {
73+
secret, err := c.SecretByName(ctx, name, userID)
7074
if err != nil {
7175
return err
7276
}
73-
_, err = c.request(ctx, http.MethodDelete, "/api/users/"+user.ID+"/secrets/"+id, nil)
77+
_, err = c.request(ctx, http.MethodDelete, "/api/users/"+userID+"/secrets/"+secret.ID, nil)
7478
return err
7579
}

Diff for: internal/entclient/users.go renamed to coder-sdk/users.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package entclient
1+
package coder
22

33
import (
44
"context"

Diff for: internal/activity/pusher.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"time"
66

7-
"cdr.dev/coder-cli/internal/entclient"
7+
"cdr.dev/coder-cli/coder-sdk"
88
"golang.org/x/time/rate"
99

1010
"go.coder.com/flog"
@@ -18,12 +18,12 @@ type Pusher struct {
1818
envID string
1919
source string
2020

21-
client *entclient.Client
21+
client *coder.Client
2222
rate *rate.Limiter
2323
}
2424

2525
// NewPusher instantiates a new instance of Pusher
26-
func NewPusher(c *entclient.Client, envID, source string) *Pusher {
26+
func NewPusher(c *coder.Client, envID, source string) *Pusher {
2727
return &Pusher{
2828
envID: envID,
2929
source: source,

Diff for: internal/cmd/auth.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@ package cmd
33
import (
44
"net/url"
55

6+
"cdr.dev/coder-cli/coder-sdk"
67
"cdr.dev/coder-cli/internal/config"
7-
"cdr.dev/coder-cli/internal/entclient"
88
"golang.org/x/xerrors"
99

1010
"go.coder.com/flog"
1111
)
1212

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

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

38-
client := &entclient.Client{
38+
client := &coder.Client{
3939
BaseURL: u,
4040
Token: sessionToken,
4141
}

Diff for: internal/cmd/ceapi.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@ package cmd
33
import (
44
"context"
55

6+
"cdr.dev/coder-cli/coder-sdk"
67
"golang.org/x/xerrors"
78

89
"go.coder.com/flog"
9-
10-
"cdr.dev/coder-cli/internal/entclient"
1110
)
1211

1312
// Helpers for working with the Coder Enterprise API.
1413

1514
// userOrgs gets a list of orgs the user is apart of.
16-
func userOrgs(user *entclient.User, orgs []entclient.Org) []entclient.Org {
17-
var uo []entclient.Org
15+
func userOrgs(user *coder.User, orgs []coder.Org) []coder.Org {
16+
var uo []coder.Org
1817
outer:
1918
for _, org := range orgs {
2019
for _, member := range org.Members {
@@ -29,7 +28,7 @@ outer:
2928
}
3029

3130
// getEnvs returns all environments for the user.
32-
func getEnvs(ctx context.Context, client *entclient.Client, email string) ([]entclient.Environment, error) {
31+
func getEnvs(ctx context.Context, client *coder.Client, email string) ([]coder.Environment, error) {
3332
user, err := client.UserByEmail(ctx, email)
3433
if err != nil {
3534
return nil, xerrors.Errorf("get user: %+v", err)
@@ -42,10 +41,10 @@ func getEnvs(ctx context.Context, client *entclient.Client, email string) ([]ent
4241

4342
orgs = userOrgs(user, orgs)
4443

45-
var allEnvs []entclient.Environment
44+
var allEnvs []coder.Environment
4645

4746
for _, org := range orgs {
48-
envs, err := client.EnvironmentsInOrganization(ctx, user, &org)
47+
envs, err := client.EnvironmentsByOrganization(ctx, user.ID, org.ID)
4948
if err != nil {
5049
return nil, xerrors.Errorf("get envs for %v: %+v", org.Name, err)
5150
}
@@ -58,7 +57,7 @@ func getEnvs(ctx context.Context, client *entclient.Client, email string) ([]ent
5857
}
5958

6059
// findEnv returns a single environment by name (if it exists.)
61-
func findEnv(ctx context.Context, client *entclient.Client, envName, userEmail string) (*entclient.Environment, error) {
60+
func findEnv(ctx context.Context, client *coder.Client, envName, userEmail string) (*coder.Environment, error) {
6261
envs, err := getEnvs(ctx, client, userEmail)
6362
if err != nil {
6463
return nil, xerrors.Errorf("get environments: %w", err)

Diff for: internal/cmd/configssh.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import (
1212
"strings"
1313
"time"
1414

15+
"cdr.dev/coder-cli/coder-sdk"
1516
"cdr.dev/coder-cli/internal/config"
16-
"cdr.dev/coder-cli/internal/entclient"
1717
"github.com/spf13/cobra"
1818
"golang.org/x/xerrors"
1919
)
@@ -85,19 +85,19 @@ func configSSH(configpath *string, remove *bool) func(cmd *cobra.Command, _ []st
8585
return nil
8686
}
8787

88-
entClient := requireAuth()
88+
client := requireAuth()
8989

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

95-
user, err := entClient.Me(cmd.Context())
95+
user, err := client.Me(cmd.Context())
9696
if err != nil {
9797
return xerrors.Errorf("fetch username: %w", err)
9898
}
9999

100-
envs, err := getEnvs(cmd.Context(), entClient, entclient.Me)
100+
envs, err := getEnvs(cmd.Context(), client, coder.Me)
101101
if err != nil {
102102
return err
103103
}
@@ -122,7 +122,7 @@ func configSSH(configpath *string, remove *bool) func(cmd *cobra.Command, _ []st
122122
if err != nil {
123123
return xerrors.Errorf("write new configurations to ssh config file %q: %w", *configpath, err)
124124
}
125-
err = writeSSHKey(ctx, entClient)
125+
err = writeSSHKey(ctx, client)
126126
if err != nil {
127127
return xerrors.Errorf("fetch and write ssh key: %w", err)
128128
}
@@ -139,15 +139,15 @@ var (
139139
privateKeyFilepath = filepath.Join(os.Getenv("HOME"), ".ssh", "coder_enterprise")
140140
)
141141

142-
func writeSSHKey(ctx context.Context, client *entclient.Client) error {
142+
func writeSSHKey(ctx context.Context, client *coder.Client) error {
143143
key, err := client.SSHKey(ctx)
144144
if err != nil {
145145
return err
146146
}
147147
return ioutil.WriteFile(privateKeyFilepath, []byte(key.PrivateKey), 0400)
148148
}
149149

150-
func makeNewConfigs(userName string, envs []entclient.Environment, startToken, startMsg, endToken string) (string, error) {
150+
func makeNewConfigs(userName string, envs []coder.Environment, startToken, startMsg, endToken string) (string, error) {
151151
hostname, err := configuredHostname()
152152
if err != nil {
153153
return "", nil

Diff for: internal/cmd/envs.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"encoding/json"
55
"os"
66

7-
"cdr.dev/coder-cli/internal/entclient"
7+
"cdr.dev/coder-cli/coder-sdk"
88
"cdr.dev/coder-cli/internal/x/xtabwriter"
99
"github.com/spf13/cobra"
1010
"golang.org/x/xerrors"
@@ -20,7 +20,7 @@ func makeEnvsCommand() *cobra.Command {
2020
Short: "Interact with Coder environments",
2121
Long: "Perform operations on the Coder environments owned by the active user.",
2222
}
23-
cmd.PersistentFlags().StringVar(&user, "user", entclient.Me, "Specify the user whose resources to target")
23+
cmd.PersistentFlags().StringVar(&user, "user", coder.Me, "Specify the user whose resources to target")
2424

2525
lsCmd := &cobra.Command{
2626
Use: "ls",

0 commit comments

Comments
 (0)