| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package middleware
- import (
- "github.com/grafana/grafana/pkg/bus"
- "github.com/grafana/grafana/pkg/log"
- 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 to find user specified 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
- }
- }
- // initialize session
- if err := ctx.Session.Start(ctx); err != nil {
- log.Error(3, "Failed to start session", err)
- return false
- }
- ctx.SignedInUser = query.Result
- ctx.IsSignedIn = true
- ctx.Session.Set(SESS_KEY_USERID, ctx.UserId)
- 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
- }
|