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

Commit 5bdd9fe

Browse files
authored
chore: expose API Token and BaseURL (#252)
This adds accessors to retrieve the Client's active Session Token and Base URL.
1 parent 2d520dc commit 5bdd9fe

File tree

4 files changed

+47
-16
lines changed

4 files changed

+47
-16
lines changed

coder-sdk/client.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,13 @@ type DefaultClient struct {
116116
// token is the API Token credential.
117117
token string
118118
}
119+
120+
// Token returns the API Token used to authenticate.
121+
func (c *DefaultClient) Token() string {
122+
return c.token
123+
}
124+
125+
// BaseURL returns the BaseURL configured for this Client.
126+
func (c *DefaultClient) BaseURL() url.URL {
127+
return *c.baseURL
128+
}

coder-sdk/client_test.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func TestAuthentication(t *testing.T) {
1818
t.Parallel()
1919

2020
const token = "g4mtIPUaKt-pPl9Q0xmgKs7acSypHt4Jf"
21+
2122
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2223
gotToken := r.Header.Get("Session-Token")
2324
require.Equal(t, token, gotToken, "token does not match")
@@ -37,28 +38,35 @@ func TestAuthentication(t *testing.T) {
3738
})
3839
require.NoError(t, err, "failed to create coder.Client")
3940

41+
require.Equal(t, token, client.Token(), "expected Token to match")
42+
require.EqualValues(t, *u, client.BaseURL(), "expected BaseURL to match")
43+
4044
_, err = client.APIVersion(context.Background())
4145
require.NoError(t, err, "failed to get API version information")
4246
}
4347

4448
func TestPasswordAuthentication(t *testing.T) {
4549
t.Parallel()
4650

51+
const email = "[email protected]"
52+
const password = "coder4all"
53+
const token = "g4mtIPUaKt-pPl9Q0xmgKs7acSypHt4Jf"
54+
4755
mux := http.NewServeMux()
4856
mux.HandleFunc("/auth/basic/login", func(w http.ResponseWriter, r *http.Request) {
4957
require.Equal(t, r.Method, http.MethodPost, "login is a POST")
5058

5159
expected := map[string]interface{}{
52-
"email": "[email protected]",
53-
"password": "coder4all",
60+
"email": email,
61+
"password": password,
5462
}
5563
var request map[string]interface{}
5664
err := json.NewDecoder(r.Body).Decode(&request)
5765
require.NoError(t, err, "error decoding JSON")
5866
require.EqualValues(t, expected, request, "unexpected request data")
5967

6068
response := map[string]interface{}{
61-
"session_token": "g4mtIPUaKt-pPl9Q0xmgKs7acSypHt4Jf",
69+
"session_token": token,
6270
}
6371

6472
w.WriteHeader(http.StatusOK)
@@ -68,11 +76,11 @@ func TestPasswordAuthentication(t *testing.T) {
6876
mux.HandleFunc("/api/v0/users/me", func(w http.ResponseWriter, r *http.Request) {
6977
require.Equal(t, http.MethodGet, r.Method, "Users is a GET")
7078

71-
require.Equal(t, "g4mtIPUaKt-pPl9Q0xmgKs7acSypHt4Jf", r.Header.Get("Session-Token"), "expected session token to match return of login")
79+
require.Equal(t, token, r.Header.Get("Session-Token"), "expected session token to match return of login")
7280

7381
user := map[string]interface{}{
7482
"id": "default",
75-
"email": "[email protected]",
83+
"email": email,
7684
"username": "charlie",
7785
"name": "Charlie Root",
7886
"roles": []coder.Role{coder.SiteAdmin},
@@ -99,14 +107,15 @@ func TestPasswordAuthentication(t *testing.T) {
99107
client, err := coder.NewClient(coder.ClientOptions{
100108
BaseURL: u,
101109
HTTPClient: server.Client(),
102-
103-
Password: "coder4all",
110+
Email: email,
111+
Password: password,
104112
})
105113
require.NoError(t, err, "failed to create Client")
114+
require.Equal(t, token, client.Token(), "expected token to match")
106115

107116
user, err := client.Me(context.Background())
108117
require.NoError(t, err, "failed to get information about current user")
109-
require.Equal(t, "[email protected]", user.Email, "expected test user")
118+
require.Equal(t, email, user.Email, "expected test user")
110119
}
111120

112121
func TestContextRoot(t *testing.T) {

coder-sdk/interface.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,10 @@ type Client interface {
213213

214214
// DeleteWorkspaceProviderByID deletes a workspace provider entity from the Coder control plane.
215215
DeleteWorkspaceProviderByID(ctx context.Context, id string) error
216+
217+
// Token returns the API Token used to authenticate.
218+
Token() string
219+
220+
// BaseURL returns the BaseURL configured for this Client.
221+
BaseURL() url.URL
216222
}

coder-sdk/users_test.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ import (
1717
func TestUsers(t *testing.T) {
1818
t.Parallel()
1919

20+
const username = "root"
21+
const name = "Charlie Root"
22+
2023
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2124
require.Equal(t, http.MethodGet, r.Method, "Users is a GET")
2225
require.Equal(t, "/api/v0/users", r.URL.Path)
@@ -25,8 +28,8 @@ func TestUsers(t *testing.T) {
2528
{
2629
"id": "default",
2730
"email": "[email protected]",
28-
"username": "root",
29-
"name": "Charlie Root",
31+
"username": username,
32+
"name": name,
3033
"roles": []coder.Role{coder.SiteAdmin},
3134
"temporary_password": false,
3235
"login_type": coder.LoginTypeBuiltIn,
@@ -56,20 +59,23 @@ func TestUsers(t *testing.T) {
5659
users, err := client.Users(context.Background())
5760
require.NoError(t, err, "error getting Users")
5861
require.Len(t, users, 1, "users should return a single user")
59-
require.Equal(t, "Charlie Root", users[0].Name)
60-
require.Equal(t, "root", users[0].Username)
62+
require.Equal(t, name, users[0].Name)
63+
require.Equal(t, username, users[0].Username)
6164
}
6265

6366
func TestUserUpdatePassword(t *testing.T) {
6467
t.Parallel()
6568

69+
const oldPassword = "vt9g9rxsptrq"
70+
const newPassword = "wmf39jw2f7pk"
71+
6672
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
6773
require.Equal(t, http.MethodPatch, r.Method, "Users is a PATCH")
6874
require.Equal(t, "/api/v0/users/me", r.URL.Path)
6975

7076
expected := map[string]interface{}{
71-
"old_password": "vt9g9rxsptrq",
72-
"password": "wmf39jw2f7pk",
77+
"old_password": oldPassword,
78+
"password": newPassword,
7379
}
7480
var request map[string]interface{}
7581
err := json.NewDecoder(r.Body).Decode(&request)
@@ -94,8 +100,8 @@ func TestUserUpdatePassword(t *testing.T) {
94100

95101
err = client.UpdateUser(context.Background(), "me", coder.UpdateUserReq{
96102
UserPasswordSettings: &coder.UserPasswordSettings{
97-
OldPassword: "vt9g9rxsptrq",
98-
Password: "wmf39jw2f7pk",
103+
OldPassword: oldPassword,
104+
Password: newPassword,
99105
Temporary: false,
100106
},
101107
})

0 commit comments

Comments
 (0)