diff options
| author | mo khan <mo@mokhan.ca> | 2025-09-12 17:26:50 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-09-12 17:26:50 -0600 |
| commit | be4f1992b9cc85241041725edf68ed085e2c274e (patch) | |
| tree | 4929b48de321fccbebffb1753e3d68c179e01cb2 /pkg/authz/option.go | |
| parent | 82a137bf926f2268b7559a9bb8e97df03780e1e3 (diff) | |
refactor: extract function to inject project ids headergkg-inject-ids
Diffstat (limited to 'pkg/authz/option.go')
| -rw-r--r-- | pkg/authz/option.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pkg/authz/option.go b/pkg/authz/option.go new file mode 100644 index 00000000..585deedf --- /dev/null +++ b/pkg/authz/option.go @@ -0,0 +1,54 @@ +package authz + +import ( + "context" + "io" + "strings" + + v1 "github.com/authzed/authzed-go/proto/authzed/api/v1" + authzed "github.com/authzed/authzed-go/v1" + core "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" + auth "github.com/envoyproxy/go-control-plane/envoy/service/auth/v3" + "github.com/xlgmokha/x/pkg/mapper" + "github.com/xlgmokha/x/pkg/x" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/authzd.git/pkg/pls" +) + +func WithProjectIDs(ctx context.Context, client *authzed.Client, request *auth.CheckRequest) x.Option[*auth.CheckResponse_OkResponse] { + return x.With[*auth.CheckResponse_OkResponse](func(response *auth.CheckResponse_OkResponse) { + if x.IsZero(client) { + return + } + + stream, err := client.LookupResources(ctx, &v1.LookupResourcesRequest{ + ResourceObjectType: "project", + Permission: "read_project", + Subject: mapper.MapFrom[*auth.CheckRequest, *v1.SubjectReference](request), + }) + if err != nil { + pls.LogError(ctx, err) + return + } + + var projectIDs []string + for { + result, err := stream.Recv() + if err == io.EOF { + break + } + if err != nil { + pls.LogError(ctx, err) + break + } + projectIDs = append(projectIDs, result.ResourceObjectId) + } + + response.OkResponse.Headers = append(response.OkResponse.Headers, &core.HeaderValueOption{ + Header: &core.HeaderValue{ + Key: "x-project-ids", + Value: strings.Join(projectIDs, ","), + }, + AppendAction: core.HeaderValueOption_OVERWRITE_IF_EXISTS_OR_ADD, + }) + }) +} |
