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

Commit51f2225

Browse files
committed
move to coderd.go
1 parent0835ecc commit51f2225

File tree

6 files changed

+64
-75
lines changed

6 files changed

+64
-75
lines changed

‎coderd/coderd.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package coderd
22

33
import (
4+
"fmt"
45
"net/http"
56
"net/url"
7+
"strings"
68
"sync"
79
"time"
810

@@ -197,3 +199,37 @@ type api struct {
197199
websocketWaitMutex sync.Mutex
198200
websocketWaitGroup sync.WaitGroup
199201
}
202+
203+
constwebsocketCloseMaxLen=123
204+
205+
// fmtWebsocketCloseMsg formats a websocket close message and ensures it is
206+
// truncated to the maximum allowed length.
207+
funcFmtWebsocketCloseMsg(formatstring,vars...any)string {
208+
msg:=fmt.Sprintf(format,vars...)
209+
210+
// Cap msg length at 123 bytes. nhooyr/websocket only allows close messages
211+
// of this length.
212+
iflen(msg)>websocketCloseMaxLen {
213+
// truncateString safely truncates a string to a maximum size of byteLen. It
214+
// writes whole runes until a single rune would increase the string size above
215+
// byteLen.
216+
truncateString:=func(strstring,byteLenint)string {
217+
builder:= strings.Builder{}
218+
builder.Grow(byteLen)
219+
220+
for_,char:=rangestr {
221+
ifbuilder.Len()+len(string(char))>byteLen {
222+
break
223+
}
224+
225+
_,_=builder.WriteRune(char)
226+
}
227+
228+
returnbuilder.String()
229+
}
230+
231+
returntruncateString(msg,websocketCloseMaxLen)
232+
}
233+
234+
returnmsg
235+
}

‎coderd/coderd_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
11
package coderd_test
22

33
import (
4+
"strings"
45
"testing"
56

7+
"github.com/coder/coder/coderd"
8+
"github.com/stretchr/testify/assert"
69
"go.uber.org/goleak"
710
)
811

912
funcTestMain(m*testing.M) {
1013
goleak.VerifyTestMain(m)
1114
}
15+
16+
funcTestFmtWebsocketCloseMsg(t*testing.T) {
17+
t.Parallel()
18+
19+
t.Run("TruncateSingleByteCharacters",func(t*testing.T) {
20+
t.Parallel()
21+
22+
msg:=strings.Repeat("d",255)
23+
trunc:=coderd.FmtWebsocketCloseMsg(msg)
24+
assert.LessOrEqual(t,len(trunc),123)
25+
})
26+
27+
t.Run("TruncateMultiByteCharacters",func(t*testing.T) {
28+
t.Parallel()
29+
30+
msg:=strings.Repeat("こんにちは",10)
31+
trunc:=coderd.FmtWebsocketCloseMsg(msg)
32+
assert.LessOrEqual(t,len(trunc),123)
33+
})
34+
}

‎coderd/provisionerdaemons.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (api *api) provisionerDaemonsListen(rw http.ResponseWriter, r *http.Request
5656
Provisioners: []database.ProvisionerType{database.ProvisionerTypeEcho,database.ProvisionerTypeTerraform},
5757
})
5858
iferr!=nil {
59-
_=conn.Close(websocket.StatusInternalError,fmtWebsocketCloseMsg("insert provisioner daemon: %s",err))
59+
_=conn.Close(websocket.StatusInternalError,FmtWebsocketCloseMsg("insert provisioner daemon: %s",err))
6060
return
6161
}
6262

@@ -67,7 +67,7 @@ func (api *api) provisionerDaemonsListen(rw http.ResponseWriter, r *http.Request
6767
config.LogOutput=io.Discard
6868
session,err:=yamux.Server(websocket.NetConn(r.Context(),conn,websocket.MessageBinary),config)
6969
iferr!=nil {
70-
_=conn.Close(websocket.StatusInternalError,fmtWebsocketCloseMsg("multiplex server: %s",err))
70+
_=conn.Close(websocket.StatusInternalError,FmtWebsocketCloseMsg("multiplex server: %s",err))
7171
return
7272
}
7373
mux:=drpcmux.New()
@@ -80,13 +80,13 @@ func (api *api) provisionerDaemonsListen(rw http.ResponseWriter, r *http.Request
8080
Logger:api.Logger.Named(fmt.Sprintf("provisionerd-%s",daemon.Name)),
8181
})
8282
iferr!=nil {
83-
_=conn.Close(websocket.StatusInternalError,fmtWebsocketCloseMsg("drpc register provisioner daemon: %s",err))
83+
_=conn.Close(websocket.StatusInternalError,FmtWebsocketCloseMsg("drpc register provisioner daemon: %s",err))
8484
return
8585
}
8686
server:=drpcserver.New(mux)
8787
err=server.Serve(r.Context(),session)
8888
iferr!=nil {
89-
_=conn.Close(websocket.StatusInternalError,fmtWebsocketCloseMsg("serve: %s",err))
89+
_=conn.Close(websocket.StatusInternalError,FmtWebsocketCloseMsg("serve: %s",err))
9090
return
9191
}
9292
_=conn.Close(websocket.StatusGoingAway,"")

‎coderd/workspaceresources.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func (api *api) workspaceResourceDial(rw http.ResponseWriter, r *http.Request) {
108108
Pubsub:api.Pubsub,
109109
})
110110
iferr!=nil {
111-
_=conn.Close(websocket.StatusInternalError,fmtWebsocketCloseMsg("serve: %s",err))
111+
_=conn.Close(websocket.StatusInternalError,FmtWebsocketCloseMsg("serve: %s",err))
112112
return
113113
}
114114
}

‎coderd/ws.go

Lines changed: 0 additions & 40 deletions
This file was deleted.

‎coderd/ws_test.go

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp