RequestHandler.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package util
  2. import (
  3. "ARKItems/configs"
  4. "crypto/rand"
  5. "encoding/json"
  6. "errors"
  7. "fmt"
  8. "github.com/dgrijalva/jwt-go"
  9. "github.com/gin-gonic/gin"
  10. "math/big"
  11. "time"
  12. )
  13. const (
  14. SECRETKEY = "996icu12345611" //私钥
  15. )
  16. type CustomClaims struct {
  17. UserId int64
  18. jwt.StandardClaims
  19. }
  20. func GetJsonAnyParam(c *gin.Context) func(param string) (interface{}, error) {
  21. jsonData := map[string]interface{}{}
  22. err := c.BindJSON(&jsonData)
  23. return func(param string) (interface{}, error) {
  24. if err != nil {
  25. return nil, err
  26. }
  27. value, err := func() (interface{}, error) {
  28. i, exists := jsonData[param]
  29. if !exists {
  30. return nil, errors.New("缺少" + param + "字段")
  31. }
  32. return i, nil
  33. }()
  34. if err != nil {
  35. return nil, err
  36. }
  37. return value, err
  38. }
  39. }
  40. func GenerateToken(userId string) (string, error) {
  41. maxAge := 60 * 60 * 24
  42. // Create the Claims
  43. claims := &jwt.StandardClaims{
  44. ExpiresAt: time.Now().Add(time.Duration(maxAge) * time.Second).Unix(), // 过期时间,必须设置,
  45. Issuer: userId, // 非必须,也可以填充用户名,
  46. }
  47. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  48. tokenString, err := token.SignedString([]byte(SECRETKEY))
  49. if err != nil {
  50. fmt.Println(err)
  51. }
  52. return tokenString, err
  53. }
  54. func ParseToken(tokenString string) (jwt.MapClaims, error) {
  55. token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
  56. // Don't forget to validate the alg is what you expect:
  57. if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
  58. return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
  59. }
  60. // hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
  61. return []byte(SECRETKEY), nil
  62. })
  63. if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
  64. return claims, nil
  65. } else {
  66. return nil, err
  67. }
  68. }
  69. func JudgmentUserInfo(info jwt.MapClaims) bool {
  70. i, ok := info["iss"].(string)
  71. if ok {
  72. return i == configs.Manager.Username
  73. }
  74. return false
  75. }
  76. func RandomInt(min, max *big.Int) *big.Int {
  77. // 读取密码学安全的随机比特
  78. byteLen := (max.BitLen() + 7) / 8
  79. b := make([]byte, byteLen)
  80. rand.Read(b)
  81. // 将字节转换为大整数
  82. r := new(big.Int).SetBytes(b)
  83. // 需要将生成的大整数范围限制在[min,max]
  84. r.Rem(r, new(big.Int).Sub(max, min)).Add(r, min)
  85. return r
  86. }
  87. // DataToObject json转对象
  88. func DataToObject(data interface{}, obj interface{}) error {
  89. marshal, err := json.Marshal(data)
  90. if err != nil {
  91. return err
  92. }
  93. return json.Unmarshal(marshal, obj)
  94. }
  95. func DataToMap(data interface{}) map[string]interface{} {
  96. marshal, err := json.Marshal(data)
  97. if err != nil {
  98. fmt.Println(err)
  99. }
  100. var obj map[string]interface{}
  101. json.Unmarshal(marshal, &obj)
  102. return obj
  103. }