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

Commit5c2b9a5

Browse files
authored
chore: refactor codersdk.Client creation with functional args (#19759)
Adds ClientBuilder to build a codersdk.Client. This is a safer pattern than the current usage which modifies properties of the Client after creating it, opening us up to race conditions.Refactors agentsdk to use the builder.
1 parent562ef68 commit5c2b9a5

File tree

2 files changed

+69
-13
lines changed

2 files changed

+69
-13
lines changed

‎codersdk/agentsdk/agentsdk.go‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,16 @@ var ExternalLogSourceID = uuid.MustParse("3b579bf4-1ed8-4b99-87a8-e9a1e3410410")
4545
// @typescript-ignore SessionTokenSetup
4646
typeSessionTokenSetupfunc(client*codersdk.Client)RefreshableSessionTokenProvider
4747

48-
funcNew(serverURL*url.URL,setupSessionTokenSetup)*Client {
49-
c:=codersdk.New(serverURL)
50-
provider:=setup(c)
51-
c.SessionTokenProvider=provider
48+
// New creates a new *Client which can be used by an agent to connect to Coderd. Use a SessionTokenSetup function
49+
// to define the session token provider for the Client. This overrides the SessionTokenProvider on the underlying
50+
// `*codersdk.Client`, so any `codersdk.ClientOptions` passed as `opts` should not set this property.
51+
funcNew(serverURL*url.URL,setupSessionTokenSetup,opts...codersdk.ClientOption)*Client {
52+
varproviderRefreshableSessionTokenProvider
53+
opts=append(opts,func(c*codersdk.Client) {
54+
provider=setup(c)
55+
c.SessionTokenProvider=provider
56+
})
57+
c:=codersdk.New(serverURL,opts...)
5258
return&Client{
5359
SDK:c,
5460
RefreshableSessionTokenProvider:provider,

‎codersdk/client.go‎

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,19 @@ var loggableMimeTypes = map[string]struct{}{
105105
"text/html": {},
106106
}
107107

108+
typeClientOptionfunc(*Client)
109+
108110
// New creates a Coder client for the provided URL.
109-
funcNew(serverURL*url.URL)*Client {
110-
return&Client{
111+
funcNew(serverURL*url.URL,opts...ClientOption)*Client {
112+
client:=&Client{
111113
URL:serverURL,
112114
HTTPClient:&http.Client{},
113115
SessionTokenProvider:FixedSessionTokenProvider{},
114116
}
117+
for_,opt:=rangeopts {
118+
opt(client)
119+
}
120+
returnclient
115121
}
116122

117123
// Client is an HTTP caller for methods to the Coder API.
@@ -129,15 +135,18 @@ type Client struct {
129135

130136
// PlainLogger may be set to log HTTP traffic in a human-readable form.
131137
// It uses the LogBodies option.
138+
// Deprecated: Use WithPlainLogger to set this.
132139
PlainLogger io.Writer
133140

134141
// Trace can be enabled to propagate tracing spans to the Coder API.
135142
// This is useful for tracking a request end-to-end.
143+
// Deprecated: Use WithTrace to set this.
136144
Tracebool
137145

138146
// DisableDirectConnections forces any connections to workspaces to go
139147
// through DERP, regardless of the BlockEndpoints setting on each
140148
// connection.
149+
// Deprecated: Use WithDisableDirectConnections to set this.
141150
DisableDirectConnectionsbool
142151
}
143152

@@ -149,6 +158,7 @@ func (c *Client) Logger() slog.Logger {
149158
}
150159

151160
// SetLogger sets the logger for the client.
161+
// Deprecated: Use WithLogger to set this.
152162
func (c*Client)SetLogger(logger slog.Logger) {
153163
c.mu.Lock()
154164
deferc.mu.Unlock()
@@ -163,6 +173,7 @@ func (c *Client) LogBodies() bool {
163173
}
164174

165175
// SetLogBodies sets whether to log request and response bodies.
176+
// Deprecated: Use WithLogBodies to set this.
166177
func (c*Client)SetLogBodies(logBodiesbool) {
167178
c.mu.Lock()
168179
deferc.mu.Unlock()
@@ -177,16 +188,11 @@ func (c *Client) SessionToken() string {
177188
}
178189

179190
// SetSessionToken sets a fixed token for the client.
180-
// Deprecated: Create a new client instead of changing the token after creation.
191+
// Deprecated: Create a new clientusing WithSessionTokeninstead of changing the token after creation.
181192
func (c*Client)SetSessionToken(tokenstring) {
182-
c.SetSessionTokenProvider(FixedSessionTokenProvider{SessionToken:token})
183-
}
184-
185-
// SetSessionTokenProvider sets the session token provider for the client.
186-
func (c*Client)SetSessionTokenProvider(providerSessionTokenProvider) {
187193
c.mu.Lock()
188194
deferc.mu.Unlock()
189-
c.SessionTokenProvider=provider
195+
c.SessionTokenProvider=FixedSessionTokenProvider{SessionToken:token}
190196
}
191197

192198
funcprefixLines(prefix,s []byte) []byte {
@@ -641,3 +647,47 @@ func (h *HeaderTransport) CloseIdleConnections() {
641647
tr.CloseIdleConnections()
642648
}
643649
}
650+
651+
// ClientOptions
652+
653+
funcWithSessionToken(tokenstring)ClientOption {
654+
returnfunc(c*Client) {
655+
c.SessionTokenProvider=FixedSessionTokenProvider{SessionToken:token}
656+
}
657+
}
658+
659+
funcWithHTTPClient(httpClient*http.Client)ClientOption {
660+
returnfunc(c*Client) {
661+
c.HTTPClient=httpClient
662+
}
663+
}
664+
665+
funcWithLogger(logger slog.Logger)ClientOption {
666+
returnfunc(c*Client) {
667+
c.logger=logger
668+
}
669+
}
670+
671+
funcWithLogBodies()ClientOption {
672+
returnfunc(c*Client) {
673+
c.logBodies=true
674+
}
675+
}
676+
677+
funcWithPlainLogger(plainLogger io.Writer)ClientOption {
678+
returnfunc(c*Client) {
679+
c.PlainLogger=plainLogger
680+
}
681+
}
682+
683+
funcWithTrace()ClientOption {
684+
returnfunc(c*Client) {
685+
c.Trace=true
686+
}
687+
}
688+
689+
funcWithDisableDirectConnections()ClientOption {
690+
returnfunc(c*Client) {
691+
c.DisableDirectConnections=true
692+
}
693+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp