auth_proxy.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. cmd.Email = headerVal
  56. } else if setting.AuthProxyHeaderProperty == "email" {
  57. cmd.Email = headerVal
  58. cmd.Login = headerVal
  59. } else {
  60. panic("Auth proxy header property invalid")
  61. }
  62. return &cmd
  63. }