K8s: Ensure there is always a user in appcontext.User (#78247)

This commit is contained in:
Ryan McKinley
2023-11-15 16:52:54 -08:00
committed by GitHub
parent 768fde02aa
commit 71f32d4e19
2 changed files with 25 additions and 8 deletions

View File

@@ -4,6 +4,10 @@ import (
"context"
"fmt"
k8suser "k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/endpoints/request"
"github.com/grafana/grafana/pkg/models/roletype"
"github.com/grafana/grafana/pkg/services/contexthandler/ctxkey"
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
grpccontext "github.com/grafana/grafana/pkg/services/grpcserver/context"
@@ -38,6 +42,26 @@ func User(ctx context.Context) (*user.SignedInUser, error) {
return c.SignedInUser, nil
}
// Find the kubernetes user info
k8sUserInfo, ok := request.UserFrom(ctx)
if ok {
for _, group := range k8sUserInfo.GetGroups() {
switch group {
case k8suser.APIServerUser:
fallthrough
case k8suser.SystemPrivilegedGroup:
return &user.SignedInUser{
UserID: 1,
OrgID: 1,
Name: k8sUserInfo.GetName(),
Login: k8sUserInfo.GetName(),
OrgRole: roletype.RoleAdmin,
IsGrafanaAdmin: true,
}, nil
}
}
}
return nil, fmt.Errorf("a SignedInUser was not found in the context")
}