auth.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package login
  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 LoginUserQuery struct {
  13. Username string
  14. Password string
  15. User *m.User
  16. }
  17. func Init() {
  18. bus.AddHandler("auth", AuthenticateUser)
  19. loadLdapConfig()
  20. }
  21. func AuthenticateUser(query *LoginUserQuery) error {
  22. err := loginUsingGrafanaDB(query)
  23. if err == nil || err != ErrInvalidCredentials {
  24. return err
  25. }
  26. if setting.LdapEnabled {
  27. for _, server := range ldapCfg.Servers {
  28. auther := NewLdapAuthenticator(server)
  29. err = auther.login(query)
  30. if err == nil || err != ErrInvalidCredentials {
  31. return err
  32. }
  33. }
  34. }
  35. return err
  36. }
  37. func loginUsingGrafanaDB(query *LoginUserQuery) error {
  38. userQuery := m.GetUserByLoginQuery{LoginOrEmail: query.Username}
  39. if err := bus.Dispatch(&userQuery); err != nil {
  40. if err == m.ErrUserNotFound {
  41. return ErrInvalidCredentials
  42. }
  43. return err
  44. }
  45. user := userQuery.Result
  46. passwordHashed := util.EncodePassword(query.Password, user.Salt)
  47. if passwordHashed != user.Password {
  48. return ErrInvalidCredentials
  49. }
  50. query.User = user
  51. return nil
  52. }