user.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package model
  2. import (
  3. "html"
  4. "kng_feed_api/database"
  5. "strings"
  6. "golang.org/x/crypto/bcrypt"
  7. "gorm.io/gorm"
  8. )
  9. type User struct {
  10. gorm.Model
  11. Username string `gorm:"size:225;not null;unique" json:"username"`
  12. Password string `gorm:"size:225;not null" json:"-"`
  13. }
  14. func (user *User) Save() (*User, error) {
  15. err := database.Database.Create(&user).Error
  16. if err != nil {
  17. return &User{}, err
  18. }
  19. return user, nil
  20. }
  21. func (user *User) BeforeSave(*gorm.DB) error {
  22. passwordHash, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
  23. if err != nil {
  24. return err
  25. }
  26. user.Password = string(passwordHash)
  27. user.Username = html.EscapeString(strings.TrimSpace(user.Username))
  28. return nil
  29. }
  30. func (user *User) ValidatePassword(password string) error {
  31. return bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
  32. }
  33. func FindUserByUsername(username string) (User, error) {
  34. var user User
  35. err := database.Database.Where("username=?", username).Find(&user).Error
  36. if err != nil {
  37. return User{}, err
  38. }
  39. return user, nil
  40. }
  41. func FindUserById(id uint) (User, error) {
  42. var user User
  43. err := database.Database.Where("ID=?", id).Find(&user).Error
  44. if err != nil {
  45. return User{}, err
  46. }
  47. return user, nil
  48. }