auth.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package middlewares
  2. import (
  3. "bytes"
  4. "sparkteam-dash/pkg/utils"
  5. "time"
  6. "github.com/gin-gonic/gin"
  7. "github.com/spf13/cast"
  8. )
  9. func CheckTokenV2() gin.HandlerFunc {
  10. return func(ctx *gin.Context) {
  11. auth, stamp := ctx.GetHeader("X-Grave-Sign"), ctx.GetHeader("X-Grave-Stamp")
  12. data := bytes.Buffer{}
  13. data.WriteString("grave-")
  14. data.WriteString(stamp)
  15. if utils.Md5Content(data.Bytes()) != auth {
  16. ctx.JSON(403, gin.H{"msg": "sign invalid"})
  17. ctx.Abort()
  18. return
  19. }
  20. ctx.Next()
  21. }
  22. }
  23. // CheckTokenV3 签名参数放置到url中,防止无法通过跨域传送域名
  24. func CheckTokenV3() gin.HandlerFunc {
  25. return func(ctx *gin.Context) {
  26. auth, stamp := ctx.Query("sign"), ctx.Query("stamp")
  27. if auth == "dev" {
  28. ctx.Next()
  29. return
  30. }
  31. data := bytes.Buffer{}
  32. data.WriteString("sparkteam-")
  33. data.WriteString(stamp)
  34. stampInt := cast.ToInt64(stamp)
  35. if stampInt <= 0 || (stampInt+300 < time.Now().Unix()) {
  36. ctx.JSON(403, gin.H{"msg": "sign invalid"})
  37. ctx.Abort()
  38. return
  39. }
  40. if auth == "" || stamp == "" || utils.Md5Content(data.Bytes()) != auth {
  41. ctx.JSON(403, gin.H{"msg": "sign invalid"})
  42. ctx.Abort()
  43. return
  44. }
  45. ctx.Next()
  46. }
  47. }