From 1df8ee22e76b8ad2e12c1b666904d986a564c8b8 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 9 Nov 2022 10:42:12 +0000 Subject: [PATCH] fix: Protect codersdk.Client SessionToken so it can be updated This feature is used by the coder agent to exchange a new token. By protecting the SessionToken via mutex we ensure there are no data races when accessing it. --- cli/agent.go | 6 ++--- cli/clitest/clitest.go | 2 +- cli/configssh_test.go | 2 +- cli/login.go | 4 ++-- cli/login_test.go | 6 ++--- cli/logout_test.go | 2 +- cli/root.go | 4 ++-- cli/speedtest_test.go | 2 +- cli/ssh_test.go | 6 ++--- coderd/coderdtest/coderdtest.go | 4 ++-- coderd/gitsshkey_test.go | 2 +- coderd/templates_test.go | 2 +- coderd/userauth_test.go | 10 ++++---- coderd/users_test.go | 8 +++---- coderd/workspaceagents_test.go | 20 ++++++++-------- coderd/workspaceapps_test.go | 12 +++++----- coderd/workspaces_test.go | 2 +- codersdk/client.go | 28 +++++++++++++++++++---- codersdk/client_internal_test.go | 2 +- codersdk/provisionerdaemons.go | 2 +- codersdk/workspaceagents.go | 8 +++---- enterprise/coderd/replicas_test.go | 6 ++--- enterprise/coderd/workspaceagents_test.go | 2 +- loadtest/agentconn/run_test.go | 2 +- loadtest/workspacebuild/run_test.go | 2 +- 25 files changed, 82 insertions(+), 64 deletions(-) diff --git a/cli/agent.go b/cli/agent.go index 2356050adce2b..0aa54a13b9416 100644 --- a/cli/agent.go +++ b/cli/agent.go @@ -97,7 +97,7 @@ func workspaceAgent() *cobra.Command { if err != nil { return xerrors.Errorf("CODER_AGENT_TOKEN must be set for token auth: %w", err) } - client.SessionToken = token + client.SetSessionToken(token) case "google-instance-identity": // This is *only* done for testing to mock client authentication. // This will never be set in a production scenario. @@ -153,13 +153,13 @@ func workspaceAgent() *cobra.Command { Logger: logger, ExchangeToken: func(ctx context.Context) (string, error) { if exchangeToken == nil { - return client.SessionToken, nil + return client.SessionToken(), nil } resp, err := exchangeToken(ctx) if err != nil { return "", err } - client.SessionToken = resp.SessionToken + client.SetSessionToken(resp.SessionToken) return resp.SessionToken, nil }, EnvironmentVariables: map[string]string{ diff --git a/cli/clitest/clitest.go b/cli/clitest/clitest.go index b1fb85e4733a5..d2f426793e17f 100644 --- a/cli/clitest/clitest.go +++ b/cli/clitest/clitest.go @@ -43,7 +43,7 @@ func NewWithSubcommands( // SetupConfig applies the URL and SessionToken of the client to the config. func SetupConfig(t *testing.T, client *codersdk.Client, root config.Root) { - err := root.Session().Write(client.SessionToken) + err := root.Session().Write(client.SessionToken()) require.NoError(t, err) err = root.URL().Write(client.URL.String()) require.NoError(t, err) diff --git a/cli/configssh_test.go b/cli/configssh_test.go index 98791f3031e33..66fb02daf5e83 100644 --- a/cli/configssh_test.go +++ b/cli/configssh_test.go @@ -105,7 +105,7 @@ func TestConfigSSH(t *testing.T) { workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), diff --git a/cli/login.go b/cli/login.go index 2955983ad9ec7..7c9fd04550189 100644 --- a/cli/login.go +++ b/cli/login.go @@ -214,7 +214,7 @@ func login() *cobra.Command { Text: "Paste your token here:", Secret: true, Validate: func(token string) error { - client.SessionToken = token + client.SetSessionToken(token) _, err := client.User(cmd.Context(), codersdk.Me) if err != nil { return xerrors.New("That's not a valid token!") @@ -228,7 +228,7 @@ func login() *cobra.Command { } // Login to get user data - verify it is OK before persisting - client.SessionToken = sessionToken + client.SetSessionToken(sessionToken) resp, err := client.User(cmd.Context(), codersdk.Me) if err != nil { return xerrors.Errorf("get user: %w", err) diff --git a/cli/login_test.go b/cli/login_test.go index a68344f906e5f..fd2b5145ba4d9 100644 --- a/cli/login_test.go +++ b/cli/login_test.go @@ -148,7 +148,7 @@ func TestLogin(t *testing.T) { }() pty.ExpectMatch("Paste your token here:") - pty.WriteLine(client.SessionToken) + pty.WriteLine(client.SessionToken()) pty.ExpectMatch("Welcome to Coder") <-doneChan }) @@ -183,11 +183,11 @@ func TestLogin(t *testing.T) { t.Parallel() client := coderdtest.New(t, nil) coderdtest.CreateFirstUser(t, client) - root, cfg := clitest.New(t, "login", client.URL.String(), "--token", client.SessionToken) + root, cfg := clitest.New(t, "login", client.URL.String(), "--token", client.SessionToken()) err := root.Execute() require.NoError(t, err) sessionFile, err := cfg.Session().Read() require.NoError(t, err) - require.Equal(t, client.SessionToken, sessionFile) + require.Equal(t, client.SessionToken(), sessionFile) }) } diff --git a/cli/logout_test.go b/cli/logout_test.go index b715989627aef..cef16c21b7016 100644 --- a/cli/logout_test.go +++ b/cli/logout_test.go @@ -209,7 +209,7 @@ func login(t *testing.T, pty *ptytest.PTY) config.Root { }() pty.ExpectMatch("Paste your token here:") - pty.WriteLine(client.SessionToken) + pty.WriteLine(client.SessionToken()) pty.ExpectMatch("Welcome to Coder") <-doneChan diff --git a/cli/root.go b/cli/root.go index 4bce0a3d2655c..c68adfff99587 100644 --- a/cli/root.go +++ b/cli/root.go @@ -306,7 +306,7 @@ func CreateClient(cmd *cobra.Command) (*codersdk.Client, error) { if err != nil { return nil, err } - client.SessionToken = token + client.SetSessionToken(token) return client, nil } @@ -347,7 +347,7 @@ func createAgentClient(cmd *cobra.Command) (*codersdk.Client, error) { return nil, err } client := codersdk.New(serverURL) - client.SessionToken = token + client.SetSessionToken(token) return client, nil } diff --git a/cli/speedtest_test.go b/cli/speedtest_test.go index cf93eb0b95a6b..9ef342310e068 100644 --- a/cli/speedtest_test.go +++ b/cli/speedtest_test.go @@ -22,7 +22,7 @@ func TestSpeedtest(t *testing.T) { } client, workspace, agentToken := setupWorkspaceForAgent(t) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = agentToken + agentClient.SetSessionToken(agentToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), diff --git a/cli/ssh_test.go b/cli/ssh_test.go index 7f81f52d8b965..2d9048f84a7f2 100644 --- a/cli/ssh_test.go +++ b/cli/ssh_test.go @@ -87,7 +87,7 @@ func TestSSH(t *testing.T) { pty.ExpectMatch("Waiting") agentClient := codersdk.New(client.URL) - agentClient.SessionToken = agentToken + agentClient.SetSessionToken(agentToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), @@ -107,7 +107,7 @@ func TestSSH(t *testing.T) { // Run this async so the SSH command has to wait for // the build and agent to connect! agentClient := codersdk.New(client.URL) - agentClient.SessionToken = agentToken + agentClient.SetSessionToken(agentToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), @@ -174,7 +174,7 @@ func TestSSH(t *testing.T) { client, workspace, agentToken := setupWorkspaceForAgent(t) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = agentToken + agentClient.SetSessionToken(agentToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index a24a3f896c44d..0fe4b5a340d2e 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -360,7 +360,7 @@ func CreateFirstUser(t *testing.T, client *codersdk.Client) codersdk.CreateFirst Password: FirstUserParams.Password, }) require.NoError(t, err) - client.SessionToken = login.SessionToken + client.SetSessionToken(login.SessionToken) return resp } @@ -400,7 +400,7 @@ func createAnotherUserRetry(t *testing.T, client *codersdk.Client, organizationI require.NoError(t, err) other := codersdk.New(client.URL) - other.SessionToken = login.SessionToken + other.SetSessionToken(login.SessionToken) if len(roles) > 0 { // Find the roles for the org vs the site wide roles diff --git a/coderd/gitsshkey_test.go b/coderd/gitsshkey_test.go index b1a60b6039c60..67fa7122bf4f1 100644 --- a/coderd/gitsshkey_test.go +++ b/coderd/gitsshkey_test.go @@ -134,7 +134,7 @@ func TestAgentGitSSHKey(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() diff --git a/coderd/templates_test.go b/coderd/templates_test.go index 787bec3db0d2f..bb602d0b05406 100644 --- a/coderd/templates_test.go +++ b/coderd/templates_test.go @@ -601,7 +601,7 @@ func TestTemplateMetrics(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Logger: slogtest.Make(t, nil), Client: agentClient, diff --git a/coderd/userauth_test.go b/coderd/userauth_test.go index d21808052e885..2f9751cc61b05 100644 --- a/coderd/userauth_test.go +++ b/coderd/userauth_test.go @@ -275,7 +275,7 @@ func TestUserOAuth2Github(t *testing.T) { resp := oauth2Callback(t, client) require.Equal(t, http.StatusTemporaryRedirect, resp.StatusCode) - client.SessionToken = authCookieValue(resp.Cookies()) + client.SetSessionToken(authCookieValue(resp.Cookies())) user, err := client.User(context.Background(), "me") require.NoError(t, err) require.Equal(t, "kyle@coder.com", user.Email) @@ -485,14 +485,14 @@ func TestUserOIDC(t *testing.T) { ctx, _ := testutil.Context(t) if tc.Username != "" { - client.SessionToken = authCookieValue(resp.Cookies()) + client.SetSessionToken(authCookieValue(resp.Cookies())) user, err := client.User(ctx, "me") require.NoError(t, err) require.Equal(t, tc.Username, user.Username) } if tc.AvatarURL != "" { - client.SessionToken = authCookieValue(resp.Cookies()) + client.SetSessionToken(authCookieValue(resp.Cookies())) user, err := client.User(ctx, "me") require.NoError(t, err) require.Equal(t, tc.AvatarURL, user.AvatarURL) @@ -520,7 +520,7 @@ func TestUserOIDC(t *testing.T) { ctx, _ := testutil.Context(t) - client.SessionToken = authCookieValue(resp.Cookies()) + client.SetSessionToken(authCookieValue(resp.Cookies())) user, err := client.User(ctx, "me") require.NoError(t, err) require.Equal(t, "jon", user.Username) @@ -534,7 +534,7 @@ func TestUserOIDC(t *testing.T) { resp = oidcCallback(t, client, code) assert.Equal(t, http.StatusTemporaryRedirect, resp.StatusCode) - client.SessionToken = authCookieValue(resp.Cookies()) + client.SetSessionToken(authCookieValue(resp.Cookies())) user, err = client.User(ctx, "me") require.NoError(t, err) require.True(t, strings.HasPrefix(user.Username, "jon-"), "username %q should have prefix %q", user.Username, "jon-") diff --git a/coderd/users_test.go b/coderd/users_test.go index e708380f99710..8a5478810fd4c 100644 --- a/coderd/users_test.go +++ b/coderd/users_test.go @@ -280,7 +280,7 @@ func TestPostLogin(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - split := strings.Split(client.SessionToken, "-") + split := strings.Split(client.SessionToken(), "-") key, err := client.GetAPIKey(ctx, admin.UserID.String(), split[0]) require.NoError(t, err, "fetch login key") require.Equal(t, int64(86400), key.LifetimeSeconds, "default should be 86400") @@ -356,7 +356,7 @@ func TestPostLogout(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - keyID := strings.Split(client.SessionToken, "-")[0] + keyID := strings.Split(client.SessionToken(), "-")[0] apiKey, err := client.GetAPIKey(ctx, admin.UserID.String(), keyID) require.NoError(t, err) require.Equal(t, keyID, apiKey.ID, "API key should exist in the database") @@ -676,7 +676,7 @@ func TestUpdateUserPassword(t *testing.T) { }) require.NoError(t, err) - client.SessionToken = resp.SessionToken + client.SetSessionToken(resp.SessionToken) // Trying to get an API key should fail since all keys are deleted // on password change. @@ -1359,7 +1359,7 @@ func TestWorkspacesByUser(t *testing.T) { require.NoError(t, err) newUserClient := codersdk.New(client.URL) - newUserClient.SessionToken = auth.SessionToken + newUserClient.SetSessionToken(auth.SessionToken) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) coderdtest.AwaitTemplateVersionJob(t, client, version.ID) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) diff --git a/coderd/workspaceagents_test.go b/coderd/workspaceagents_test.go index 3e62311335fd1..f81b8efe81525 100644 --- a/coderd/workspaceagents_test.go +++ b/coderd/workspaceagents_test.go @@ -113,7 +113,7 @@ func TestWorkspaceAgentListen(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent").Leveled(slog.LevelDebug), @@ -205,7 +205,7 @@ func TestWorkspaceAgentListen(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, stopBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) _, err = agentClient.ListenWorkspaceAgent(ctx) require.Error(t, err) @@ -245,7 +245,7 @@ func TestWorkspaceAgentTailnet(t *testing.T) { daemonCloser.Close() agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent").Leveled(slog.LevelDebug), @@ -311,7 +311,7 @@ func TestWorkspaceAgentPTY(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent").Leveled(slog.LevelDebug), @@ -408,7 +408,7 @@ func TestWorkspaceAgentListeningPorts(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent").Leveled(slog.LevelDebug), @@ -670,7 +670,7 @@ func TestWorkspaceAgentAppHealth(t *testing.T) { defer cancel() agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) metadata, err := agentClient.WorkspaceAgentMetadata(ctx) require.NoError(t, err) @@ -754,7 +754,7 @@ func TestWorkspaceAgentsGitAuth(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) _, err := agentClient.WorkspaceAgentGitAuth(context.Background(), "github.com", false) var apiError *codersdk.Error require.ErrorAs(t, err, &apiError) @@ -799,7 +799,7 @@ func TestWorkspaceAgentsGitAuth(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) token, err := agentClient.WorkspaceAgentGitAuth(context.Background(), "github.com/asd/asd", false) require.NoError(t, err) require.True(t, strings.HasSuffix(token.URL, fmt.Sprintf("/gitauth/%s", "github"))) @@ -879,7 +879,7 @@ func TestWorkspaceAgentsGitAuth(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) token, err := agentClient.WorkspaceAgentGitAuth(context.Background(), "github.com/asd/asd", false) require.NoError(t, err) @@ -920,7 +920,7 @@ func gitAuthCallback(t *testing.T, id string, client *codersdk.Client) *http.Res }) req.AddCookie(&http.Cookie{ Name: codersdk.SessionTokenKey, - Value: client.SessionToken, + Value: client.SessionToken(), }) res, err := client.HTTPClient.Do(req) require.NoError(t, err) diff --git a/coderd/workspaceapps_test.go b/coderd/workspaceapps_test.go index 2ce4ff4c439d9..2605a740c699c 100644 --- a/coderd/workspaceapps_test.go +++ b/coderd/workspaceapps_test.go @@ -197,7 +197,7 @@ func createWorkspaceWithApps(t *testing.T, client *codersdk.Client, orgID uuid.U coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) if appHost != "" { metadata, err := agentClient.WorkspaceAgentMetadata(context.Background()) require.NoError(t, err) @@ -350,7 +350,7 @@ func TestWorkspaceApplicationAuth(t *testing.T) { // Get the current user and API key. user, err := client.User(ctx, codersdk.Me) require.NoError(t, err) - currentAPIKey, err := client.GetAPIKey(ctx, firstUser.UserID.String(), strings.Split(client.SessionToken, "-")[0]) + currentAPIKey, err := client.GetAPIKey(ctx, firstUser.UserID.String(), strings.Split(client.SessionToken(), "-")[0]) require.NoError(t, err) // Try to load the application without authentication. @@ -418,7 +418,7 @@ func TestWorkspaceApplicationAuth(t *testing.T) { // Verify the API key permissions appClient := codersdk.New(client.URL) - appClient.SessionToken = apiKey + appClient.SetSessionToken(apiKey) appClient.HTTPClient.CheckRedirect = client.HTTPClient.CheckRedirect appClient.HTTPClient.Transport = client.HTTPClient.Transport @@ -893,7 +893,7 @@ func TestAppSharing(t *testing.T) { Password: password, }) require.NoError(t, err) - clientInOtherOrg.SessionToken = loginRes.SessionToken + clientInOtherOrg.SetSessionToken(loginRes.SessionToken) clientInOtherOrg.HTTPClient.CheckRedirect = func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse } @@ -916,14 +916,14 @@ func TestAppSharing(t *testing.T) { // If the client has a session token, we also want to check that a // scoped key works. clients := []*codersdk.Client{client} - if client.SessionToken != "" { + if client.SessionToken() != "" { token, err := client.CreateToken(ctx, codersdk.Me, codersdk.CreateTokenRequest{ Scope: codersdk.APIKeyScopeApplicationConnect, }) require.NoError(t, err) scopedClient := codersdk.New(client.URL) - scopedClient.SessionToken = token.Key + scopedClient.SetSessionToken(token.Key) scopedClient.HTTPClient.CheckRedirect = client.HTTPClient.CheckRedirect clients = append(clients, scopedClient) diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index d3de52fd2f623..0fbc9b973ed04 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -1400,7 +1400,7 @@ func TestWorkspaceWatcher(t *testing.T) { wait() agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent").Leveled(slog.LevelDebug), diff --git a/codersdk/client.go b/codersdk/client.go index 58c18cd29625a..ff0df7a76d61a 100644 --- a/codersdk/client.go +++ b/codersdk/client.go @@ -11,6 +11,7 @@ import ( "net/http" "net/url" "strings" + "sync" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/propagation" @@ -56,9 +57,11 @@ func New(serverURL *url.URL) *Client { // Client is an HTTP caller for methods to the Coder API. // @typescript-ignore Client type Client struct { - HTTPClient *http.Client - SessionToken string - URL *url.URL + mu sync.RWMutex // Protects following. + sessionToken string + + HTTPClient *http.Client + URL *url.URL // Logger can be provided to log requests. Request method, URL and response // status code will be logged by default. @@ -77,12 +80,27 @@ type Client struct { PropagateTracing bool } +func (c *Client) SessionToken() string { + c.mu.RLock() + defer c.mu.RUnlock() + return c.sessionToken +} + +func (c *Client) SetSessionToken(token string) { + c.mu.Lock() + defer c.mu.Unlock() + c.sessionToken = token +} + func (c *Client) Clone() *Client { + c.mu.Lock() + defer c.mu.Unlock() + hc := *c.HTTPClient u := *c.URL return &Client{ HTTPClient: &hc, - SessionToken: c.SessionToken, + sessionToken: c.sessionToken, URL: &u, Logger: c.Logger, LogBodies: c.LogBodies, @@ -147,7 +165,7 @@ func (c *Client) Request(ctx context.Context, method, path string, body interfac if err != nil { return nil, xerrors.Errorf("create request: %w", err) } - req.Header.Set(SessionCustomHeader, c.SessionToken) + req.Header.Set(SessionCustomHeader, c.SessionToken()) if c.BypassRatelimits { req.Header.Set(BypassRatelimitHeader, "true") } diff --git a/codersdk/client_internal_test.go b/codersdk/client_internal_test.go index c855db734a499..f48467718a761 100644 --- a/codersdk/client_internal_test.go +++ b/codersdk/client_internal_test.go @@ -58,7 +58,7 @@ func Test_Client(t *testing.T) { u, err := url.Parse(s.URL) require.NoError(t, err) client := New(u) - client.SessionToken = token + client.SetSessionToken(token) client.BypassRatelimits = true logBuf := bytes.NewBuffer(nil) diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index fb88e42aecb8d..823a80e025794 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -121,7 +121,7 @@ func (c *Client) provisionerJobLogsAfter(ctx context.Context, path string, after } jar.SetCookies(followURL, []*http.Cookie{{ Name: SessionTokenKey, - Value: c.SessionToken, + Value: c.SessionToken(), }}) httpClient := &http.Client{ Jar: jar, diff --git a/codersdk/workspaceagents.go b/codersdk/workspaceagents.go index bf15820f57cd3..22a3ee35f97f1 100644 --- a/codersdk/workspaceagents.go +++ b/codersdk/workspaceagents.go @@ -319,7 +319,7 @@ func (c *Client) ListenWorkspaceAgent(ctx context.Context) (net.Conn, error) { } jar.SetCookies(coordinateURL, []*http.Cookie{{ Name: SessionTokenKey, - Value: c.SessionToken, + Value: c.SessionToken(), }}) httpClient := &http.Client{ Jar: jar, @@ -385,7 +385,7 @@ func (c *Client) DialWorkspaceAgent(ctx context.Context, agentID uuid.UUID, opti } jar.SetCookies(coordinateURL, []*http.Cookie{{ Name: SessionTokenKey, - Value: c.SessionToken, + Value: c.SessionToken(), }}) httpClient := &http.Client{ Jar: jar, @@ -508,7 +508,7 @@ func (c *Client) WorkspaceAgentReconnectingPTY(ctx context.Context, agentID, rec } jar.SetCookies(serverURL, []*http.Cookie{{ Name: SessionTokenKey, - Value: c.SessionToken, + Value: c.SessionToken(), }}) httpClient := &http.Client{ Jar: jar, @@ -569,7 +569,7 @@ func (c *Client) AgentReportStats( jar.SetCookies(serverURL, []*http.Cookie{{ Name: SessionTokenKey, - Value: c.SessionToken, + Value: c.SessionToken(), }}) httpClient := &http.Client{ diff --git a/enterprise/coderd/replicas_test.go b/enterprise/coderd/replicas_test.go index 7a3e130cf7770..31b468f3427f7 100644 --- a/enterprise/coderd/replicas_test.go +++ b/enterprise/coderd/replicas_test.go @@ -36,7 +36,7 @@ func TestReplicas(t *testing.T) { Pubsub: pubsub, }, }) - secondClient.SessionToken = firstClient.SessionToken + secondClient.SetSessionToken(firstClient.SessionToken()) ents, err := secondClient.Entitlements(context.Background()) require.NoError(t, err) require.Len(t, ents.Errors, 1) @@ -67,7 +67,7 @@ func TestReplicas(t *testing.T) { Pubsub: pubsub, }, }) - secondClient.SessionToken = firstClient.SessionToken + secondClient.SetSessionToken(firstClient.SessionToken()) replicas, err := secondClient.Replicas(context.Background()) require.NoError(t, err) require.Len(t, replicas, 2) @@ -110,7 +110,7 @@ func TestReplicas(t *testing.T) { TLSCertificates: certificates, }, }) - secondClient.SessionToken = firstClient.SessionToken + secondClient.SetSessionToken(firstClient.SessionToken()) replicas, err := secondClient.Replicas(context.Background()) require.NoError(t, err) require.Len(t, replicas, 2) diff --git a/enterprise/coderd/workspaceagents_test.go b/enterprise/coderd/workspaceagents_test.go index 5f84b6f60a10f..5965c702105ba 100644 --- a/enterprise/coderd/workspaceagents_test.go +++ b/enterprise/coderd/workspaceagents_test.go @@ -120,7 +120,7 @@ func setupWorkspaceAgent(t *testing.T, client *codersdk.Client, user codersdk.Cr }, }, } - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), diff --git a/loadtest/agentconn/run_test.go b/loadtest/agentconn/run_test.go index 77bf85633e741..e732e2484e1fb 100644 --- a/loadtest/agentconn/run_test.go +++ b/loadtest/agentconn/run_test.go @@ -254,7 +254,7 @@ func setupRunnerTest(t *testing.T) (client *codersdk.Client, agentID uuid.UUID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).Named("agent"), diff --git a/loadtest/workspacebuild/run_test.go b/loadtest/workspacebuild/run_test.go index 438c188fd83e7..53de1db44fdcf 100644 --- a/loadtest/workspacebuild/run_test.go +++ b/loadtest/workspacebuild/run_test.go @@ -129,7 +129,7 @@ func Test_Runner(t *testing.T) { i := i + 1 agentClient := codersdk.New(client.URL) - agentClient.SessionToken = authToken + agentClient.SetSessionToken(authToken) agentCloser := agent.New(agent.Options{ Client: agentClient, Logger: slogtest.Make(t, nil).