server: Go 服务器(REST+WSS 网关+JWT+Argon2+配对+素材直链+任务状态机);修复并发下线 send-on-closed-channel、下发查询 SQL 优先级、配对码原子占用、上传体积上限、JWT 默认密钥告警
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package ws
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/coder/websocket"
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"everypublish/server/internal/auth"
|
||||
"everypublish/server/internal/config"
|
||||
)
|
||||
|
||||
// HandleBrowser 浏览器实时通道:?token=JWT 鉴权,只读订阅工作空间事件
|
||||
func HandleBrowser(cfg *config.Config, hub *Hub) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
claims, err := auth.ParseAccess(cfg.JWTSecret, c.Query("token"))
|
||||
if err != nil {
|
||||
c.JSON(401, gin.H{"code": 1002, "message": "令牌无效"})
|
||||
return
|
||||
}
|
||||
conn, err := websocket.Accept(c.Writer, c.Request, &websocket.AcceptOptions{InsecureSkipVerify: true})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
sess := &Conn{
|
||||
ID: randHex(16),
|
||||
Kind: "browser",
|
||||
WSID: claims.WorkspaceID,
|
||||
ws: conn,
|
||||
send: make(chan []byte, 64),
|
||||
}
|
||||
hub.RegisterBrowser(sess)
|
||||
go sess.writeLoop()
|
||||
log.Printf("[ws] browser session %s online (workspace %d)", sess.ID, claims.WorkspaceID)
|
||||
defer func() {
|
||||
hub.UnregisterBrowser(sess)
|
||||
log.Printf("[ws] browser session %s offline", sess.ID)
|
||||
}()
|
||||
for {
|
||||
if _, _, err = conn.Read(c.Request.Context()); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user