token.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package token
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "errors"
  6. "fmt"
  7. "math/rand"
  8. "time"
  9. "github.com/baiy/Cadmin-server-go/models"
  10. "github.com/baiy/Cadmin-server-go/models/utils"
  11. "github.com/doug-martin/goqu/v9"
  12. )
  13. type Model struct {
  14. models.Model
  15. Token string `json:"token"`
  16. AdminUserId int `json:"admin_user_id"`
  17. ExpireTime utils.Time `json:"expire_time"`
  18. }
  19. func (m *Model) IsExpire() bool {
  20. return time.Time(m.ExpireTime).Before(time.Now())
  21. }
  22. func GetByToken(token string) (model *Model, err error) {
  23. model = new(Model)
  24. found, err := models.Db.From("admin_token").Where(goqu.Ex{
  25. "token": token,
  26. }).ScanStruct(model)
  27. if err == nil {
  28. if !found {
  29. err = errors.New("token不存在")
  30. }
  31. }
  32. return
  33. }
  34. func Clear() {
  35. _, _ = models.Db.Delete("admin_token").
  36. Where(goqu.Ex{"expire_time": goqu.Op{"lt": time.Now().Format("2006-01-02 15:04:05")}}).
  37. Executor().Exec()
  38. }
  39. func Remove(t string) {
  40. _, _ = models.Db.Delete("admin_token").
  41. Where(goqu.Ex{"token": t}).
  42. Executor().Exec()
  43. }
  44. func Add(userId int) string {
  45. tokenStr := generate()
  46. dd, _ := time.ParseDuration("48h")
  47. _, _ = models.Db.Insert("admin_token").Rows(map[string]interface{}{
  48. "admin_user_id": userId,
  49. "token": tokenStr,
  50. "expire_time": time.Now().Add(dd).Format("2006-01-02 15:04:05"),
  51. }).Executor().Exec()
  52. return tokenStr
  53. }
  54. func Update(userId int, token string) error {
  55. dd, _ := time.ParseDuration("48h")
  56. record := goqu.Record{"expire_time": time.Now().Add(dd).Format("2006-01-02 15:04:05")}
  57. _, err := models.Db.Update("admin_token").Set(record).Where(goqu.Ex{
  58. "admin_user_id": userId,
  59. "token": token,
  60. }).Executor().Exec()
  61. return err
  62. }
  63. func generate() string {
  64. rand.Seed(time.Now().UnixNano())
  65. str := fmt.Sprintf("%d%d", time.Now().UnixNano(), rand.Intn(9999))
  66. h := md5.New()
  67. h.Write([]byte(str))
  68. return hex.EncodeToString(h.Sum(nil))
  69. }