From 90e0169eb7afee83f628a62a728b9138418cc430 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 14:35:33 +0800 Subject: [PATCH 01/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 5 +++-- utils/websocket_data/render_data.go | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 86d49b16..45aedd4c 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -452,8 +452,9 @@ func (w *wsConnectItem) sendToInChan(data []byte) { // 格式化为websocket标准返回格式 func (w *wsConnectItem) respondDataFormat(msgType constants.Websocket, data interface{}) []byte { d := websocket_data.DataTransferData{ - T: msgType, - D: data, + T: msgType, + D: data, + OpenDebug: w.debug != nil, } b, _ := json.Marshal(d) return b diff --git a/utils/websocket_data/render_data.go b/utils/websocket_data/render_data.go index bcca7309..22fca565 100644 --- a/utils/websocket_data/render_data.go +++ b/utils/websocket_data/render_data.go @@ -4,8 +4,9 @@ import "fusenapi/constants" // websocket数据交互基本数据类型 type DataTransferData struct { - T constants.Websocket `json:"t"` //消息类型 - D interface{} `json:"d"` //传递的消息 + T constants.Websocket `json:"t"` //消息类型 + D interface{} `json:"d"` //传递的消息 + OpenDebug bool `json:"open_debug"` //是否开启debug } // websocket接受要云渲染处理的数据 From 57e6b0227ffbcf3c605efc624a764af4138af86e Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 14:37:18 +0800 Subject: [PATCH 02/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 6 +++--- utils/websocket_data/render_data.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 45aedd4c..93817c8f 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -452,9 +452,9 @@ func (w *wsConnectItem) sendToInChan(data []byte) { // 格式化为websocket标准返回格式 func (w *wsConnectItem) respondDataFormat(msgType constants.Websocket, data interface{}) []byte { d := websocket_data.DataTransferData{ - T: msgType, - D: data, - OpenDebug: w.debug != nil, + T: msgType, + D: data, + Debug: w.debug != nil, } b, _ := json.Marshal(d) return b diff --git a/utils/websocket_data/render_data.go b/utils/websocket_data/render_data.go index 22fca565..601799f1 100644 --- a/utils/websocket_data/render_data.go +++ b/utils/websocket_data/render_data.go @@ -4,9 +4,9 @@ import "fusenapi/constants" // websocket数据交互基本数据类型 type DataTransferData struct { - T constants.Websocket `json:"t"` //消息类型 - D interface{} `json:"d"` //传递的消息 - OpenDebug bool `json:"open_debug"` //是否开启debug + T constants.Websocket `json:"t"` //消息类型 + D interface{} `json:"d"` //传递的消息 + Debug bool `json:"debug"` //是否开启debug } // websocket接受要云渲染处理的数据 From fbbf6b984fa2b29574e60b6cd49b1c5222455f50 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 14:40:50 +0800 Subject: [PATCH 03/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 7 +++---- utils/websocket_data/base_data.go | 3 ++- utils/websocket_data/render_data.go | 5 ++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 93817c8f..4d851642 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -238,7 +238,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use if isFirefoxBrowser { time.Sleep(time.Second * 1) //兼容下火狐(直接发回去收不到第一条消息:有待研究) } - ws.sendToOutChan(ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, websocket_data.ConnectSuccessMsg{Wid: uniqueId})) + ws.sendToOutChan(ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, websocket_data.ConnectSuccessMsg{Wid: uniqueId, Debug: ws.debug != nil})) //发送累加统计连接书 increaseWebsocketConnectCount() return ws, nil @@ -452,9 +452,8 @@ func (w *wsConnectItem) sendToInChan(data []byte) { // 格式化为websocket标准返回格式 func (w *wsConnectItem) respondDataFormat(msgType constants.Websocket, data interface{}) []byte { d := websocket_data.DataTransferData{ - T: msgType, - D: data, - Debug: w.debug != nil, + T: msgType, + D: data, } b, _ := json.Marshal(d) return b diff --git a/utils/websocket_data/base_data.go b/utils/websocket_data/base_data.go index c3799fa4..2951c394 100644 --- a/utils/websocket_data/base_data.go +++ b/utils/websocket_data/base_data.go @@ -2,7 +2,8 @@ package websocket_data // 基础连接成功返回 type ConnectSuccessMsg struct { - Wid string `json:"wid"` + Wid string `json:"wid"` //websocket连接唯一标识 + Debug bool `json:"debug"` //是否开启debug } // 连接失败 diff --git a/utils/websocket_data/render_data.go b/utils/websocket_data/render_data.go index 601799f1..bcca7309 100644 --- a/utils/websocket_data/render_data.go +++ b/utils/websocket_data/render_data.go @@ -4,9 +4,8 @@ import "fusenapi/constants" // websocket数据交互基本数据类型 type DataTransferData struct { - T constants.Websocket `json:"t"` //消息类型 - D interface{} `json:"d"` //传递的消息 - Debug bool `json:"debug"` //是否开启debug + T constants.Websocket `json:"t"` //消息类型 + D interface{} `json:"d"` //传递的消息 } // websocket接受要云渲染处理的数据 From 79ce15a92a31ea110d6fb6ec33216380e4fa18d5 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 14:59:21 +0800 Subject: [PATCH 04/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 4d851642..13d4a78a 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -239,7 +239,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use time.Sleep(time.Second * 1) //兼容下火狐(直接发回去收不到第一条消息:有待研究) } ws.sendToOutChan(ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, websocket_data.ConnectSuccessMsg{Wid: uniqueId, Debug: ws.debug != nil})) - //发送累加统计连接书 + //发送累加统计连接数 increaseWebsocketConnectCount() return ws, nil } From 379230dd395006294c17651f4e181a5fc6c27f2a Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:05:38 +0800 Subject: [PATCH 05/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 13d4a78a..13deb2b6 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -225,12 +225,6 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use }, debug: userInfo.Debug, } - //先设置下debug(后面要删掉) - ws.debug = &auth.Debug{ - Exp: &userInfo.Exp, - IsCache: 1, - IsAllTemplateTag: 0, - } //保存连接 mapConnPool.Store(uniqueId, ws) //非白板用户,需要为这个用户建立map索引便于通过用户查询 From 6de13a61f76a89ec89aad39cc167cbadccf24c76 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:10:45 +0800 Subject: [PATCH 06/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 13deb2b6..003ddf06 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -323,6 +323,10 @@ func (w *wsConnectItem) heartbeat() { w.close() return } + //查看debug的时间是否过期 + if w.debug != nil && w.debug.Exp != nil && *w.debug.Exp < time.Now().UTC().Unix() { + w.debug = nil + } //发送心跳信息 if err := w.conn.WriteMessage(websocket.PongMessage, nil); err != nil { logx.Error("发送心跳信息异常,关闭连接:", w.uniqueId, err) From 22f9bf7165e2b331d050f3044dd399c7fdfc3914 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:28:47 +0800 Subject: [PATCH 07/10] fix --- .../internal/logic/datatransferlogic.go | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 003ddf06..b7b1261e 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -104,14 +104,28 @@ type wsConnectItem struct { // 请求建立连接,升级websocket协议 func (l *DataTransferLogic) DataTransfer(req *types.DataTransferReq, w http.ResponseWriter, r *http.Request) { //把子协议携带的token设置到标准token头信息中 - token := r.Header.Get("Sec-Websocket-Protocol") + tokens := r.Header.Get("Sec-Websocket-Protocol") oldWid := req.Wid oldWid = strings.Trim(oldWid, " ") //有token是正常用户,无则是白板用户,也可以连接 - if token != "" { + if tokens != "" { + token := "" + debugToken := "" + tokenSlice := strings.Split(tokens, ",") + switch len(tokenSlice) { + case 1: + token = strings.Trim(tokenSlice[0], " ") + case 2: + token = strings.Trim(tokenSlice[0], " ") + debugToken = strings.Trim(tokenSlice[1], " ") + r.Header.Set("Debug-Token", "Bearer "+debugToken) + default: + logx.Error("invalid ws token:", tokens) + return + } r.Header.Set("Authorization", "Bearer "+token) //设置Sec-Websocket-Protocol - upgrader.Subprotocols = []string{token} + upgrader.Subprotocols = []string{tokens} } //判断下是否火狐浏览器(获取浏览器第一条消息返回有收不到的bug需要延迟1秒) userAgent := r.Header.Get("User-Agent") From 8da41cee3b49c3b7306a0c062fa052f813e8149f Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:32:58 +0800 Subject: [PATCH 08/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index b7b1261e..96e05fb3 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -118,7 +118,7 @@ func (l *DataTransferLogic) DataTransfer(req *types.DataTransferReq, w http.Resp case 2: token = strings.Trim(tokenSlice[0], " ") debugToken = strings.Trim(tokenSlice[1], " ") - r.Header.Set("Debug-Token", "Bearer "+debugToken) + r.Header.Set("Debug-Token", debugToken) default: logx.Error("invalid ws token:", tokens) return From 6c94bc29c9407204c073f8260a8717f816d2ceb6 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:38:26 +0800 Subject: [PATCH 09/10] fix --- server/websocket/internal/logic/datatransferlogic.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 96e05fb3..92e264c1 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -284,6 +284,7 @@ func (l *DataTransferLogic) checkAuth(r *http.Request) (isAuth bool, userInfo *a // 解析JWT token,并对空用户进行判断 userInfo, err := basic.ParseJwtToken(r, l.svcCtx) if err != nil { + logx.Error("未授权:", err.Error()) return false, nil } if userInfo.UserId > 0 { From 984134aaec745bbce1415465967dcf08c42f5389 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:44:01 +0800 Subject: [PATCH 10/10] debug toekn --- utils/auth/user.go | 3 +++ utils/auth/user_test.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/utils/auth/user.go b/utils/auth/user.go index 8c9e2ca5..b8b2dee6 100644 --- a/utils/auth/user.go +++ b/utils/auth/user.go @@ -198,6 +198,9 @@ func GenerateBaseJwtTokenUint64(AccessSecret uint64, accessExpire int64, nowSec for i := 0; i < myclaimsType.NumField(); i++ { field := myclaimsType.Field(i) tag := field.Tag.Get("json") + if tag == "exp" || tag == "iat" { + continue + } value := myclaimsValue.Field(i).Interface() // 将字段值赋给 claims 对象的相应键 claims[tag] = value diff --git a/utils/auth/user_test.go b/utils/auth/user_test.go index 8577988f..7280665d 100644 --- a/utils/auth/user_test.go +++ b/utils/auth/user_test.go @@ -19,7 +19,7 @@ func TestCase(t *testing.T) { data, _ := json.Marshal(info) log.Println(string(data)) - a := `{"user_id":0,"guest_id":1,"exp":0, "debug": { "exp": 12321213321}}` + a := `{"user_id":0,"guest_id":1,"exp":0, "debug": { "exp": 123212, "is_cache": 1}}` err := json.Unmarshal([]byte(a), info) log.Println(err) log.Printf("%#v %v", info, info.Debug)