auth.go 1.8 KB

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