package middlewares import ( "Panel_development/app/e" "Panel_development/nats" "github.com/bytedance/sonic" "github.com/gin-gonic/gin" "strings" "time" ) type UserResponse struct { Code int `json:"code"` Message string `json:"message"` User any `json:"user,omitempty"` } func LoginMiddleware() gin.HandlerFunc { return func(c *gin.Context) { header := c.GetHeader("Authorization") split := strings.Split(header, ":") if len(split) != 2 { e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg()) c.Abort() return } request, err := nats.Nats.Request("login_token_validation", []byte(split[1]), 3*time.Second) if err != nil { e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg()) c.Abort() } else { var response UserResponse sonic.Unmarshal(request.Data, &response) if response.Code == 200 { c.Set("user", response.User) c.Next() } else { e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg()) c.Abort() } } } }