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

Commitc3bf516

Browse files
committed
move to coderd.go
1 parent9472717 commitc3bf516

File tree

6 files changed

+65
-75
lines changed

6 files changed

+65
-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

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

‎coderd/coderd_test.go

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

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

7+
"github.com/stretchr/testify/assert"
68
"go.uber.org/goleak"
9+
10+
"github.com/coder/coder/coderd"
711
)
812

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

‎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