auth_proxy.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package middleware
  2. import (
  3. "github.com/grafana/grafana/pkg/bus"
  4. m "github.com/grafana/grafana/pkg/models"
  5. "github.com/grafana/grafana/pkg/setting"
  6. )
  7. func initContextWithAuthProxy(ctx *Context) bool {
  8. if !setting.AuthProxyEnabled {
  9. return false
  10. }
  11. proxyHeaderValue := ctx.Req.Header.Get(setting.AuthProxyHeaderName)
  12. if len(proxyHeaderValue) == 0 {
  13. return false
  14. }
  15. query := getSignedInUserQueryForProxyAuth(proxyHeaderValue)
  16. if err := bus.Dispatch(query); err != nil {
  17. if err != m.ErrUserNotFound {
  18. ctx.Handle(500, "Failed find user specifed in auth proxy header", err)
  19. return true
  20. }
  21. if setting.AuthProxyAutoSignUp {
  22. cmd := getCreateUserCommandForProxyAuth(proxyHeaderValue)
  23. if err := bus.Dispatch(cmd); err != nil {
  24. ctx.Handle(500, "Failed to create user specified in auth proxy header", err)
  25. return true
  26. }
  27. query = &m.GetSignedInUserQuery{UserId: cmd.Result.Id}
  28. if err := bus.Dispatch(query); err != nil {
  29. ctx.Handle(500, "Failed find user after creation", err)
  30. return true
  31. }
  32. } else {
  33. return false
  34. }
  35. }
  36. ctx.SignedInUser = query.Result
  37. ctx.IsSignedIn = true
  38. return true
  39. }
  40. func getSignedInUserQueryForProxyAuth(headerVal string) *m.GetSignedInUserQuery {
  41. query := m.GetSignedInUserQuery{}
  42. if setting.AuthProxyHeaderProperty == "username" {
  43. query.Login = headerVal
  44. } else if setting.AuthProxyHeaderProperty == "email" {
  45. query.Email = headerVal
  46. } else {
  47. panic("Auth proxy header property invalid")
  48. }
  49. return &query
  50. }
  51. func getCreateUserCommandForProxyAuth(headerVal string) *m.CreateUserCommand {
  52. cmd := m.CreateUserCommand{}
  53. if setting.AuthProxyHeaderProperty == "username" {
  54. cmd.Login = headerVal
  55. } else if setting.AuthProxyHeaderProperty == "email" {
  56. cmd.Email = headerVal
  57. } else {
  58. panic("Auth proxy header property invalid")
  59. }
  60. return &cmd
  61. }