package middleware import ( "github.com/grafana/grafana/pkg/bus" m "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/setting" ) func initContextWithAuthProxy(ctx *Context) bool { if !setting.AuthProxyEnabled { return false } proxyHeaderValue := ctx.Req.Header.Get(setting.AuthProxyHeaderName) if len(proxyHeaderValue) == 0 { return false } query := getSignedInUserQueryForProxyAuth(proxyHeaderValue) if err := bus.Dispatch(query); err != nil { if err != m.ErrUserNotFound { ctx.Handle(500, "Failed find user specifed in auth proxy header", err) return true } if setting.AuthProxyAutoSignUp { cmd := getCreateUserCommandForProxyAuth(proxyHeaderValue) if err := bus.Dispatch(cmd); err != nil { ctx.Handle(500, "Failed to create user specified in auth proxy header", err) return true } query = &m.GetSignedInUserQuery{UserId: cmd.Result.Id} if err := bus.Dispatch(query); err != nil { ctx.Handle(500, "Failed find user after creation", err) return true } } else { return false } } ctx.SignedInUser = query.Result ctx.IsSignedIn = true return true } func getSignedInUserQueryForProxyAuth(headerVal string) *m.GetSignedInUserQuery { query := m.GetSignedInUserQuery{} if setting.AuthProxyHeaderProperty == "username" { query.Login = headerVal } else if setting.AuthProxyHeaderProperty == "email" { query.Email = headerVal } else { panic("Auth proxy header property invalid") } return &query } func getCreateUserCommandForProxyAuth(headerVal string) *m.CreateUserCommand { cmd := m.CreateUserCommand{} if setting.AuthProxyHeaderProperty == "username" { cmd.Login = headerVal cmd.Email = headerVal } else if setting.AuthProxyHeaderProperty == "email" { cmd.Email = headerVal cmd.Login = headerVal } else { panic("Auth proxy header property invalid") } return &cmd }