token.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package tokenize
  2. import (
  3. "encoding/hex"
  4. "encoding/json"
  5. "git.nspix.com/golang/micro/helper/crypto"
  6. "git.nspix.com/golang/micro/helper/utils"
  7. "time"
  8. )
  9. var (
  10. defaultName = "@@micro@@"
  11. )
  12. type (
  13. entry struct {
  14. Uid string `json:"u"`
  15. ExpiredAt time.Time `json:"e"`
  16. }
  17. )
  18. //Encode encode token info
  19. func Encode(name string, uid string, expiredAt time.Time) (token string, err error) {
  20. var (
  21. buf []byte
  22. )
  23. if buf, err = json.Marshal(entry{Uid: uid, ExpiredAt: expiredAt}); err != nil {
  24. return
  25. }
  26. if buf, err = crypto.AesEncrypt(buf, utils.MD5([]byte(defaultName+name))); err != nil {
  27. return
  28. }
  29. token = hex.EncodeToString(buf)
  30. return
  31. }
  32. //Decode decode token
  33. func Decode(name string, token string) (uid string, expiredAt time.Time, err error) {
  34. var (
  35. buf []byte
  36. e entry
  37. )
  38. if buf, err = hex.DecodeString(token); err != nil {
  39. return
  40. }
  41. if buf, err = crypto.AesDecrypt(buf, utils.MD5([]byte(defaultName+name))); err != nil {
  42. return
  43. }
  44. if err = json.Unmarshal(buf, &e); err == nil {
  45. uid = e.Uid
  46. expiredAt = e.ExpiredAt
  47. }
  48. return
  49. }