auth.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package model
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/settings"
  4. "github.com/gin-gonic/gin"
  5. "github.com/golang-jwt/jwt"
  6. "time"
  7. )
  8. type Auth struct {
  9. Model
  10. Name string `json:"name"`
  11. Password string `json:"-"`
  12. }
  13. type AuthToken struct {
  14. Token string `json:"token"`
  15. }
  16. type JWTClaims struct {
  17. Name string `json:"name"`
  18. jwt.StandardClaims
  19. }
  20. func GetUser(name string) (user Auth, err error) {
  21. err = db.Where("name = ?", name).First(&user).Error
  22. if err != nil {
  23. return Auth{}, err
  24. }
  25. return user, err
  26. }
  27. func GetUserList(c *gin.Context, username interface{}) (data DataList) {
  28. var total int64
  29. db.Model(&Auth{}).Count(&total)
  30. var users []Auth
  31. result := db.Model(&Auth{}).Scopes(orderAndPaginate(c))
  32. if username != "" {
  33. result = result.Where("name LIKE ?", "%"+username.(string)+"%")
  34. }
  35. result.Find(&users)
  36. data = GetListWithPagination(&users, c, total)
  37. return
  38. }
  39. func DeleteToken(token string) error {
  40. return db.Where("token = ?", token).Delete(&AuthToken{}).Error
  41. }
  42. func CheckToken(token string) int64 {
  43. return db.Where("token = ?", token).Find(&AuthToken{}).RowsAffected
  44. }
  45. func GenerateJWT(name string) (string, error) {
  46. claims := JWTClaims{
  47. Name: name,
  48. StandardClaims: jwt.StandardClaims{
  49. ExpiresAt: time.Now().Add(24 * time.Hour).Unix(),
  50. },
  51. }
  52. unsignedToken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  53. signedToken, err := unsignedToken.SignedString([]byte(settings.ServerSettings.JwtSecret))
  54. if err != nil {
  55. return "", err
  56. }
  57. err = db.Create(&AuthToken{
  58. Token: signedToken,
  59. }).Error
  60. if err != nil {
  61. return "", err
  62. }
  63. return signedToken, err
  64. }