From 07ae6c02ef7f1d49274b3b3f07d67fd669e494a5 Mon Sep 17 00:00:00 2001 From: whm <973418690@qq.com> Date: Thu, 26 Mar 2026 15:04:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=B9=E5=B9=95=EF=BC=9A=E5=B9=BF=E6=92=AD?= =?UTF-8?q?=E5=B8=A6=E5=8D=8A=E6=98=BE=E7=94=A8=E6=88=B7=E5=90=8D=EF=BC=88?= =?UTF-8?q?=E5=89=8D=E4=B8=A4=E5=AD=97+***=EF=BC=89=EF=BC=8C=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E5=B1=95=E7=A4=BA=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- server/handlers/site_auth.go | 13 +++++++++++++ server/pkg/weblive/danmaku.go | 10 ++++++++-- web/src/views/LiveRoom.vue | 15 +++++++++++---- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/server/handlers/site_auth.go b/server/handlers/site_auth.go index bb331d6..460c64f 100644 --- a/server/handlers/site_auth.go +++ b/server/handlers/site_auth.go @@ -61,6 +61,19 @@ func SiteDanmakuTokenValid(tokenStr string) bool { return ok } +// MaskSiteUsernameForDanmaku 弹幕展示半匿名:1 字为「a***」,2 字及以上为前两字 + ***(如 aa***、ab***) +func MaskSiteUsernameForDanmaku(username string) string { + username = strings.TrimSpace(username) + if username == "" { + return "***" + } + runes := []rune(username) + if len(runes) == 1 { + return string(runes[0]) + "***" + } + return string(runes[:2]) + "***" +} + type siteRegisterInput struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` diff --git a/server/pkg/weblive/danmaku.go b/server/pkg/weblive/danmaku.go index 4d9c149..fd1c15d 100644 --- a/server/pkg/weblive/danmaku.go +++ b/server/pkg/weblive/danmaku.go @@ -28,9 +28,14 @@ func writeDanmakuJSON(ws *websocket.Conn, v any) error { return ws.WriteMessage(websocket.TextMessage, b) } -// handleDanmakuWS 弹幕:收 JSON {"text":"..."};未带有效 token 仅可收广播不可发。广播 {"type":"dm","text","ts"},不落库 +// handleDanmakuWS 弹幕:收 JSON {"text":"..."};未带有效 token 仅可收广播不可发。广播 {"type":"dm","text","from","ts"},不落库 func handleDanmakuWS(c *gin.Context) { - canSend := handlers.SiteDanmakuTokenValid(c.Query("token")) + claims, tokenOK := handlers.ParseSiteClaims(c.Query("token")) + canSend := tokenOK + fromDisplay := "***" + if tokenOK && claims != nil { + fromDisplay = handlers.MaskSiteUsernameForDanmaku(claims.Username) + } ws, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { @@ -72,6 +77,7 @@ func handleDanmakuWS(c *gin.Context) { out, err := json.Marshal(map[string]interface{}{ "type": "dm", "text": text, + "from": fromDisplay, "ts": time.Now().UnixMilli(), }) if err != nil { diff --git a/web/src/views/LiveRoom.vue b/web/src/views/LiveRoom.vue index a4c12c7..872d36e 100644 --- a/web/src/views/LiveRoom.vue +++ b/web/src/views/LiveRoom.vue @@ -32,7 +32,7 @@ class="live-dm-line" :style="{ top: d.top + '%' }" > - {{ d.text }} + {{ d.from }}:{{ d.text }}