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

Remove fatal calls from sdk client creation #123

Merged
merged 1 commit into from
Sep 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 4 additions & 13 deletions internal/cmd/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,24 @@ import (

"cdr.dev/coder-cli/coder-sdk"
"cdr.dev/coder-cli/internal/config"

"go.coder.com/flog"
)

// requireAuth exits the process with a nonzero exit code if the user is not authenticated to make requests.
func requireAuth() *coder.Client {
client, err := newClient()
if err != nil {
flog.Fatal("%s", err)
}
return client
}
var errNeedLogin = xerrors.New("failed to read session credentials: did you run \"coder login\"?")

func newClient() (*coder.Client, error) {
sessionToken, err := config.Session.Read()
if err != nil {
return nil, xerrors.Errorf("read session: %w (did you run coder login?)", err)
return nil, errNeedLogin
}

rawURL, err := config.URL.Read()
if err != nil {
return nil, xerrors.Errorf("read url: %w (did you run coder login?)", err)
return nil, errNeedLogin
}

u, err := url.Parse(rawURL)
if err != nil {
return nil, xerrors.Errorf("url misformatted: %w (try runing coder login)", err)
return nil, xerrors.Errorf("url misformatted: %w try runing \"coder login\" with a valid URL", err)
}

return &coder.Client{
Expand Down
5 changes: 4 additions & 1 deletion internal/cmd/configssh.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,10 @@ func configSSH(configpath *string, remove *bool) func(cmd *cobra.Command, _ []st
return nil
}

client := requireAuth()
client, err := newClient()
if err != nil {
return err
}

sshAvailable := isSSHAvailable(ctx)
if !sshAvailable {
Expand Down
7 changes: 5 additions & 2 deletions internal/cmd/envs.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ func makeEnvsCommand() *cobra.Command {
Short: "list all environments owned by the active user",
Long: "List all Coder environments owned by the active user.",
RunE: func(cmd *cobra.Command, args []string) error {
entClient := requireAuth()
envs, err := getEnvs(cmd.Context(), entClient, user)
client, err := newClient()
if err != nil {
return err
}
envs, err := getEnvs(cmd.Context(), client, user)
if err != nil {
return err
}
Expand Down
30 changes: 20 additions & 10 deletions internal/cmd/secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,14 @@ coder secrets create aws-credentials --from-file ./credentials.json`,
},
RunE: func(cmd *cobra.Command, args []string) error {
var (
client = requireAuth()
name = args[0]
value string
err error
name = args[0]
value string
err error
)
client, err := newClient()
if err != nil {
return err
}
if fromLiteral != "" {
value = fromLiteral
} else if fromFile != "" {
Expand Down Expand Up @@ -136,7 +139,10 @@ coder secrets create aws-credentials --from-file ./credentials.json`,

func listSecrets(userEmail *string) func(cmd *cobra.Command, _ []string) error {
return func(cmd *cobra.Command, _ []string) error {
client := requireAuth()
client, err := newClient()
if err != nil {
return err
}
user, err := client.UserByEmail(cmd.Context(), *userEmail)
if err != nil {
return xerrors.Errorf("get user %q by email: %w", *userEmail, err)
Expand Down Expand Up @@ -167,9 +173,12 @@ func listSecrets(userEmail *string) func(cmd *cobra.Command, _ []string) error {
func makeViewSecret(userEmail *string) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var (
client = requireAuth()
name = args[0]
name = args[0]
)
client, err := newClient()
if err != nil {
return err
}
user, err := client.UserByEmail(cmd.Context(), *userEmail)
if err != nil {
return xerrors.Errorf("get user %q by email: %w", *userEmail, err)
Expand All @@ -190,9 +199,10 @@ func makeViewSecret(userEmail *string) func(cmd *cobra.Command, args []string) e

func makeRemoveSecrets(userEmail *string) func(c *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var (
client = requireAuth()
)
client, err := newClient()
if err != nil {
return err
}
user, err := client.UserByEmail(cmd.Context(), *userEmail)
if err != nil {
return xerrors.Errorf("get user %q by email: %w", *userEmail, err)
Expand Down
12 changes: 7 additions & 5 deletions internal/cmd/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,11 @@ func sendResizeEvents(ctx context.Context, termFD uintptr, process wsep.Process)
}

func runCommand(ctx context.Context, envName, command string, args []string) error {
entClient := requireAuth()

env, err := findEnv(ctx, entClient, envName, coder.Me)
client, err := newClient()
if err != nil {
return err
}
env, err := findEnv(ctx, client, envName, coder.Me)
if err != nil {
return xerrors.Errorf("find environment: %w", err)
}
Expand All @@ -125,7 +127,7 @@ func runCommand(ctx context.Context, envName, command string, args []string) err
ctx, cancel := context.WithCancel(ctx)
defer cancel()

conn, err := entClient.DialWsep(ctx, env)
conn, err := client.DialWsep(ctx, env)
if err != nil {
return xerrors.Errorf("dial websocket: %w", err)
}
Expand Down Expand Up @@ -165,7 +167,7 @@ func runCommand(ctx context.Context, envName, command string, args []string) err
stdin := process.Stdin()
defer func() { _ = stdin.Close() }() // Best effort.

ap := activity.NewPusher(entClient, env.ID, sshActivityName)
ap := activity.NewPusher(client, env.ID, sshActivityName)
wr := ap.Writer(stdin)
if _, err := io.Copy(wr, os.Stdin); err != nil {
cancel()
Expand Down
15 changes: 9 additions & 6 deletions internal/cmd/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ func makeRunSync(init *bool) func(cmd *cobra.Command, args []string) error {
remote = args[1]
)

entClient := requireAuth()
client, err := newClient()
if err != nil {
return err
}

info, err := os.Stat(local)
if err != nil {
Expand All @@ -64,29 +67,29 @@ func makeRunSync(init *bool) func(cmd *cobra.Command, args []string) error {

remoteTokens := strings.SplitN(remote, ":", 2)
if len(remoteTokens) != 2 {
flog.Fatal("remote misformatted")
return xerrors.New("remote misformatted")
}
var (
envName = remoteTokens[0]
remoteDir = remoteTokens[1]
)

env, err := findEnv(cmd.Context(), entClient, envName, coder.Me)
env, err := findEnv(cmd.Context(), client, envName, coder.Me)
if err != nil {
return err
}

absLocal, err := filepath.Abs(local)
if err != nil {
flog.Fatal("make abs path out of %v: %v", local, absLocal)
return xerrors.Errorf("make abs path out of %s, %s: %w", local, absLocal, err)
}

s := sync.Sync{
Init: *init,
Env: *env,
RemoteDir: remoteDir,
LocalDir: absLocal,
Client: entClient,
Client: client,
}

localVersion := rsyncVersion()
Expand All @@ -95,7 +98,7 @@ func makeRunSync(init *bool) func(cmd *cobra.Command, args []string) error {
if rsyncErr != nil {
flog.Info("Unable to determine remote rsync version. Proceeding cautiously.")
} else if localVersion != remoteVersion {
flog.Fatal("rsync protocol mismatch: local = %v, remote = %v", localVersion, rsyncErr)
return xerrors.Errorf("rsync protocol mismatch: local = %s, remote = %s", localVersion, remoteVersion)
}

for err == nil || err == sync.ErrRestartSync {
Expand Down
29 changes: 19 additions & 10 deletions internal/cmd/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,12 @@ func makeCreateDevURL() *cobra.Command {
if urlname != "" && !devURLNameValidRx.MatchString(urlname) {
return xerrors.New("update devurl: name must be < 64 chars in length, begin with a letter and only contain letters or digits.")
}
entClient := requireAuth()
client, err := newClient()
if err != nil {
return err
}

env, err := findEnv(cmd.Context(), entClient, envName, coder.Me)
env, err := findEnv(cmd.Context(), client, envName, coder.Me)
if err != nil {
return err
}
Expand All @@ -167,13 +170,13 @@ func makeCreateDevURL() *cobra.Command {
urlID, found := devURLID(portNum, urls)
if found {
flog.Info("Updating devurl for port %v", port)
err := entClient.UpdateDevURL(cmd.Context(), env.ID, urlID, portNum, urlname, access)
err := client.UpdateDevURL(cmd.Context(), env.ID, urlID, portNum, urlname, access)
if err != nil {
return xerrors.Errorf("update DevURL: %w", err)
}
} else {
flog.Info("Adding devurl for port %v", port)
err := entClient.InsertDevURL(cmd.Context(), env.ID, portNum, urlname, access)
err := client.InsertDevURL(cmd.Context(), env.ID, portNum, urlname, access)
if err != nil {
return xerrors.Errorf("insert DevURL: %w", err)
}
Expand Down Expand Up @@ -218,8 +221,11 @@ func removeDevURL(cmd *cobra.Command, args []string) error {
return xerrors.Errorf("validate port: %w", err)
}

entClient := requireAuth()
env, err := findEnv(cmd.Context(), entClient, envName, coder.Me)
client, err := newClient()
if err != nil {
return err
}
env, err := findEnv(cmd.Context(), client, envName, coder.Me)
if err != nil {
return err
}
Expand All @@ -236,22 +242,25 @@ func removeDevURL(cmd *cobra.Command, args []string) error {
return xerrors.Errorf("No devurl found for port %v", port)
}

if err := entClient.DelDevURL(cmd.Context(), env.ID, urlID); err != nil {
if err := client.DelDevURL(cmd.Context(), env.ID, urlID); err != nil {
return xerrors.Errorf("delete DevURL: %w", err)
}
return nil
}

// urlList returns the list of active devURLs from the cemanager.
func urlList(ctx context.Context, envName string) ([]DevURL, error) {
entClient := requireAuth()
env, err := findEnv(ctx, entClient, envName, coder.Me)
client, err := newClient()
if err != nil {
return nil, err
}
env, err := findEnv(ctx, client, envName, coder.Me)
if err != nil {
return nil, err
}

reqString := "%s/api/environments/%s/devurls?session_token=%s"
reqURL := fmt.Sprintf(reqString, entClient.BaseURL, env.ID, entClient.Token)
reqURL := fmt.Sprintf(reqString, client.BaseURL, env.ID, client.Token)

resp, err := http.Get(reqURL)
if err != nil {
Expand Down
7 changes: 5 additions & 2 deletions internal/cmd/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ coder users ls -o json | jq .[] | jq -r .email`,

func listUsers(outputFmt *string) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
entClient := requireAuth()
client, err := newClient()
if err != nil {
return err
}

users, err := entClient.Users(cmd.Context())
users, err := client.Users(cmd.Context())
if err != nil {
return xerrors.Errorf("get users: %w", err)
}
Expand Down