package logic import ( "fusenapi/constants" "fusenapi/utils/auth" "fusenapi/utils/basic" "time" "context" "fusenapi/server/websocket/internal/svc" "fusenapi/server/websocket/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type ThirdPartyLoginNotifyLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewThirdPartyLoginNotifyLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ThirdPartyLoginNotifyLogic { return &ThirdPartyLoginNotifyLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } // 处理进入前逻辑w,r // func (l *ThirdPartyLoginNotifyLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { // } // 处理逻辑后 w,r 如:重定向, resp 必须重新处理 // func (l *ThirdPartyLoginNotifyLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { // // httpx.OkJsonCtx(r.Context(), w, resp) // } func (l *ThirdPartyLoginNotifyLogic) ThirdPartyLoginNotify(req *types.ThirdPartyLoginNotifyReq, userinfo *auth.UserInfo) (resp *basic.Response) { if time.Now().Unix()-120 > req.Time /*|| req.Time > time.Now().Unix() */ { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param: time is invalid") } if req.Info.WebsocketId <= 0 { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:websocket_id is required") } if req.Info.Token == "" { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:token is required") } //验证签名 sha256 /*notifyByte, _ := json.Marshal(req.Info) h := sha256.New() h.Write([]byte(fmt.Sprintf(constants.THIRD_PARTY_LOGIN_NOTIFY_SIGN_KEY, string(notifyByte), req.Time))) signHex := h.Sum(nil) sign := hex.EncodeToString(signHex) //fmt.Println(sign) if req.Sign != sign { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid sign") }*/ //查询对应websocket连接 val, ok := mapConnPool.Load(req.Info.WebsocketId) if !ok { return resp.SetStatusWithMessage(basic.CodeOK, "success:websocket connection is not exists") } ws, ok := val.(wsConnectItem) if !ok { return resp.SetStatusWithMessage(basic.CodeServiceErr, "type of websocket connect object is err") } b := ws.respondDataFormat(constants.WEBSOCKET_THIRD_PARTY_LOGIN_NOTIFY, types.ThirdPartyLoginRspMsg{ Token: req.Info.Token, }) select { case <-ws.closeChan: return resp.SetStatusWithMessage(basic.CodeOK, "websocket connect object is closed") case ws.outChan <- b: return resp.SetStatusWithMessage(basic.CodeOK, "success") } }