login.go 932 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package user
  2. import (
  3. "github.com/0xJacky/Nginx-UI/model"
  4. "github.com/0xJacky/Nginx-UI/query"
  5. "github.com/0xJacky/Nginx-UI/settings"
  6. "golang.org/x/crypto/bcrypt"
  7. "time"
  8. )
  9. func Login(name string, password string) (user *model.User, err error) {
  10. u := query.User
  11. user, err = u.Where(u.Name.Eq(name)).First()
  12. if err != nil {
  13. return nil, ErrPasswordIncorrect
  14. }
  15. if err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil {
  16. return nil, ErrPasswordIncorrect
  17. }
  18. if !user.Status {
  19. return nil, ErrUserBanned
  20. }
  21. return
  22. }
  23. func BanIP(ip string) {
  24. b := query.BanIP
  25. banIP, err := b.Where(b.IP.Eq(ip)).First()
  26. if err != nil || banIP.ExpiredAt <= time.Now().Unix() {
  27. _ = b.Create(&model.BanIP{
  28. IP: ip,
  29. Attempts: 1,
  30. ExpiredAt: time.Now().Unix() + int64(settings.AuthSettings.BanThresholdMinutes*60),
  31. })
  32. }
  33. _, _ = b.Where(b.IP.Eq(ip)).UpdateSimple(b.Attempts.Add(1))
  34. }