token.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package token
  2. import (
  3. "errors"
  4. "github.com/gogf/gf/database/gredis"
  5. "reflect"
  6. "sparrow/pkg/generator"
  7. )
  8. const (
  9. DeviceTokenKeyPrefix = "device:token:"
  10. DeviceTokenExpires = 7200
  11. ApplicationTokenKeyPrefix = "app:token:"
  12. ApplicationTokenExpires = 7200
  13. )
  14. type Helper struct {
  15. redisClient *gredis.Redis
  16. }
  17. func NewHelper(host string, port, db int) *Helper {
  18. gredis.SetConfig(gredis.Config{
  19. Host: host,
  20. Port: port,
  21. Db: db,
  22. })
  23. helper := &Helper{
  24. redisClient: gredis.Instance(),
  25. }
  26. return helper
  27. }
  28. func (helper *Helper) GenerateToken(recordId string) ([]byte, error) {
  29. token, err := generator.GenRandomToken()
  30. if err != nil {
  31. return nil, err
  32. }
  33. key := DeviceTokenKeyPrefix + recordId
  34. _, err = helper.redisClient.Do("SET", key, token)
  35. if err != nil {
  36. return nil, err
  37. }
  38. _, err = helper.redisClient.Do("EXPIRE", key, DeviceTokenExpires)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return token, nil
  43. }
  44. func (helper *Helper) ValidateToken(id string, token []byte) error {
  45. key := DeviceTokenKeyPrefix + id
  46. readToken, err := helper.redisClient.Do("GET", key)
  47. if err != nil {
  48. return err
  49. }
  50. if !reflect.DeepEqual(readToken, token) {
  51. return errors.New("token not match")
  52. }
  53. _, err = helper.redisClient.Do("EXPIRE", key, DeviceTokenExpires)
  54. if err != nil {
  55. return err
  56. }
  57. return nil
  58. }
  59. func (helper *Helper) ClearToken(id string) error {
  60. key := DeviceTokenKeyPrefix + id
  61. _, err := helper.redisClient.Do("DEL", key)
  62. if err != nil {
  63. return err
  64. }
  65. return nil
  66. }
  67. func (helper *Helper) GenerateAppToken(id string, key string) ([]byte, error) {
  68. token, err := generator.GenRandomToken()
  69. if err != nil {
  70. return nil, err
  71. }
  72. _, err = helper.redisClient.Do("SET", key, token)
  73. if err != nil {
  74. return nil, err
  75. }
  76. _, err = helper.redisClient.Do("EXPIRE", key, DeviceTokenExpires)
  77. if err != nil {
  78. return nil, err
  79. }
  80. return token, nil
  81. }
  82. func (helper *Helper) ValidateAppToken(key string, token []byte) error {
  83. readToken, err := helper.redisClient.Do("GET", key)
  84. if err != nil {
  85. return err
  86. }
  87. if !reflect.DeepEqual(readToken, token) {
  88. return errors.New("token not match.")
  89. }
  90. _, err = helper.redisClient.Do("EXPIRE", key, DeviceTokenExpires)
  91. if err != nil {
  92. return err
  93. }
  94. return nil
  95. }