auth.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package login
  2. import (
  3. "errors"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. var (
  8. ErrEmailNotAllowed = errors.New("Required email domain not fulfilled")
  9. ErrInvalidCredentials = errors.New("Invalid Username or Password")
  10. ErrNoEmail = errors.New("Login provider didn't return an email address")
  11. ErrProviderDeniedRequest = errors.New("Login provider denied login request")
  12. ErrSignUpNotAllowed = errors.New("Signup is not allowed for this adapter")
  13. ErrTooManyLoginAttempts = errors.New("Too many consecutive incorrect login attempts for user. Login for user temporarily blocked")
  14. ErrUsersQuotaReached = errors.New("Users quota reached")
  15. ErrGettingUserQuota = errors.New("Error getting user quota")
  16. )
  17. func Init() {
  18. bus.AddHandler("auth", AuthenticateUser)
  19. loadLdapConfig()
  20. }
  21. func AuthenticateUser(query *m.LoginUserQuery) error {
  22. if err := validateLoginAttempts(query.Username); err != nil {
  23. return err
  24. }
  25. err := loginUsingGrafanaDB(query)
  26. if err == nil || (err != m.ErrUserNotFound && err != ErrInvalidCredentials) {
  27. return err
  28. }
  29. ldapEnabled, ldapErr := loginUsingLdap(query)
  30. if ldapEnabled {
  31. if ldapErr == nil || ldapErr != ErrInvalidCredentials {
  32. return ldapErr
  33. }
  34. err = ldapErr
  35. }
  36. if err == ErrInvalidCredentials {
  37. saveInvalidLoginAttempt(query)
  38. }
  39. if err == m.ErrUserNotFound {
  40. return ErrInvalidCredentials
  41. }
  42. return err
  43. }