auth.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package auth
  2. import (
  3. "errors"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. "github.com/grafana/grafana/pkg/setting"
  7. "github.com/grafana/grafana/pkg/util"
  8. )
  9. var (
  10. ErrInvalidCredentials = errors.New("Invalid Username or Password")
  11. )
  12. type AuthenticateUserQuery struct {
  13. Username string
  14. Password string
  15. User *m.User
  16. }
  17. func init() {
  18. bus.AddHandler("auth", AuthenticateUser)
  19. }
  20. func AuthenticateUser(query *AuthenticateUserQuery) error {
  21. err := loginUsingGrafanaDB(query)
  22. if err == nil || err != ErrInvalidCredentials {
  23. return err
  24. }
  25. if setting.LdapEnabled {
  26. for _, server := range ldapServers {
  27. auther := NewLdapAuthenticator(server)
  28. err = auther.login(query)
  29. if err == nil || err != ErrInvalidCredentials {
  30. return err
  31. }
  32. }
  33. }
  34. return err
  35. }
  36. func loginUsingGrafanaDB(query *AuthenticateUserQuery) error {
  37. userQuery := m.GetUserByLoginQuery{LoginOrEmail: query.Username}
  38. if err := bus.Dispatch(&userQuery); err != nil {
  39. if err == m.ErrUserNotFound {
  40. return ErrInvalidCredentials
  41. }
  42. return err
  43. }
  44. user := userQuery.Result
  45. passwordHashed := util.EncodePassword(query.Password, user.Salt)
  46. if passwordHashed != user.Password {
  47. return ErrInvalidCredentials
  48. }
  49. query.User = user
  50. return nil
  51. }