admin.go 906 B

12345678910111213141516171819202122232425262728293031323334
  1. package middleware
  2. import (
  3. "dsbqj-admin/pkg/serializer"
  4. "dsbqj-admin/pkg/util"
  5. "strings"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. "github.com/goccy/go-json"
  9. )
  10. type adminAccountClaims struct {
  11. Username string `json:"username"`
  12. ExpiresAt int64 `json:"expires_at"`
  13. }
  14. func AdminAccountRequired() gin.HandlerFunc {
  15. return func(c *gin.Context) {
  16. token := strings.TrimSpace(c.GetHeader("Authorization"))
  17. if strings.HasPrefix(token, "Bearer ") {
  18. token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer "))
  19. }
  20. info := util.ParseToken(token, util.AdminTokenSecret())
  21. var claims adminAccountClaims
  22. if len(info) == 0 || json.Unmarshal(info, &claims) != nil || claims.Username == "" || claims.ExpiresAt <= time.Now().Unix() {
  23. c.JSON(200, serializer.Response{Code: 401, Msg: "invalid or expired login"})
  24. c.Abort()
  25. return
  26. }
  27. c.Set("admin_username", claims.Username)
  28. c.Next()
  29. }
  30. }