12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package router
- import (
- "errors"
- "sync/atomic"
- "github.com/go-playground/validator/v10"
- "github.com/gorilla/websocket"
- jsoniter "github.com/json-iterator/go"
- "github.com/sirupsen/logrus"
- "gogs.daxia.dev/huanan/pkg.daxia.dev/validate_utils"
- "nn.daxia.dev/model"
- )
- var validate = validator.New()
- var uniqueIndex = int64(1)
- type HandleFunc func(*websocket.Conn, []byte, map[string]interface{}) error
- // 校验登录信息
- func GameAuthMiddleware(conn *websocket.Conn, message []byte, handleFunc HandleFunc) (map[string]interface{}, error) {
- type GameAuth struct {
- Token string `json:"token" validate:"required"`
- Once string `json:"once" validate:"required"`
- }
- ctx := map[string]interface{}{
- "userModel": nil,
- }
- err := func() error {
- gameAuth := GameAuth{}
- err := jsoniter.Unmarshal(message, &gameAuth)
- if err != nil {
- return err
- }
- err = validate.Struct(&gameAuth)
- if err != nil {
- errStr := validate_utils.SetErrorStr(err, func(tag string) string {
- switch tag {
- case "Token.required":
- return "Token不能为空"
- }
- return "内部错误"
- })
- return errors.New(errStr(0))
- }
- userToken := gameAuth.Token
- userModel := model.User{}
- var valid bool
- if valid, err = userModel.TokenIsValid(userToken); err != nil {
- logrus.Error(err)
- return errors.New("internel error")
- }
- if !valid {
- logrus.Errorf("权限检测不通过:%d, err:%v", userModel.ID, err)
- return errors.New("internel error")
- }
- ctx["userModel"] = userModel
- ctx["once"] = gameAuth.Once
- ctx["unique_index"] = atomic.AddInt64(&uniqueIndex, 1)
- logrus.Infof("权限检测通过, userID:%d", userModel.ID)
- return nil
- }()
- if err != nil {
- logrus.Errorf("check auth error:%v", err)
- conn.Close()
- return nil, err
- }
- userModel := ctx["userModel"].(model.User)
- logrus.Infof("finish auth: %d, handle func:%v", userModel.ID, handleFunc)
- return ctx, handleFunc(conn, message, ctx)
- }
|