| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package middleware
- import (
- "github.com/grafana/grafana/pkg/infra/log"
- "github.com/grafana/grafana/pkg/infra/remotecache"
- authproxy "github.com/grafana/grafana/pkg/middleware/auth_proxy"
- m "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/setting"
- )
- const (
- // cachePrefix is a prefix for the cache key
- cachePrefix = authproxy.CachePrefix
- )
- var header = setting.AuthProxyHeaderName
- func initContextWithAuthProxy(store *remotecache.RemoteCache, ctx *m.ReqContext, orgID int64) bool {
- username := ctx.Req.Header.Get(header)
- auth := authproxy.New(&authproxy.Options{
- Store: store,
- Ctx: ctx,
- OrgID: orgID,
- })
- logger := log.New("auth.proxy")
- // Bail if auth proxy is not enabled
- if !auth.IsEnabled() {
- return false
- }
- // If the there is no header - we can't move forward
- if !auth.HasHeader() {
- return false
- }
- // Check if allowed to continue with this IP
- if result, err := auth.IsAllowedIP(); !result {
- logger.Error(
- "Failed to check whitelisted IP addresses",
- "message", err.Error(),
- "error", err.DetailsError,
- )
- ctx.Handle(407, err.Error(), err.DetailsError)
- return true
- }
- // Try to log in user from various providers
- id, err := auth.Login()
- if err != nil {
- logger.Error(
- "Failed to login",
- "username", username,
- "message", err.Error(),
- "error", err.DetailsError,
- )
- ctx.Handle(407, err.Error(), err.DetailsError)
- return true
- }
- // Get full user info
- user, err := auth.GetSignedUser(id)
- if err != nil {
- logger.Error(
- "Failed to get signed user",
- "username", username,
- "message", err.Error(),
- "error", err.DetailsError,
- )
- ctx.Handle(407, err.Error(), err.DetailsError)
- return true
- }
- // Add user info to context
- ctx.SignedInUser = user
- ctx.IsSignedIn = true
- // Remember user data it in cache
- if err := auth.Remember(id); err != nil {
- logger.Error(
- "Failed to store user in cache",
- "username", username,
- "message", err.Error(),
- "error", err.DetailsError,
- )
- ctx.Handle(500, err.Error(), err.DetailsError)
- return true
- }
- return true
- }
|