From c218a2a4dddd547063a91fd4ad00e29c79ab62fe Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Fri, 5 Jun 2026 12:46:54 -0700 Subject: [PATCH 01/10] feat: support admin token team auth --- packages/api/internal/api/api.gen.go | 523 +++++++++++++++------- packages/api/internal/api/spec_test.go | 2 + packages/api/internal/handlers/store.go | 34 ++ packages/api/main.go | 1 + packages/auth/pkg/auth/middleware.go | 14 + packages/auth/pkg/auth/middleware_test.go | 51 +++ spec/openapi.yml | 94 ++++ 7 files changed, 550 insertions(+), 169 deletions(-) diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go index c977bea361..1d59d0f1ed 100644 --- a/packages/api/internal/api/api.gen.go +++ b/packages/api/internal/api/api.gen.go @@ -26,6 +26,7 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" + AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" AdminTokenAuthScopes adminTokenAuthContextKey = "AdminTokenAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" @@ -1462,6 +1463,9 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string +// adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme +type adminTeamAuthContextKey string + // adminTokenAuthContextKey is the context key for AdminTokenAuth security scheme type adminTokenAuthContextKey string @@ -11432,6 +11436,10 @@ func (siw *ServerInterfaceWrapper) GetApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11453,6 +11461,10 @@ func (siw *ServerInterfaceWrapper) PostApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11486,6 +11498,10 @@ func (siw *ServerInterfaceWrapper) DeleteApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11519,6 +11535,10 @@ func (siw *ServerInterfaceWrapper) PatchApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11652,6 +11672,10 @@ func (siw *ServerInterfaceWrapper) GetSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesParams @@ -11686,6 +11710,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11712,6 +11740,10 @@ func (siw *ServerInterfaceWrapper) GetSandboxesMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesMetricsParams @@ -11758,6 +11790,10 @@ func (siw *ServerInterfaceWrapper) DeleteSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11793,6 +11829,10 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11828,6 +11868,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDConnect(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -11863,6 +11907,10 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesSandboxIDLogsParams @@ -11917,6 +11965,10 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDMetrics(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesSandboxIDMetricsParams @@ -11971,6 +12023,10 @@ func (siw *ServerInterfaceWrapper) PutSandboxesSandboxIDNetwork(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12006,6 +12062,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDPause(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12041,6 +12101,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDRefreshes(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12076,6 +12140,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDResume(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12111,6 +12179,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDSnapshots(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12146,6 +12218,10 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDTimeout(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12172,6 +12248,10 @@ func (siw *ServerInterfaceWrapper) GetSnapshots(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetSnapshotsParams @@ -12253,6 +12333,10 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetTeamsTeamIDMetricsParams @@ -12307,6 +12391,10 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetricsMax(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetTeamsTeamIDMetricsMaxParams @@ -12362,6 +12450,10 @@ func (siw *ServerInterfaceWrapper) GetTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesParams @@ -12396,6 +12488,10 @@ func (siw *ServerInterfaceWrapper) PostTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12431,6 +12527,10 @@ func (siw *ServerInterfaceWrapper) GetTemplatesAliasesAlias(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12454,6 +12554,10 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12477,6 +12581,10 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12514,6 +12622,10 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12549,6 +12661,10 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDParams @@ -12605,6 +12721,10 @@ func (siw *ServerInterfaceWrapper) PatchTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12640,6 +12760,10 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12684,6 +12808,10 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTemplateIDBuildsBuildID(c *gin.C c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12730,6 +12858,10 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDLogs(c *gi c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDBuildsBuildIDLogsParams @@ -12819,6 +12951,10 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDStatus(c * c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDBuildsBuildIDStatusParams @@ -12892,6 +13028,10 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDFilesHash(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12927,6 +13067,10 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12953,6 +13097,10 @@ func (siw *ServerInterfaceWrapper) GetV2Sandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetV2SandboxesParams @@ -13023,6 +13171,10 @@ func (siw *ServerInterfaceWrapper) GetV2SandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + // Parameter object where we will unmarshal all parameters from the context var params GetV2SandboxesSandboxIDLogsParams @@ -13089,6 +13241,10 @@ func (siw *ServerInterfaceWrapper) PostV2Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13126,6 +13282,10 @@ func (siw *ServerInterfaceWrapper) PatchV2TemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13170,6 +13330,10 @@ func (siw *ServerInterfaceWrapper) PostV2TemplatesTemplateIDBuildsBuildID(c *gin c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13193,6 +13357,10 @@ func (siw *ServerInterfaceWrapper) PostV3Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13216,6 +13384,10 @@ func (siw *ServerInterfaceWrapper) GetVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13239,6 +13411,10 @@ func (siw *ServerInterfaceWrapper) PostVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13274,6 +13450,10 @@ func (siw *ServerInterfaceWrapper) DeleteVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13309,6 +13489,10 @@ func (siw *ServerInterfaceWrapper) GetVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) + + c.Set(string(AdminTokenAuthScopes), []string{}) + for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13409,175 +13593,176 @@ func RegisterHandlersWithOptions(router gin.IRouter, si ServerInterface, options // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", - "CLngcsOU7tyRRek3HRmQ/50rJrdP/x0AAP//", + "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", + "ebp9+n8BAAD//w==", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/api/internal/api/spec_test.go b/packages/api/internal/api/spec_test.go index 1027f07326..be4a62919f 100644 --- a/packages/api/internal/api/spec_test.go +++ b/packages/api/internal/api/spec_test.go @@ -34,6 +34,7 @@ func TestSpecSecuritySchemeHeaderNames(t *testing.T) { {"Supabase2TeamAuth", auth.HeaderSupabaseTeam}, {"AuthProviderTeamAuth", auth.HeaderTeamID}, {"AdminTokenAuth", auth.HeaderAdminToken}, + {"AdminTeamAuth", auth.HeaderTeamID}, } for _, tc := range cases { @@ -78,6 +79,7 @@ func TestAuthProviderTeamAuthHeaderRoutes(t *testing.T) { "AuthProviderBearerAuth": auth.HeaderAuthorization, "AuthProviderTeamAuth": auth.HeaderTeamID, "AdminTokenAuth": auth.HeaderAdminToken, + "AdminTeamAuth": auth.HeaderTeamID, } authFn := func(_ context.Context, input *openapi3filter.AuthenticationInput) error { diff --git a/packages/api/internal/handlers/store.go b/packages/api/internal/handlers/store.go index 031c98f9b5..9407bd3dd4 100644 --- a/packages/api/internal/handlers/store.go +++ b/packages/api/internal/handlers/store.go @@ -396,3 +396,37 @@ func (a *APIStore) GetTeamFromAuthProviderToken(ctx context.Context, ginCtx *gin return a.authService.ValidateSupabaseTeam(ctx, ginCtx, teamID) } + +func (a *APIStore) GetTeamFromAdminToken(ctx context.Context, _ *gin.Context, teamID string) (*types.Team, *api.APIError) { + ctx, span := tracer.Start(ctx, "get team from admin token") + defer span.End() + + teamUUID, err := uuid.Parse(teamID) + if err != nil { + return nil, &api.APIError{ + Code: http.StatusBadRequest, + ClientMsg: "Invalid team ID", + Err: fmt.Errorf("failed to parse team ID: %w", err), + } + } + + team, err := a.authService.GetTeamByID(ctx, teamUUID) + if err != nil { + var forbiddenErr *sharedauth.TeamForbiddenError + if errors.As(err, &forbiddenErr) { + return nil, &api.APIError{ + Code: http.StatusForbidden, + ClientMsg: err.Error(), + Err: fmt.Errorf("failed getting team: %w", err), + } + } + + return nil, &api.APIError{ + Code: http.StatusUnauthorized, + ClientMsg: "Backend authentication failed", + Err: fmt.Errorf("failed getting team: %w", err), + } + } + + return team, nil +} diff --git a/packages/api/main.go b/packages/api/main.go index d2f3060b1a..aff88d2a49 100644 --- a/packages/api/main.go +++ b/packages/api/main.go @@ -198,6 +198,7 @@ func NewGinServer(ctx context.Context, config cfg.Config, tel *telemetry.Client, auth.NewSupabaseTeamAuthenticator(apiStore.GetTeamFromSupabaseToken), auth.NewAuthProviderTeamAuthenticator(apiStore.GetTeamFromAuthProviderToken), auth.NewAdminTokenAuthenticator(config.AdminToken), + auth.NewAdminTeamAuthenticator(apiStore.GetTeamFromAdminToken), }, metricsMiddleware.SetProcessingStartTime, ) diff --git a/packages/auth/pkg/auth/middleware.go b/packages/auth/pkg/auth/middleware.go index 8dda377e57..24a3817fd4 100644 --- a/packages/auth/pkg/auth/middleware.go +++ b/packages/auth/pkg/auth/middleware.go @@ -223,6 +223,20 @@ func NewAdminTokenAuthenticator(adminToken string) Authenticator { } } +// NewAdminTeamAuthenticator creates an authenticator for AdminTeamAuth (X-Team-ID header). +// It is intended to be paired with AdminTokenAuth on routes that need team context. +func NewAdminTeamAuthenticator(validationFunc func(ctx context.Context, ginCtx *gin.Context, teamID string) (*types.Team, *APIError)) Authenticator { + return &commonAuthenticator[*types.Team]{ + schemeName: "AdminTeamAuth", + header: headerKey{ + name: HeaderTeamID, + }, + validationFunc: validationFunc, + setContextFunc: setTeamInfo, + errorMessage: "Invalid admin token teamID.", + } +} + // CreateAuthenticationFunc creates an OpenAPI authentication function from a list of authenticators. func CreateAuthenticationFunc( authenticators []Authenticator, diff --git a/packages/auth/pkg/auth/middleware_test.go b/packages/auth/pkg/auth/middleware_test.go index c3ba82263b..892a0fcf1e 100644 --- a/packages/auth/pkg/auth/middleware_test.go +++ b/packages/auth/pkg/auth/middleware_test.go @@ -1,8 +1,16 @@ package auth import ( + "context" + "net/http" + "net/http/httptest" "testing" + "github.com/e2b-dev/infra/packages/auth/pkg/types" + authqueries "github.com/e2b-dev/infra/packages/db/pkg/auth/queries" + "github.com/getkin/kin-openapi/openapi3filter" + "github.com/gin-gonic/gin" + "github.com/google/uuid" "github.com/stretchr/testify/require" ) @@ -26,3 +34,46 @@ func TestAdminValidationFunction(t *testing.T) { require.Equal(t, 401, err.Code) }) } + +func TestAdminTeamAuthenticatorSetsTeamContext(t *testing.T) { + t.Parallel() + + ctx := context.Background() + teamID := uuid.New() + team := types.NewTeam(&authqueries.Team{ID: teamID}, &authqueries.TeamLimit{}) + + req := httptest.NewRequestWithContext(ctx, http.MethodGet, "/", nil) + req.Header.Set(HeaderTeamID, teamID.String()) + + ginCtx, _ := gin.CreateTestContext(httptest.NewRecorder()) + authenticator := NewAdminTeamAuthenticator(func(_ context.Context, _ *gin.Context, gotTeamID string) (*types.Team, *APIError) { + if gotTeamID != teamID.String() { + return nil, &APIError{ + Err: ErrInvalidAuthHeader, + ClientMsg: "Invalid team ID", + Code: http.StatusBadRequest, + } + } + + return team, nil + }) + if got, want := authenticator.SecuritySchemeName(), "AdminTeamAuth"; got != want { + t.Fatalf("NewAdminTeamAuthenticator().SecuritySchemeName() = %q, want %q", got, want) + } + + err := authenticator.Authenticate(ctx, ginCtx, &openapi3filter.AuthenticationInput{ + RequestValidationInput: &openapi3filter.RequestValidationInput{Request: req}, + }) + if err != nil { + t.Fatalf("AdminTeamAuth.Authenticate(valid team ID) error: %v", err) + } + + got, ok := GetTeamInfo(ginCtx) + if !ok { + t.Fatalf("GetTeamInfo(ginCtx) ok = false, want true") + } + + if got.Team.ID != teamID { + t.Errorf("GetTeamInfo(ginCtx).Team.ID = %s, want %s", got.Team.ID, teamID) + } +} diff --git a/spec/openapi.yml b/spec/openapi.yml index 3293ca8bdf..3643b703ad 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -41,6 +41,10 @@ components: type: apiKey in: header name: X-Admin-Token + AdminTeamAuth: + type: apiKey + in: header + name: X-Team-ID parameters: templateID: @@ -1943,6 +1947,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" - in: query @@ -1987,6 +1993,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" - in: query @@ -2036,6 +2044,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - name: metadata in: query @@ -2067,6 +2077,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2097,6 +2109,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - name: metadata in: query @@ -2142,6 +2156,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - name: sandbox_ids in: query @@ -2179,6 +2195,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2220,6 +2238,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2278,6 +2298,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2303,6 +2325,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2325,6 +2349,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2371,6 +2397,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2396,6 +2424,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2430,6 +2460,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2469,6 +2501,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] tags: [sandboxes] requestBody: content: @@ -2496,6 +2530,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] tags: [sandboxes] requestBody: required: true @@ -2526,6 +2562,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] tags: [sandboxes] requestBody: content: @@ -2552,6 +2590,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2586,6 +2626,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - name: sandboxID in: query @@ -2619,6 +2661,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2653,6 +2697,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2685,6 +2731,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - in: path @@ -2721,6 +2769,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - in: query required: false @@ -2751,6 +2801,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2782,6 +2834,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/paginationNextToken" @@ -2807,6 +2861,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2837,6 +2893,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" responses: @@ -2857,6 +2915,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2886,6 +2946,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -2907,6 +2969,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -2935,6 +2999,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2968,6 +3034,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3017,6 +3085,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3073,6 +3143,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3103,6 +3175,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3131,6 +3205,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" responses: @@ -3161,6 +3237,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - name: alias in: path @@ -3440,6 +3518,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] responses: "200": description: Successfully returned all team API keys @@ -3461,6 +3541,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3488,6 +3570,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" requestBody: @@ -3513,6 +3597,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" responses: @@ -3535,6 +3621,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] responses: "200": description: Successfully listed all team volumes @@ -3558,6 +3646,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3588,6 +3678,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" responses: @@ -3613,6 +3705,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] + - AdminTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" responses: From 7700b726dd89c11183fafbf7f09c78535310e6f4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jun 2026 19:54:25 +0000 Subject: [PATCH 02/10] chore: auto-commit generated changes --- packages/auth/pkg/auth/middleware_test.go | 5 +++-- tests/integration/internal/api/generated.go | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/auth/pkg/auth/middleware_test.go b/packages/auth/pkg/auth/middleware_test.go index 892a0fcf1e..9c49d391b9 100644 --- a/packages/auth/pkg/auth/middleware_test.go +++ b/packages/auth/pkg/auth/middleware_test.go @@ -6,12 +6,13 @@ import ( "net/http/httptest" "testing" - "github.com/e2b-dev/infra/packages/auth/pkg/types" - authqueries "github.com/e2b-dev/infra/packages/db/pkg/auth/queries" "github.com/getkin/kin-openapi/openapi3filter" "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/stretchr/testify/require" + + "github.com/e2b-dev/infra/packages/auth/pkg/types" + authqueries "github.com/e2b-dev/infra/packages/db/pkg/auth/queries" ) func TestAdminValidationFunction(t *testing.T) { diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go index 3a8ac0598a..400ad952f7 100644 --- a/tests/integration/internal/api/generated.go +++ b/tests/integration/internal/api/generated.go @@ -21,6 +21,7 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" + AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" AdminTokenAuthScopes adminTokenAuthContextKey = "AdminTokenAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" @@ -1457,6 +1458,9 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string +// adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme +type adminTeamAuthContextKey string + // adminTokenAuthContextKey is the context key for AdminTokenAuth security scheme type adminTokenAuthContextKey string From b65525b1d3d66949ed53ec4d5b3bac348983ab32 Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Fri, 5 Jun 2026 12:55:40 -0700 Subject: [PATCH 03/10] fix: order admin token team auth schemes --- packages/api/internal/api/api.gen.go | 332 +++++++++++----------- packages/api/internal/api/spec_test.go | 76 ++++- packages/api/main.go | 4 +- packages/auth/pkg/auth/middleware.go | 28 +- packages/auth/pkg/auth/middleware_test.go | 10 +- spec/openapi.yml | 200 ++++++------- 6 files changed, 371 insertions(+), 279 deletions(-) diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go index 1d59d0f1ed..e695a5dafc 100644 --- a/packages/api/internal/api/api.gen.go +++ b/packages/api/internal/api/api.gen.go @@ -26,8 +26,8 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" - AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" - AdminTokenAuthScopes adminTokenAuthContextKey = "AdminTokenAuth.Scopes" + Admin1TokenAuthScopes admin1TokenAuthContextKey = "Admin1TokenAuth.Scopes" + Admin2TeamAuthScopes admin2TeamAuthContextKey = "Admin2TeamAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" AuthProviderTeamAuthScopes authProviderTeamAuthContextKey = "AuthProviderTeamAuth.Scopes" @@ -1463,11 +1463,11 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string -// adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme -type adminTeamAuthContextKey string +// admin1TokenAuthContextKey is the context key for Admin1TokenAuth security scheme +type admin1TokenAuthContextKey string -// adminTokenAuthContextKey is the context key for AdminTokenAuth security scheme -type adminTokenAuthContextKey string +// admin2TeamAuthContextKey is the context key for Admin2TeamAuth security scheme +type admin2TeamAuthContextKey string // apiKeyAuthContextKey is the context key for ApiKeyAuth security scheme type apiKeyAuthContextKey string @@ -11323,7 +11323,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDApiKeys(c *gin.Context) { return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11359,7 +11359,7 @@ func (siw *ServerInterfaceWrapper) DeleteAdminTeamsTeamIDApiKeysApiKeyID(c *gin. return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11386,7 +11386,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDBuildsCancel(c *gin.Conte return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11413,7 +11413,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDSandboxesKill(c *gin.Cont return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11436,9 +11436,9 @@ func (siw *ServerInterfaceWrapper) GetApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11461,9 +11461,9 @@ func (siw *ServerInterfaceWrapper) PostApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11498,9 +11498,9 @@ func (siw *ServerInterfaceWrapper) DeleteApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11535,9 +11535,9 @@ func (siw *ServerInterfaceWrapper) PatchApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11568,7 +11568,7 @@ func (siw *ServerInterfaceWrapper) GetNodes(c *gin.Context) { var err error _ = err - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetNodesParams @@ -11606,7 +11606,7 @@ func (siw *ServerInterfaceWrapper) GetNodesNodeID(c *gin.Context) { return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetNodesNodeIDParams @@ -11644,7 +11644,7 @@ func (siw *ServerInterfaceWrapper) PostNodesNodeID(c *gin.Context) { return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11672,9 +11672,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesParams @@ -11710,9 +11710,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11740,9 +11740,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesMetricsParams @@ -11790,9 +11790,9 @@ func (siw *ServerInterfaceWrapper) DeleteSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11829,9 +11829,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11868,9 +11868,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDConnect(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11907,9 +11907,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesSandboxIDLogsParams @@ -11965,9 +11965,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDMetrics(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesSandboxIDMetricsParams @@ -12023,9 +12023,9 @@ func (siw *ServerInterfaceWrapper) PutSandboxesSandboxIDNetwork(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12062,9 +12062,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDPause(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12101,9 +12101,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDRefreshes(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12140,9 +12140,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDResume(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12179,9 +12179,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDSnapshots(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12218,9 +12218,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDTimeout(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12248,9 +12248,9 @@ func (siw *ServerInterfaceWrapper) GetSnapshots(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSnapshotsParams @@ -12333,9 +12333,9 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTeamsTeamIDMetricsParams @@ -12391,9 +12391,9 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetricsMax(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTeamsTeamIDMetricsMaxParams @@ -12450,9 +12450,9 @@ func (siw *ServerInterfaceWrapper) GetTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesParams @@ -12488,9 +12488,9 @@ func (siw *ServerInterfaceWrapper) PostTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12527,9 +12527,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesAliasesAlias(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12554,9 +12554,9 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12581,9 +12581,9 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12622,9 +12622,9 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12661,9 +12661,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDParams @@ -12721,9 +12721,9 @@ func (siw *ServerInterfaceWrapper) PatchTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12760,9 +12760,9 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12808,9 +12808,9 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTemplateIDBuildsBuildID(c *gin.C c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12858,9 +12858,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDLogs(c *gi c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDBuildsBuildIDLogsParams @@ -12951,9 +12951,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDStatus(c * c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDBuildsBuildIDStatusParams @@ -13028,9 +13028,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDFilesHash(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13067,9 +13067,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13097,9 +13097,9 @@ func (siw *ServerInterfaceWrapper) GetV2Sandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetV2SandboxesParams @@ -13171,9 +13171,9 @@ func (siw *ServerInterfaceWrapper) GetV2SandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetV2SandboxesSandboxIDLogsParams @@ -13241,9 +13241,9 @@ func (siw *ServerInterfaceWrapper) PostV2Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13282,9 +13282,9 @@ func (siw *ServerInterfaceWrapper) PatchV2TemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13330,9 +13330,9 @@ func (siw *ServerInterfaceWrapper) PostV2TemplatesTemplateIDBuildsBuildID(c *gin c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13357,9 +13357,9 @@ func (siw *ServerInterfaceWrapper) PostV3Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13384,9 +13384,9 @@ func (siw *ServerInterfaceWrapper) GetVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13411,9 +13411,9 @@ func (siw *ServerInterfaceWrapper) PostVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13450,9 +13450,9 @@ func (siw *ServerInterfaceWrapper) DeleteVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13489,9 +13489,9 @@ func (siw *ServerInterfaceWrapper) GetVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminTeamAuthScopes), []string{}) + c.Set(string(Admin1TokenAuthScopes), []string{}) - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(Admin2TeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13700,69 +13700,69 @@ var swaggerSpec = []string{ "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", - "ebp9+n8BAAD//w==", + "YZ/NuVEc5k9TWRCEB3AWaFYAOBcCbJaHQUTjd6URqVyaeoNv4Dzw/vcOtNy5Lpcs1I9LzED7cDzax5FN", + "dgAF9THgX11wXJzs/GYfH6t/JuYXyvPCPsKCV4Ula+DnLfEqS/EEc9IL5aZxM9ZNiz6IL0YryRwzmCQ5", + "quNeBBVSDHuf9j9KdmXVJTnw9sbvxnuQjTElMU6pd+C9H++N9/SLQqDTXYXgHUCw0sycKVmOVEUe9Wi1", + "UhRTsgd4VXQSeAfeRcKFRf3cUweLcPExCRb6NYnQgUiQDkOlt9n9p45GUWpUZ9L8cmnPyqNEbQtlWl2G", + "he3vvVvZ7EdaRFUhaMmkq6WaZXUJgTA+KLBcs+Xg78pGTyPvb3t73W1lI5srgT3ZRc1/3D6NvjcexT9u", + "n26NpeQPr0wmt3L8MunsfscFMk6OnxQJhcTlHjuG3xGO2ylJNbNp6dCeAsiY4YgIyITSYDQvmuyWAATj", + "eYU+PnQkQ1bred4WflCzdLX98Aq3W8qNXakG893vykH9tItTunNHFp2cgyOsXmnaLz9V4gwcIl2yCT0k", + "7G4aJg+QTsLBViQEkifya5heSSFeJwTHQzegF+C38Jo657b5I8wy8xhZjKDrldDt2jicpcO+DIOrAuBA", + "bOlpqfNw7PUh+L3hB+l9n7bvN3foahqaOlM8iyLMFoUQLZ0DzBEcLM86fPB3j0O3+12pBL3Y7bNPoGbH", + "7jN4qAF56bM46pYCBtJ+AqBE480CYF00/iroVsvrZ9OtuqPv+jj2Ve7oBokB31UaHhrvpCxRmYlwHKBU", + "5wCrmOhUOiVIrKZU5m7hoWyRaq5XIUFKlLi3Mk4O64bFqrVeEp6FwsXOryyqRmqTwrzi6RslXbVmICWL", + "ZHBuzetLuvnb8l1IwNRIu7/RUFNu/dX7EkSaP7P+zaR9+pGpVK9WrrUnlcrNsOv1vFEqlSt2EE07mVqa", + "94w0pX+Tg9p8m9fI7hciCj36Wfvb0zlSaJQ1H1L7Zuc1LeqLeuF7tNO803XfajJW6X51mqmb7iqXNkMR", + "t0+jPmYcG4VubmTRxfZ+8wrtN6+O7mzGNOh2UrmcNF0+ui4bL6L7vw3jz2vkUVj4jpge5b/roogL2XnF", + "BLF6JlfzRfbic3sdtKi9oltaXCXfUmWEG9WpX+GzenbhUqLUd68XX5mT3OBCOTL1iwdtINDRbpwEpIcG", + "qJo5gD7XH1rvFW0lkOGm8a+MQMorfdUoFdvf2O2il/Yp1/s8vVOhcmNyv+Hq4LoQAGS73+V/tMh1EsUv", + "ROiq4fE0aaSJcxhlMD9Vk3vyQL5FGuoiHV3itTfBmArtb+paWqWtxrsEFFNHPH8EhdVaXTeJVdDUutws", + "1erwT1pE9+HicJA0BiBGD4Z4C4J5AGMp5Q9uFzSVwghuoWPnDmwVPHm9NGAOKrJbJGhKQ1EuSkmK+gMZ", + "J+y/8MT/lu3t7f8dp+l/pSwJ4I0wlDoA23UcoHtVkyLKuEATgm4uTxGJ/URnd3expLxgrM2RXkSKnUIJ", + "F1P6/lnirL5ha3RnPINarXgjpe+9ZsWynBC7wxJjkp/nqdKt0M06I7XPzpqMMjldbdYiU5rWoS9bNYw3", + "7Wr+K9JtifHvRkVu+WYBoBtZz8j6iQGTuL5DGhwlUYR3dIIIEkAhKyvtLzo5hgfjM1KCxBt55DENpWJi", + "Hvm4mLse5E8a8FYfSXMAeoQfT9THd3t7FZY88rKY/isjugEcpbUqq87CAM8TDCoI1xDC9rSt8bR9z8uL", + "t1pOldfIqvbhMpnmlHBllSwfpoAXxc57mk0r7No46V6/TvyGtYzGu36hYUwWCG7NzZx4TTSycr62zD2c", + "F+rylvI2wLl2/SSOiaoL7VaBL2F7eE6fgSqRoJI5WTyEcqSqFpVSOjHCs4gEY3R9fSqbwLMt8ihIrO9w", + "LcpzTudHGsbnkvvqFXEN2SBlfO8llHGTKdSUmHoavdS1QFPEjxad9wOyBpNKMxda7W9+pRjjVrF/qKWE", + "du/3W4a30+L1EHinKjvo0lxg5EycBfWfqiU8ADoxx8JKJ5BLKhqjiIYhLarpOW8rcnC3Zdw8IG0vlVaz", + "tKmSfVb9ljYoG6AKaUTLUOXpFd7tyTvRsHpuG9AjYNeX0SJUtt0tv9gQv+gyP9gMIsqtCT2OfaPp4Rkn", + "Py/Jo059kfUEM2F4AMTd3+NwZBVLHFUKbhYLWRMLcA1LoFSSfYJ7LI3EwXILGwbyRmzrlVqHy9rWbV6x", + "AZvJlrUsy1p0hWWV1kU0BiPVizHbVXLXXBHcUQ+8crnJHLxN10V+hXeblmrsve45DptT6RSa8Cj7EDo3", + "b53H7MPeP/q0/cf2SFaPpKpt3Wg2uJCfK3WO+9z1od/GjZ/KclG6k4L/WRfb13fWLSG+RkJkqoY64W02", + "LGhSYjXKCCUZNxVcFyBNUEjvSU9KvcznfbW8u1Jevm/MTEVZUsvckH32r0Gx3CQgysm13bZyCT2WYKeq", + "4yukUAVY8PrDGJrtlVtB8LqOlamB3idBTkoYp1xA4WNTFj6P7dFj/v88vxJwAUUxTNV8bhQDE+ymYl3g", + "vVbhilcvoWEeNCGLJFYsNGF0RuE1fz5NSKdESqC+DpEcjtcregyIluzZ6AE39fDjaeK0B5hN33xCjK0N", + "YLnjLQ9IkrV4Kq+IUKF5qmFh0zO3/RJrp2GIyGNKGUGPxgZmhffRIlWePiVjdITDEJwFc8pRRMQ8CVCU", + "hYKmIdGpI5N7wh4YFdqkcH19OkIE+6psO8q46l7YGgozHeaFAVK2ShMqvycoIphnujifWVpgzA89Gca1", + "xt2rZRcawGdpqlzvv9liQzDbE7r6E2qL2vZg87yplanXkVfhFyJapFpLMGDl8UkZis8qCL2AYbJAPMmY", + "T6yAxKUS1KRYCnE5zSk41AZ1OSePQuej24y5vCQNl7WWF5u+jRV0n5IcQeqUQHaSfpkfnJ6wa/1hM/ke", + "np/pYZOEUc3c2kYdAzLqyd+szStSy/Rxbtqh1W2Mzkods6xrUyeK2fo1fyy/piSKVTg14U3+Rjya/dP7", + "/VWkQCcP2Y3wYysfATLVsT4unmIKp6jnG4bo+3GaM/y4ZTavntmMHI8sGfWhko38F7knJSqBd5L6IU3D", + "q0gGefyb38yYOoh+EuvL6Z/2wyDz9AY240+GBXGUQ1xrNNgZfrTZ45YdvkF2qN5M9tKJTVMnVys+9rgo", + "5kn1ms567+q8G9IB9MvSZ+rjBkcveFkbpKW/DnIt8FZ+Fdzun6tkbGt5GmzT7jrsaa4i5/2M7/srh0HX", + "xG1wsqlSZvA4wfdJKkx8xat7r/i2ibjEeHd1HZ/d7/CP5vwzR1C3mk6t6kJUzLXGqeo/kUfKRTt/1mXA", + "4D8NvLqc/xTrls1qSkMJb9NxkwqJmRyWl9d86+LSUjip7LKmduNCQz+Y+l9davU3pZg0H5Ki8GhrMsTC", + "9YNnxnXUqLaoPvnJuMazdUmA8kxyokFi4ENDydUfNKv62yJZUyLW7QA9hEqdkhx/4j/LuyKuF8Zt0UjW", + "SJMKsqVp8t2KASGBDYpTQcGzosjwluRfnOTLDPp7UaSwb9baBpW8ypZLxQ8HGsnyrv1jkEu1G1eRu3Z7", + "e7Nub+0mhkqlgQYCsdXZFVHHkp7iJXzSm9B+rYrBA21y9sWCCr5kCYu/orpaSsrcbpkwL6MabRJyoLXw", + "v/XZNsqFv5fO1Vyr8tuYr/n1p1D6y1jaLokugR/3tLO9DZJ+u+a6rQluoHXBVl5Nsa3v8F+tzfY9CpC8", + "AmRpn8tdPqkS1h/VhGtWZPSyXJrIvpsjKzKbY668yFsqWweV1VO71EIQSnYDlUijn2pcIq+lErYsSWKb", + "Te7iZ4yDu/0tZXdxJXdRs+rPy8RRBJQRH9Yw6ilwJFUc570aBw7JPRT96z3oKXRwoPZKhfz22f0pS6Km", + "OBQYZdAq1cQb8kPAmZOz9vZFuC9k1pF/nQYsN5/+UbwP7ZxbpbEfwrubKkh08W6Vbv/FuPdJHJBHc2Tz", + "VzE5bTYe4Dxhh3U9cHKXZMa/TKecNLDLwZmwfhiGvjTf3RiTa3zV18ncthztpTnalIbypznm8/byNzhG", + "WRomOEAhje+MnRYzJEdAkqgwjS2egBdEfeurqX6WbX/FfP5cHucIZJirYfvGMUgoDK8zS+gOZXi3ntMl", + "8XIDmG+yBdj78jAnDFJn6B/htOld+gGcZX+hk2nCHjoiMyHYYRmnifYvr9Kttsbwy2s8e+4bDK2GAV7X", + "GEm8dRu3uo3tBLQ9nqu2FcP4uv8jV0UaNb2ezQGdLFASE5QwFCVMldQCTPSq3SEUp1gu0+OVcEZEjzwu", + "FqH8QerBb8m1ui0h9QM+i2/Ndd0rL26TodXiPG80G/abNJh2XbD3hsKcmz37YLYB5JUYXCuoVIsAwwpc", + "//VLs4zFYyR7owkJkweV+UQ1wIwg8uiHWdCM25UZcI8wJzucxJwKek8QzyZKaqEIC3+OkhggjwjneKbu", + "hpIJNwgigpk/L4EV4cdTEs/kAd//2983G0VuJTn/ur+c5Xab7nztbL30dG31r4K+7r/Eu6Cv+6891EBj", + "YltFcO02AZvGa/G1VrTZ4Ngyi7R/7OiytQDRLA624Wtv5AB1xPgMjehxnqeXi+lZs6QCjAySU68rpOht", + "y4T3TXrPklrO+xfRct6/lJajATBc3ADyuhSebc6KHgchCbOI9Ezlhkxrlxkn/7R+46Gaa7DVMASbY301", + "W57pJBWDnh415BV/zFHqZpEWgaylbryhis0+u1SzHsaBNrh30KBJylzH2fbmt0KKtVjb7nf1j/4PKpvp", + "WDXSlPxVDztYKTXw9HxNWaIf85IS12lnaxlbFbdriT/Mcd4YfLhO6th7KbZlUrNtCW+dTAsWwu4NoWQs", + "9A68uRApP9jdxSkdk/3JGKepZ/X/XuQCK9Jifa9kki7/CHnL7L9ho3eEhLrcMKU7d2RR+k2HfOR/50rU", + "7dP/CwAA//8=", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/api/internal/api/spec_test.go b/packages/api/internal/api/spec_test.go index be4a62919f..9dc5c5791f 100644 --- a/packages/api/internal/api/spec_test.go +++ b/packages/api/internal/api/spec_test.go @@ -33,8 +33,8 @@ func TestSpecSecuritySchemeHeaderNames(t *testing.T) { {"Supabase1TokenAuth", auth.HeaderSupabaseToken}, {"Supabase2TeamAuth", auth.HeaderSupabaseTeam}, {"AuthProviderTeamAuth", auth.HeaderTeamID}, - {"AdminTokenAuth", auth.HeaderAdminToken}, - {"AdminTeamAuth", auth.HeaderTeamID}, + {"Admin1TokenAuth", auth.HeaderAdminToken}, + {"Admin2TeamAuth", auth.HeaderTeamID}, } for _, tc := range cases { @@ -78,8 +78,8 @@ func TestAuthProviderTeamAuthHeaderRoutes(t *testing.T) { "Supabase2TeamAuth": auth.HeaderSupabaseTeam, "AuthProviderBearerAuth": auth.HeaderAuthorization, "AuthProviderTeamAuth": auth.HeaderTeamID, - "AdminTokenAuth": auth.HeaderAdminToken, - "AdminTeamAuth": auth.HeaderTeamID, + "Admin1TokenAuth": auth.HeaderAdminToken, + "Admin2TeamAuth": auth.HeaderTeamID, } authFn := func(_ context.Context, input *openapi3filter.AuthenticationInput) error { @@ -147,3 +147,71 @@ func TestAuthProviderTeamAuthHeaderRoutes(t *testing.T) { require.Equal(t, "AuthProviderTeamAuth", gotSchemeName) require.Equal(t, wantToken, gotToken) } + +// TestAdminTeamAuthSchemeOrder verifies that the numbered admin security +// schemes validate the admin token before the team header. kin-openapi sorts +// schemes by name inside one security requirement. +func TestAdminTeamAuthSchemeOrder(t *testing.T) { + t.Parallel() + + swagger, err := GetSpec() + require.NoError(t, err) + swagger.Servers = nil + + var adminSchemeOrder []string + + schemeHeaders := map[string]string{ + "ApiKeyAuth": auth.HeaderAPIKey, + "AccessTokenAuth": auth.HeaderAuthorization, + "Supabase1TokenAuth": auth.HeaderSupabaseToken, + "Supabase2TeamAuth": auth.HeaderSupabaseTeam, + "AuthProviderBearerAuth": auth.HeaderAuthorization, + "AuthProviderTeamAuth": auth.HeaderTeamID, + "Admin1TokenAuth": auth.HeaderAdminToken, + "Admin2TeamAuth": auth.HeaderTeamID, + } + + authFn := func(_ context.Context, input *openapi3filter.AuthenticationInput) error { + header, ok := schemeHeaders[input.SecuritySchemeName] + if !ok { + return http.ErrNoCookie + } + + if value := input.RequestValidationInput.Request.Header.Get(header); value == "" { + return http.ErrNoCookie + } + + switch input.SecuritySchemeName { + case "Admin1TokenAuth", "Admin2TeamAuth": + adminSchemeOrder = append(adminSchemeOrder, input.SecuritySchemeName) + } + + return nil + } + + r := gin.New() + r.Use(middleware.OapiRequestValidatorWithOptions(swagger, &middleware.Options{ + Options: openapi3filter.Options{ + AuthenticationFunc: authFn, + MultiError: true, + }, + SilenceServersWarning: true, + })) + + r.NoRoute(func(c *gin.Context) { + c.Status(http.StatusOK) + }) + r.Any("/*any", func(c *gin.Context) { + c.Status(http.StatusOK) + }) + + req := httptest.NewRequestWithContext(t.Context(), http.MethodGet, "/api-keys", nil) + req.Header.Set(auth.HeaderAdminToken, "admin-token") + req.Header.Set(auth.HeaderTeamID, "team-id") + + rr := httptest.NewRecorder() + r.ServeHTTP(rr, req) + + require.Equal(t, http.StatusOK, rr.Code, "request with admin token and team header should pass auth (body: %s)", rr.Body.String()) + require.Equal(t, []string{"Admin1TokenAuth", "Admin2TeamAuth"}, adminSchemeOrder) +} diff --git a/packages/api/main.go b/packages/api/main.go index aff88d2a49..7468cb0142 100644 --- a/packages/api/main.go +++ b/packages/api/main.go @@ -197,8 +197,8 @@ func NewGinServer(ctx context.Context, config cfg.Config, tel *telemetry.Client, auth.NewSupabaseTokenAuthenticator(apiStore.GetUserIDFromAuthProviderToken), auth.NewSupabaseTeamAuthenticator(apiStore.GetTeamFromSupabaseToken), auth.NewAuthProviderTeamAuthenticator(apiStore.GetTeamFromAuthProviderToken), - auth.NewAdminTokenAuthenticator(config.AdminToken), - auth.NewAdminTeamAuthenticator(apiStore.GetTeamFromAdminToken), + auth.NewAdmin1TokenAuthenticator(config.AdminToken), + auth.NewAdmin2TeamAuthenticator(apiStore.GetTeamFromAdminToken), }, metricsMiddleware.SetProcessingStartTime, ) diff --git a/packages/auth/pkg/auth/middleware.go b/packages/auth/pkg/auth/middleware.go index 24a3817fd4..a7b87f5b01 100644 --- a/packages/auth/pkg/auth/middleware.go +++ b/packages/auth/pkg/auth/middleware.go @@ -213,8 +213,18 @@ func NewAuthProviderTeamAuthenticator(validationFunc func(ctx context.Context, g // NewAdminTokenAuthenticator creates an authenticator for the AdminTokenAuth security scheme (X-Admin-Token header). func NewAdminTokenAuthenticator(adminToken string) Authenticator { + return newAdminTokenAuthenticator("AdminTokenAuth", adminToken) +} + +// NewAdmin1TokenAuthenticator creates an authenticator for the Admin1TokenAuth security scheme (X-Admin-Token header). +// The numbered name ensures token auth sorts before Admin2TeamAuth in multi-scheme requirements. +func NewAdmin1TokenAuthenticator(adminToken string) Authenticator { + return newAdminTokenAuthenticator("Admin1TokenAuth", adminToken) +} + +func newAdminTokenAuthenticator(schemeName, adminToken string) Authenticator { return &commonAuthenticator[struct{}]{ - schemeName: "AdminTokenAuth", + schemeName: schemeName, header: headerKey{ name: HeaderAdminToken, }, @@ -224,10 +234,22 @@ func NewAdminTokenAuthenticator(adminToken string) Authenticator { } // NewAdminTeamAuthenticator creates an authenticator for AdminTeamAuth (X-Team-ID header). -// It is intended to be paired with AdminTokenAuth on routes that need team context. func NewAdminTeamAuthenticator(validationFunc func(ctx context.Context, ginCtx *gin.Context, teamID string) (*types.Team, *APIError)) Authenticator { + return newAdminTeamAuthenticator("AdminTeamAuth", validationFunc) +} + +// NewAdmin2TeamAuthenticator creates an authenticator for Admin2TeamAuth (X-Team-ID header). +// It is intended to be paired with Admin1TokenAuth on routes that need team context. +func NewAdmin2TeamAuthenticator(validationFunc func(ctx context.Context, ginCtx *gin.Context, teamID string) (*types.Team, *APIError)) Authenticator { + return newAdminTeamAuthenticator("Admin2TeamAuth", validationFunc) +} + +func newAdminTeamAuthenticator( + schemeName string, + validationFunc func(ctx context.Context, ginCtx *gin.Context, teamID string) (*types.Team, *APIError), +) Authenticator { return &commonAuthenticator[*types.Team]{ - schemeName: "AdminTeamAuth", + schemeName: schemeName, header: headerKey{ name: HeaderTeamID, }, diff --git a/packages/auth/pkg/auth/middleware_test.go b/packages/auth/pkg/auth/middleware_test.go index 9c49d391b9..d501f9c366 100644 --- a/packages/auth/pkg/auth/middleware_test.go +++ b/packages/auth/pkg/auth/middleware_test.go @@ -36,7 +36,7 @@ func TestAdminValidationFunction(t *testing.T) { }) } -func TestAdminTeamAuthenticatorSetsTeamContext(t *testing.T) { +func TestAdmin2TeamAuthenticatorSetsTeamContext(t *testing.T) { t.Parallel() ctx := context.Background() @@ -47,7 +47,7 @@ func TestAdminTeamAuthenticatorSetsTeamContext(t *testing.T) { req.Header.Set(HeaderTeamID, teamID.String()) ginCtx, _ := gin.CreateTestContext(httptest.NewRecorder()) - authenticator := NewAdminTeamAuthenticator(func(_ context.Context, _ *gin.Context, gotTeamID string) (*types.Team, *APIError) { + authenticator := NewAdmin2TeamAuthenticator(func(_ context.Context, _ *gin.Context, gotTeamID string) (*types.Team, *APIError) { if gotTeamID != teamID.String() { return nil, &APIError{ Err: ErrInvalidAuthHeader, @@ -58,15 +58,15 @@ func TestAdminTeamAuthenticatorSetsTeamContext(t *testing.T) { return team, nil }) - if got, want := authenticator.SecuritySchemeName(), "AdminTeamAuth"; got != want { - t.Fatalf("NewAdminTeamAuthenticator().SecuritySchemeName() = %q, want %q", got, want) + if got, want := authenticator.SecuritySchemeName(), "Admin2TeamAuth"; got != want { + t.Fatalf("NewAdmin2TeamAuthenticator().SecuritySchemeName() = %q, want %q", got, want) } err := authenticator.Authenticate(ctx, ginCtx, &openapi3filter.AuthenticationInput{ RequestValidationInput: &openapi3filter.RequestValidationInput{Request: req}, }) if err != nil { - t.Fatalf("AdminTeamAuth.Authenticate(valid team ID) error: %v", err) + t.Fatalf("Admin2TeamAuth.Authenticate(valid team ID) error: %v", err) } got, ok := GetTeamInfo(ginCtx) diff --git a/spec/openapi.yml b/spec/openapi.yml index 3643b703ad..2bd89e3207 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -37,11 +37,13 @@ components: type: apiKey in: header name: X-Team-ID - AdminTokenAuth: + # Admin1TokenAuth / Admin2TeamAuth: numbered names ensure token + # validation runs before team context population. + Admin1TokenAuth: type: apiKey in: header name: X-Admin-Token - AdminTeamAuth: + Admin2TeamAuth: type: apiKey in: header name: X-Team-ID @@ -1947,8 +1949,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" - in: query @@ -1993,8 +1995,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" - in: query @@ -2044,8 +2046,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - name: metadata in: query @@ -2077,8 +2079,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -2109,8 +2111,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - name: metadata in: query @@ -2156,8 +2158,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - name: sandbox_ids in: query @@ -2195,8 +2197,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2238,8 +2240,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2298,8 +2300,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2325,8 +2327,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2349,8 +2351,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2397,8 +2399,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2424,8 +2426,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2460,8 +2462,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2501,8 +2503,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] tags: [sandboxes] requestBody: content: @@ -2530,8 +2532,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] tags: [sandboxes] requestBody: required: true @@ -2562,8 +2564,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] tags: [sandboxes] requestBody: content: @@ -2590,8 +2592,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2626,8 +2628,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - name: sandboxID in: query @@ -2661,8 +2663,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -2697,8 +2699,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -2731,8 +2733,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - in: path @@ -2769,8 +2771,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - in: query required: false @@ -2801,8 +2803,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -2834,8 +2836,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/paginationNextToken" @@ -2861,8 +2863,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2893,8 +2895,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" responses: @@ -2915,8 +2917,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2946,8 +2948,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -2969,8 +2971,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -2999,8 +3001,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -3034,8 +3036,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3085,8 +3087,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3143,8 +3145,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -3175,8 +3177,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -3205,8 +3207,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" responses: @@ -3237,8 +3239,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - name: alias in: path @@ -3267,7 +3269,7 @@ paths: description: List all nodes tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - in: query name: clusterID @@ -3295,7 +3297,7 @@ paths: description: Get node info tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - $ref: "#/components/parameters/nodeID" - in: query @@ -3322,7 +3324,7 @@ paths: description: Change status of a node tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - $ref: "#/components/parameters/nodeID" requestBody: @@ -3346,7 +3348,7 @@ paths: description: Kills all sandboxes for the specified team tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - name: teamID in: path @@ -3375,7 +3377,7 @@ paths: description: Cancels all in-progress and pending builds for the specified team tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - name: teamID in: path @@ -3404,7 +3406,7 @@ paths: description: Creates a team API key for internal service workflows. tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - name: teamID in: path @@ -3443,7 +3445,7 @@ paths: description: Deletes a team API key for internal service workflows. tags: [admin] security: - - AdminTokenAuth: [] + - Admin1TokenAuth: [] parameters: - name: teamID in: path @@ -3518,8 +3520,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] responses: "200": description: Successfully returned all team API keys @@ -3541,8 +3543,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -3570,8 +3572,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" requestBody: @@ -3597,8 +3599,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" responses: @@ -3621,8 +3623,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] responses: "200": description: Successfully listed all team volumes @@ -3646,8 +3648,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] requestBody: required: true content: @@ -3678,8 +3680,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" responses: @@ -3705,8 +3707,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminTokenAuth: [] - AdminTeamAuth: [] + - Admin1TokenAuth: [] + Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" responses: From dfd30037f9ab1d9cfe046a39523d3d6154782fd9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jun 2026 20:03:59 +0000 Subject: [PATCH 04/10] chore: auto-commit generated changes --- tests/integration/internal/api/generated.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go index 400ad952f7..c6db9788cf 100644 --- a/tests/integration/internal/api/generated.go +++ b/tests/integration/internal/api/generated.go @@ -21,8 +21,8 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" - AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" - AdminTokenAuthScopes adminTokenAuthContextKey = "AdminTokenAuth.Scopes" + Admin1TokenAuthScopes admin1TokenAuthContextKey = "Admin1TokenAuth.Scopes" + Admin2TeamAuthScopes admin2TeamAuthContextKey = "Admin2TeamAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" AuthProviderTeamAuthScopes authProviderTeamAuthContextKey = "AuthProviderTeamAuth.Scopes" @@ -1458,11 +1458,11 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string -// adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme -type adminTeamAuthContextKey string +// admin1TokenAuthContextKey is the context key for Admin1TokenAuth security scheme +type admin1TokenAuthContextKey string -// adminTokenAuthContextKey is the context key for AdminTokenAuth security scheme -type adminTokenAuthContextKey string +// admin2TeamAuthContextKey is the context key for Admin2TeamAuth security scheme +type admin2TeamAuthContextKey string // apiKeyAuthContextKey is the context key for ApiKeyAuth security scheme type apiKeyAuthContextKey string From 0d24325700576c3707f0132fad8ba6ee172bf447 Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Sat, 6 Jun 2026 00:18:31 -0700 Subject: [PATCH 05/10] fix: address admin team auth review comments --- packages/api/internal/api/api.gen.go | 116 ++++++++++-------------- packages/api/internal/handlers/store.go | 20 +++- spec/openapi.yml | 8 -- 3 files changed, 68 insertions(+), 76 deletions(-) diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go index e695a5dafc..6c2ddbd88b 100644 --- a/packages/api/internal/api/api.gen.go +++ b/packages/api/internal/api/api.gen.go @@ -11461,10 +11461,6 @@ func (siw *ServerInterfaceWrapper) PostApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) - - c.Set(string(Admin2TeamAuthScopes), []string{}) - for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12488,10 +12484,6 @@ func (siw *ServerInterfaceWrapper) PostTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) - - c.Set(string(Admin2TeamAuthScopes), []string{}) - for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12760,10 +12752,6 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) - - c.Set(string(Admin2TeamAuthScopes), []string{}) - for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -12808,10 +12796,6 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTemplateIDBuildsBuildID(c *gin.C c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) - - c.Set(string(Admin2TeamAuthScopes), []string{}) - for _, middleware := range siw.HandlerMiddlewares { middleware(c) if c.IsAborted() { @@ -13713,56 +13697,56 @@ var swaggerSpec = []string{ "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", - "7dP/CwAA//8=", + "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", + "XIm6ffp/AQAA//8=", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/api/internal/handlers/store.go b/packages/api/internal/handlers/store.go index 9407bd3dd4..19eedc27ff 100644 --- a/packages/api/internal/handlers/store.go +++ b/packages/api/internal/handlers/store.go @@ -2,6 +2,7 @@ package handlers import ( "context" + "database/sql" "errors" "fmt" "math" @@ -421,12 +422,27 @@ func (a *APIStore) GetTeamFromAdminToken(ctx context.Context, _ *gin.Context, te } } + if errors.Is(err, sql.ErrNoRows) { + return nil, &api.APIError{ + Code: http.StatusNotFound, + ClientMsg: "Team not found", + Err: fmt.Errorf("failed getting team: %w", err), + } + } + return nil, &api.APIError{ - Code: http.StatusUnauthorized, - ClientMsg: "Backend authentication failed", + Code: http.StatusNotFound, + ClientMsg: "Team not found", Err: fmt.Errorf("failed getting team: %w", err), } } + if team == nil { + return nil, &api.APIError{ + Code: http.StatusNotFound, + ClientMsg: "Team not found", + Err: errors.New("team not found"), + } + } return team, nil } diff --git a/spec/openapi.yml b/spec/openapi.yml index 2bd89e3207..5f53a4fa90 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -2803,8 +2803,6 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] requestBody: required: true content: @@ -2863,8 +2861,6 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2948,8 +2944,6 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3543,8 +3537,6 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] requestBody: required: true content: From 3a4d0046d9fe0811ed851a73091da7e5e84886b7 Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Sat, 6 Jun 2026 00:21:33 -0700 Subject: [PATCH 06/10] fix: preserve admin team lookup failures --- packages/api/internal/handlers/store.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api/internal/handlers/store.go b/packages/api/internal/handlers/store.go index 19eedc27ff..d1149de09d 100644 --- a/packages/api/internal/handlers/store.go +++ b/packages/api/internal/handlers/store.go @@ -431,8 +431,8 @@ func (a *APIStore) GetTeamFromAdminToken(ctx context.Context, _ *gin.Context, te } return nil, &api.APIError{ - Code: http.StatusNotFound, - ClientMsg: "Team not found", + Code: http.StatusInternalServerError, + ClientMsg: "Backend authentication failed", Err: fmt.Errorf("failed getting team: %w", err), } } From 8040b200493da10aa67916df535061cab9a45154 Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Sat, 6 Jun 2026 00:25:17 -0700 Subject: [PATCH 07/10] fix: use db not found helper for admin auth --- packages/api/internal/handlers/store.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api/internal/handlers/store.go b/packages/api/internal/handlers/store.go index d1149de09d..a220b8e785 100644 --- a/packages/api/internal/handlers/store.go +++ b/packages/api/internal/handlers/store.go @@ -2,7 +2,6 @@ package handlers import ( "context" - "database/sql" "errors" "fmt" "math" @@ -36,6 +35,7 @@ import ( clickhouse "github.com/e2b-dev/infra/packages/clickhouse/pkg" sqlcdb "github.com/e2b-dev/infra/packages/db/client" authdb "github.com/e2b-dev/infra/packages/db/pkg/auth" + "github.com/e2b-dev/infra/packages/db/pkg/dberrors" "github.com/e2b-dev/infra/packages/db/pkg/pool" "github.com/e2b-dev/infra/packages/shared/pkg/apierrors" "github.com/e2b-dev/infra/packages/shared/pkg/consts" @@ -422,7 +422,7 @@ func (a *APIStore) GetTeamFromAdminToken(ctx context.Context, _ *gin.Context, te } } - if errors.Is(err, sql.ErrNoRows) { + if dberrors.IsNotFoundError(err) { return nil, &api.APIError{ Code: http.StatusNotFound, ClientMsg: "Team not found", From 965ca8479de664eaa6625ca80a73373f664ee8e5 Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Sun, 7 Jun 2026 23:39:36 -0700 Subject: [PATCH 08/10] fix(auth): rename admin auth schemes --- packages/api/internal/api/api.gen.go | 316 +++++++++--------- packages/api/internal/api/spec_test.go | 18 +- packages/api/main.go | 4 +- packages/auth/pkg/auth/middleware.go | 20 +- packages/auth/pkg/auth/middleware_test.go | 10 +- .../dashboard-api/internal/api/api.gen.go | 156 ++++----- packages/dashboard-api/main.go | 2 +- spec/openapi-dashboard.yml | 14 +- spec/openapi.yml | 184 +++++----- tests/integration/internal/api/generated.go | 12 +- 10 files changed, 362 insertions(+), 374 deletions(-) diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go index 6c2ddbd88b..cdd417be8f 100644 --- a/packages/api/internal/api/api.gen.go +++ b/packages/api/internal/api/api.gen.go @@ -26,8 +26,8 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" - Admin1TokenAuthScopes admin1TokenAuthContextKey = "Admin1TokenAuth.Scopes" - Admin2TeamAuthScopes admin2TeamAuthContextKey = "Admin2TeamAuth.Scopes" + AdminApiTokenAuthScopes adminApiTokenAuthContextKey = "AdminApiTokenAuth.Scopes" + AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" AuthProviderTeamAuthScopes authProviderTeamAuthContextKey = "AuthProviderTeamAuth.Scopes" @@ -1463,11 +1463,11 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string -// admin1TokenAuthContextKey is the context key for Admin1TokenAuth security scheme -type admin1TokenAuthContextKey string +// adminApiTokenAuthContextKey is the context key for AdminApiTokenAuth security scheme +type adminApiTokenAuthContextKey string -// admin2TeamAuthContextKey is the context key for Admin2TeamAuth security scheme -type admin2TeamAuthContextKey string +// adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme +type adminTeamAuthContextKey string // apiKeyAuthContextKey is the context key for ApiKeyAuth security scheme type apiKeyAuthContextKey string @@ -11323,7 +11323,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDApiKeys(c *gin.Context) { return } - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11359,7 +11359,7 @@ func (siw *ServerInterfaceWrapper) DeleteAdminTeamsTeamIDApiKeysApiKeyID(c *gin. return } - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11386,7 +11386,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDBuildsCancel(c *gin.Conte return } - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11413,7 +11413,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDSandboxesKill(c *gin.Cont return } - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11436,9 +11436,9 @@ func (siw *ServerInterfaceWrapper) GetApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11494,9 +11494,9 @@ func (siw *ServerInterfaceWrapper) DeleteApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11531,9 +11531,9 @@ func (siw *ServerInterfaceWrapper) PatchApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11564,7 +11564,7 @@ func (siw *ServerInterfaceWrapper) GetNodes(c *gin.Context) { var err error _ = err - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetNodesParams @@ -11602,7 +11602,7 @@ func (siw *ServerInterfaceWrapper) GetNodesNodeID(c *gin.Context) { return } - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetNodesNodeIDParams @@ -11640,7 +11640,7 @@ func (siw *ServerInterfaceWrapper) PostNodesNodeID(c *gin.Context) { return } - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11668,9 +11668,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesParams @@ -11706,9 +11706,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11736,9 +11736,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesMetricsParams @@ -11786,9 +11786,9 @@ func (siw *ServerInterfaceWrapper) DeleteSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11825,9 +11825,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11864,9 +11864,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDConnect(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11903,9 +11903,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesSandboxIDLogsParams @@ -11961,9 +11961,9 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDMetrics(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSandboxesSandboxIDMetricsParams @@ -12019,9 +12019,9 @@ func (siw *ServerInterfaceWrapper) PutSandboxesSandboxIDNetwork(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12058,9 +12058,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDPause(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12097,9 +12097,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDRefreshes(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12136,9 +12136,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDResume(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12175,9 +12175,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDSnapshots(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12214,9 +12214,9 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDTimeout(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12244,9 +12244,9 @@ func (siw *ServerInterfaceWrapper) GetSnapshots(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetSnapshotsParams @@ -12329,9 +12329,9 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTeamsTeamIDMetricsParams @@ -12387,9 +12387,9 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetricsMax(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTeamsTeamIDMetricsMaxParams @@ -12446,9 +12446,9 @@ func (siw *ServerInterfaceWrapper) GetTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesParams @@ -12519,9 +12519,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesAliasesAlias(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12546,9 +12546,9 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12573,9 +12573,9 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12614,9 +12614,9 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12653,9 +12653,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDParams @@ -12713,9 +12713,9 @@ func (siw *ServerInterfaceWrapper) PatchTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -12842,9 +12842,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDLogs(c *gi c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDBuildsBuildIDLogsParams @@ -12935,9 +12935,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDStatus(c * c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetTemplatesTemplateIDBuildsBuildIDStatusParams @@ -13012,9 +13012,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDFilesHash(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13051,9 +13051,9 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13081,9 +13081,9 @@ func (siw *ServerInterfaceWrapper) GetV2Sandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetV2SandboxesParams @@ -13155,9 +13155,9 @@ func (siw *ServerInterfaceWrapper) GetV2SandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetV2SandboxesSandboxIDLogsParams @@ -13225,9 +13225,9 @@ func (siw *ServerInterfaceWrapper) PostV2Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13266,9 +13266,9 @@ func (siw *ServerInterfaceWrapper) PatchV2TemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13314,9 +13314,9 @@ func (siw *ServerInterfaceWrapper) PostV2TemplatesTemplateIDBuildsBuildID(c *gin c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13341,9 +13341,9 @@ func (siw *ServerInterfaceWrapper) PostV3Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13368,9 +13368,9 @@ func (siw *ServerInterfaceWrapper) GetVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13395,9 +13395,9 @@ func (siw *ServerInterfaceWrapper) PostVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13434,9 +13434,9 @@ func (siw *ServerInterfaceWrapper) DeleteVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13473,9 +13473,9 @@ func (siw *ServerInterfaceWrapper) GetVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(Admin1TokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) - c.Set(string(Admin2TeamAuthScopes), []string{}) + c.Set(string(AdminTeamAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -13684,69 +13684,69 @@ var swaggerSpec = []string{ "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", - "XIm6ffp/AQAA//8=", + "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", + "v3NF6vbp/wUAAP//", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/api/internal/api/spec_test.go b/packages/api/internal/api/spec_test.go index 9dc5c5791f..70c93f811a 100644 --- a/packages/api/internal/api/spec_test.go +++ b/packages/api/internal/api/spec_test.go @@ -33,8 +33,8 @@ func TestSpecSecuritySchemeHeaderNames(t *testing.T) { {"Supabase1TokenAuth", auth.HeaderSupabaseToken}, {"Supabase2TeamAuth", auth.HeaderSupabaseTeam}, {"AuthProviderTeamAuth", auth.HeaderTeamID}, - {"Admin1TokenAuth", auth.HeaderAdminToken}, - {"Admin2TeamAuth", auth.HeaderTeamID}, + {"AdminApiTokenAuth", auth.HeaderAdminToken}, + {"AdminTeamAuth", auth.HeaderTeamID}, } for _, tc := range cases { @@ -78,8 +78,8 @@ func TestAuthProviderTeamAuthHeaderRoutes(t *testing.T) { "Supabase2TeamAuth": auth.HeaderSupabaseTeam, "AuthProviderBearerAuth": auth.HeaderAuthorization, "AuthProviderTeamAuth": auth.HeaderTeamID, - "Admin1TokenAuth": auth.HeaderAdminToken, - "Admin2TeamAuth": auth.HeaderTeamID, + "AdminApiTokenAuth": auth.HeaderAdminToken, + "AdminTeamAuth": auth.HeaderTeamID, } authFn := func(_ context.Context, input *openapi3filter.AuthenticationInput) error { @@ -148,7 +148,7 @@ func TestAuthProviderTeamAuthHeaderRoutes(t *testing.T) { require.Equal(t, wantToken, gotToken) } -// TestAdminTeamAuthSchemeOrder verifies that the numbered admin security +// TestAdminTeamAuthSchemeOrder verifies that the admin security // schemes validate the admin token before the team header. kin-openapi sorts // schemes by name inside one security requirement. func TestAdminTeamAuthSchemeOrder(t *testing.T) { @@ -167,8 +167,8 @@ func TestAdminTeamAuthSchemeOrder(t *testing.T) { "Supabase2TeamAuth": auth.HeaderSupabaseTeam, "AuthProviderBearerAuth": auth.HeaderAuthorization, "AuthProviderTeamAuth": auth.HeaderTeamID, - "Admin1TokenAuth": auth.HeaderAdminToken, - "Admin2TeamAuth": auth.HeaderTeamID, + "AdminApiTokenAuth": auth.HeaderAdminToken, + "AdminTeamAuth": auth.HeaderTeamID, } authFn := func(_ context.Context, input *openapi3filter.AuthenticationInput) error { @@ -182,7 +182,7 @@ func TestAdminTeamAuthSchemeOrder(t *testing.T) { } switch input.SecuritySchemeName { - case "Admin1TokenAuth", "Admin2TeamAuth": + case "AdminApiTokenAuth", "AdminTeamAuth": adminSchemeOrder = append(adminSchemeOrder, input.SecuritySchemeName) } @@ -213,5 +213,5 @@ func TestAdminTeamAuthSchemeOrder(t *testing.T) { r.ServeHTTP(rr, req) require.Equal(t, http.StatusOK, rr.Code, "request with admin token and team header should pass auth (body: %s)", rr.Body.String()) - require.Equal(t, []string{"Admin1TokenAuth", "Admin2TeamAuth"}, adminSchemeOrder) + require.Equal(t, []string{"AdminApiTokenAuth", "AdminTeamAuth"}, adminSchemeOrder) } diff --git a/packages/api/main.go b/packages/api/main.go index 7468cb0142..db4c5a6f31 100644 --- a/packages/api/main.go +++ b/packages/api/main.go @@ -197,8 +197,8 @@ func NewGinServer(ctx context.Context, config cfg.Config, tel *telemetry.Client, auth.NewSupabaseTokenAuthenticator(apiStore.GetUserIDFromAuthProviderToken), auth.NewSupabaseTeamAuthenticator(apiStore.GetTeamFromSupabaseToken), auth.NewAuthProviderTeamAuthenticator(apiStore.GetTeamFromAuthProviderToken), - auth.NewAdmin1TokenAuthenticator(config.AdminToken), - auth.NewAdmin2TeamAuthenticator(apiStore.GetTeamFromAdminToken), + auth.NewAdminApiTokenAuthenticator(config.AdminToken), + auth.NewAdminTeamAuthenticator(apiStore.GetTeamFromAdminToken), }, metricsMiddleware.SetProcessingStartTime, ) diff --git a/packages/auth/pkg/auth/middleware.go b/packages/auth/pkg/auth/middleware.go index a7b87f5b01..9add47763b 100644 --- a/packages/auth/pkg/auth/middleware.go +++ b/packages/auth/pkg/auth/middleware.go @@ -211,18 +211,12 @@ func NewAuthProviderTeamAuthenticator(validationFunc func(ctx context.Context, g } } -// NewAdminTokenAuthenticator creates an authenticator for the AdminTokenAuth security scheme (X-Admin-Token header). -func NewAdminTokenAuthenticator(adminToken string) Authenticator { - return newAdminTokenAuthenticator("AdminTokenAuth", adminToken) +// NewAdminApiTokenAuthenticator creates an authenticator for the AdminApiTokenAuth security scheme (X-Admin-Token header). +func NewAdminApiTokenAuthenticator(adminToken string) Authenticator { + return newAdminApiTokenAuthenticator("AdminApiTokenAuth", adminToken) } -// NewAdmin1TokenAuthenticator creates an authenticator for the Admin1TokenAuth security scheme (X-Admin-Token header). -// The numbered name ensures token auth sorts before Admin2TeamAuth in multi-scheme requirements. -func NewAdmin1TokenAuthenticator(adminToken string) Authenticator { - return newAdminTokenAuthenticator("Admin1TokenAuth", adminToken) -} - -func newAdminTokenAuthenticator(schemeName, adminToken string) Authenticator { +func newAdminApiTokenAuthenticator(schemeName, adminToken string) Authenticator { return &commonAuthenticator[struct{}]{ schemeName: schemeName, header: headerKey{ @@ -238,12 +232,6 @@ func NewAdminTeamAuthenticator(validationFunc func(ctx context.Context, ginCtx * return newAdminTeamAuthenticator("AdminTeamAuth", validationFunc) } -// NewAdmin2TeamAuthenticator creates an authenticator for Admin2TeamAuth (X-Team-ID header). -// It is intended to be paired with Admin1TokenAuth on routes that need team context. -func NewAdmin2TeamAuthenticator(validationFunc func(ctx context.Context, ginCtx *gin.Context, teamID string) (*types.Team, *APIError)) Authenticator { - return newAdminTeamAuthenticator("Admin2TeamAuth", validationFunc) -} - func newAdminTeamAuthenticator( schemeName string, validationFunc func(ctx context.Context, ginCtx *gin.Context, teamID string) (*types.Team, *APIError), diff --git a/packages/auth/pkg/auth/middleware_test.go b/packages/auth/pkg/auth/middleware_test.go index d501f9c366..9c49d391b9 100644 --- a/packages/auth/pkg/auth/middleware_test.go +++ b/packages/auth/pkg/auth/middleware_test.go @@ -36,7 +36,7 @@ func TestAdminValidationFunction(t *testing.T) { }) } -func TestAdmin2TeamAuthenticatorSetsTeamContext(t *testing.T) { +func TestAdminTeamAuthenticatorSetsTeamContext(t *testing.T) { t.Parallel() ctx := context.Background() @@ -47,7 +47,7 @@ func TestAdmin2TeamAuthenticatorSetsTeamContext(t *testing.T) { req.Header.Set(HeaderTeamID, teamID.String()) ginCtx, _ := gin.CreateTestContext(httptest.NewRecorder()) - authenticator := NewAdmin2TeamAuthenticator(func(_ context.Context, _ *gin.Context, gotTeamID string) (*types.Team, *APIError) { + authenticator := NewAdminTeamAuthenticator(func(_ context.Context, _ *gin.Context, gotTeamID string) (*types.Team, *APIError) { if gotTeamID != teamID.String() { return nil, &APIError{ Err: ErrInvalidAuthHeader, @@ -58,15 +58,15 @@ func TestAdmin2TeamAuthenticatorSetsTeamContext(t *testing.T) { return team, nil }) - if got, want := authenticator.SecuritySchemeName(), "Admin2TeamAuth"; got != want { - t.Fatalf("NewAdmin2TeamAuthenticator().SecuritySchemeName() = %q, want %q", got, want) + if got, want := authenticator.SecuritySchemeName(), "AdminTeamAuth"; got != want { + t.Fatalf("NewAdminTeamAuthenticator().SecuritySchemeName() = %q, want %q", got, want) } err := authenticator.Authenticate(ctx, ginCtx, &openapi3filter.AuthenticationInput{ RequestValidationInput: &openapi3filter.RequestValidationInput{Request: req}, }) if err != nil { - t.Fatalf("Admin2TeamAuth.Authenticate(valid team ID) error: %v", err) + t.Fatalf("AdminTeamAuth.Authenticate(valid team ID) error: %v", err) } got, ok := GetTeamInfo(ginCtx) diff --git a/packages/dashboard-api/internal/api/api.gen.go b/packages/dashboard-api/internal/api/api.gen.go index 74ab9efdba..0bc64e25d8 100644 --- a/packages/dashboard-api/internal/api/api.gen.go +++ b/packages/dashboard-api/internal/api/api.gen.go @@ -21,7 +21,7 @@ import ( ) const ( - AdminTokenAuthScopes adminTokenAuthContextKey = "AdminTokenAuth.Scopes" + AdminApiTokenAuthScopes adminApiTokenAuthContextKey = "AdminApiTokenAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" AuthProviderTeamAuthScopes authProviderTeamAuthContextKey = "AuthProviderTeamAuth.Scopes" Supabase1TokenAuthScopes supabase1TokenAuthContextKey = "Supabase1TokenAuth.Scopes" @@ -506,8 +506,8 @@ type N500 = Error // N502 defines model for 502. type N502 = Error -// adminTokenAuthContextKey is the context key for AdminTokenAuth security scheme -type adminTokenAuthContextKey string +// adminApiTokenAuthContextKey is the context key for AdminApiTokenAuth security scheme +type adminApiTokenAuthContextKey string // authProviderBearerAuthContextKey is the context key for AuthProviderBearerAuth security scheme type authProviderBearerAuthContextKey string @@ -672,7 +672,7 @@ type MiddlewareFunc func(c *gin.Context) // PostAdminTeamsBootstrap operation middleware func (siw *ServerInterfaceWrapper) PostAdminTeamsBootstrap(c *gin.Context) { - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -687,7 +687,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsBootstrap(c *gin.Context) { // PostAdminUserProfilesByEmail operation middleware func (siw *ServerInterfaceWrapper) PostAdminUserProfilesByEmail(c *gin.Context) { - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -702,7 +702,7 @@ func (siw *ServerInterfaceWrapper) PostAdminUserProfilesByEmail(c *gin.Context) // PostAdminUserProfilesResolve operation middleware func (siw *ServerInterfaceWrapper) PostAdminUserProfilesResolve(c *gin.Context) { - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -729,7 +729,7 @@ func (siw *ServerInterfaceWrapper) GetAdminUserProfilesUserId(c *gin.Context) { return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -744,7 +744,7 @@ func (siw *ServerInterfaceWrapper) GetAdminUserProfilesUserId(c *gin.Context) { // PostAdminUsersBootstrap operation middleware func (siw *ServerInterfaceWrapper) PostAdminUsersBootstrap(c *gin.Context) { - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -771,7 +771,7 @@ func (siw *ServerInterfaceWrapper) PostAdminUsersUserIdBootstrap(c *gin.Context) return } - c.Set(string(AdminTokenAuthScopes), []string{}) + c.Set(string(AdminApiTokenAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -1316,75 +1316,75 @@ func RegisterHandlersWithOptions(router gin.IRouter, si ServerInterface, options // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", - "HrhxN982/woAAP//", + "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", + "zQ7YeODGXX1b/SsAAP//", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/dashboard-api/main.go b/packages/dashboard-api/main.go index b15048097f..dd5b5eb852 100644 --- a/packages/dashboard-api/main.go +++ b/packages/dashboard-api/main.go @@ -230,7 +230,7 @@ func run() int { authenticationFunc := sharedauth.CreateAuthenticationFunc( []sharedauth.Authenticator{ - sharedauth.NewAdminTokenAuthenticator(config.AdminToken), + sharedauth.NewAdminApiTokenAuthenticator(config.AdminToken), sharedauth.NewAuthProviderBearerAuthenticator(apiStore.GetUserIDFromAuthProviderToken), sharedauth.NewSupabaseTokenAuthenticator(apiStore.GetUserIDFromAuthProviderToken), sharedauth.NewSupabaseTeamAuthenticator(apiStore.GetTeamFromSupabaseToken), diff --git a/spec/openapi-dashboard.yml b/spec/openapi-dashboard.yml index 7d1095207b..d872a71e6e 100644 --- a/spec/openapi-dashboard.yml +++ b/spec/openapi-dashboard.yml @@ -6,7 +6,7 @@ info: components: securitySchemes: - AdminTokenAuth: + AdminApiTokenAuth: type: apiKey in: header name: X-Admin-Token @@ -1054,7 +1054,7 @@ paths: summary: Bootstrap user tags: [teams] security: - - AdminTokenAuth: [] + - AdminApiTokenAuth: [] parameters: - $ref: "#/components/parameters/userId" responses: @@ -1074,7 +1074,7 @@ paths: summary: Bootstrap auth provider user tags: [teams] security: - - AdminTokenAuth: [] + - AdminApiTokenAuth: [] requestBody: required: true content: @@ -1101,7 +1101,7 @@ paths: description: Creates and provisions a team for an admin-authenticated bootstrap workflow. tags: [admin] security: - - AdminTokenAuth: [] + - AdminApiTokenAuth: [] requestBody: required: true content: @@ -1129,7 +1129,7 @@ paths: summary: Resolve user profiles tags: [admin] security: - - AdminTokenAuth: [] + - AdminApiTokenAuth: [] requestBody: required: true content: @@ -1155,7 +1155,7 @@ paths: summary: Lookup user profiles by email tags: [admin] security: - - AdminTokenAuth: [] + - AdminApiTokenAuth: [] requestBody: required: true content: @@ -1181,7 +1181,7 @@ paths: summary: Get user profile tags: [admin] security: - - AdminTokenAuth: [] + - AdminApiTokenAuth: [] parameters: - $ref: "#/components/parameters/userId" responses: diff --git a/spec/openapi.yml b/spec/openapi.yml index 5f53a4fa90..1c40a40b90 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -37,13 +37,13 @@ components: type: apiKey in: header name: X-Team-ID - # Admin1TokenAuth / Admin2TeamAuth: numbered names ensure token + # AdminApiTokenAuth / AdminTeamAuth: alphabetical names ensure token # validation runs before team context population. - Admin1TokenAuth: + AdminApiTokenAuth: type: apiKey in: header name: X-Admin-Token - Admin2TeamAuth: + AdminTeamAuth: type: apiKey in: header name: X-Team-ID @@ -1949,8 +1949,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" - in: query @@ -1995,8 +1995,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" - in: query @@ -2046,8 +2046,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - name: metadata in: query @@ -2079,8 +2079,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2111,8 +2111,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - name: metadata in: query @@ -2158,8 +2158,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - name: sandbox_ids in: query @@ -2197,8 +2197,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2240,8 +2240,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2300,8 +2300,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2327,8 +2327,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2351,8 +2351,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" - in: query @@ -2399,8 +2399,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" responses: @@ -2426,8 +2426,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2462,8 +2462,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2503,8 +2503,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] tags: [sandboxes] requestBody: content: @@ -2532,8 +2532,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] tags: [sandboxes] requestBody: required: true @@ -2564,8 +2564,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] tags: [sandboxes] requestBody: content: @@ -2592,8 +2592,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" requestBody: @@ -2628,8 +2628,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - name: sandboxID in: query @@ -2663,8 +2663,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2699,8 +2699,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -2733,8 +2733,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - in: path @@ -2771,8 +2771,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - in: query required: false @@ -2834,8 +2834,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/paginationNextToken" @@ -2891,8 +2891,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" responses: @@ -2913,8 +2913,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -2965,8 +2965,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -2995,8 +2995,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" requestBody: @@ -3030,8 +3030,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3081,8 +3081,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" - $ref: "#/components/parameters/buildID" @@ -3139,8 +3139,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3171,8 +3171,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3201,8 +3201,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" responses: @@ -3233,8 +3233,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - name: alias in: path @@ -3263,7 +3263,7 @@ paths: description: List all nodes tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - in: query name: clusterID @@ -3291,7 +3291,7 @@ paths: description: Get node info tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - $ref: "#/components/parameters/nodeID" - in: query @@ -3318,7 +3318,7 @@ paths: description: Change status of a node tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - $ref: "#/components/parameters/nodeID" requestBody: @@ -3342,7 +3342,7 @@ paths: description: Kills all sandboxes for the specified team tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - name: teamID in: path @@ -3371,7 +3371,7 @@ paths: description: Cancels all in-progress and pending builds for the specified team tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - name: teamID in: path @@ -3400,7 +3400,7 @@ paths: description: Creates a team API key for internal service workflows. tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - name: teamID in: path @@ -3439,7 +3439,7 @@ paths: description: Deletes a team API key for internal service workflows. tags: [admin] security: - - Admin1TokenAuth: [] + - AdminApiTokenAuth: [] parameters: - name: teamID in: path @@ -3514,8 +3514,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] responses: "200": description: Successfully returned all team API keys @@ -3564,8 +3564,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" requestBody: @@ -3591,8 +3591,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" responses: @@ -3615,8 +3615,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] responses: "200": description: Successfully listed all team volumes @@ -3640,8 +3640,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] requestBody: required: true content: @@ -3672,8 +3672,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" responses: @@ -3699,8 +3699,8 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - Admin1TokenAuth: [] - Admin2TeamAuth: [] + - AdminApiTokenAuth: [] + AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" responses: diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go index c6db9788cf..7bb4d8a2e0 100644 --- a/tests/integration/internal/api/generated.go +++ b/tests/integration/internal/api/generated.go @@ -21,8 +21,8 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" - Admin1TokenAuthScopes admin1TokenAuthContextKey = "Admin1TokenAuth.Scopes" - Admin2TeamAuthScopes admin2TeamAuthContextKey = "Admin2TeamAuth.Scopes" + AdminApiTokenAuthScopes adminApiTokenAuthContextKey = "AdminApiTokenAuth.Scopes" + AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" AuthProviderTeamAuthScopes authProviderTeamAuthContextKey = "AuthProviderTeamAuth.Scopes" @@ -1458,11 +1458,11 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string -// admin1TokenAuthContextKey is the context key for Admin1TokenAuth security scheme -type admin1TokenAuthContextKey string +// adminApiTokenAuthContextKey is the context key for AdminApiTokenAuth security scheme +type adminApiTokenAuthContextKey string -// admin2TeamAuthContextKey is the context key for Admin2TeamAuth security scheme -type admin2TeamAuthContextKey string +// adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme +type adminTeamAuthContextKey string // apiKeyAuthContextKey is the context key for ApiKeyAuth security scheme type apiKeyAuthContextKey string From e7501ec04532b2a37824f30dd335cebae8c3d9ab Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Sun, 7 Jun 2026 23:47:03 -0700 Subject: [PATCH 09/10] fix(auth): use admin api key scheme name --- packages/api/internal/api/api.gen.go | 228 +++++++++--------- packages/api/internal/api/spec_test.go | 10 +- packages/api/main.go | 2 +- packages/auth/pkg/auth/middleware.go | 8 +- .../dashboard-api/internal/api/api.gen.go | 156 ++++++------ packages/dashboard-api/main.go | 2 +- spec/openapi-dashboard.yml | 14 +- spec/openapi.yml | 100 ++++---- tests/integration/internal/api/generated.go | 6 +- 9 files changed, 263 insertions(+), 263 deletions(-) diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go index cdd417be8f..e3bd92db38 100644 --- a/packages/api/internal/api/api.gen.go +++ b/packages/api/internal/api/api.gen.go @@ -26,7 +26,7 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" - AdminApiTokenAuthScopes adminApiTokenAuthContextKey = "AdminApiTokenAuth.Scopes" + AdminApiKeyAuthScopes adminApiKeyAuthContextKey = "AdminApiKeyAuth.Scopes" AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" @@ -1463,8 +1463,8 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string -// adminApiTokenAuthContextKey is the context key for AdminApiTokenAuth security scheme -type adminApiTokenAuthContextKey string +// adminApiKeyAuthContextKey is the context key for AdminApiKeyAuth security scheme +type adminApiKeyAuthContextKey string // adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme type adminTeamAuthContextKey string @@ -11323,7 +11323,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDApiKeys(c *gin.Context) { return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11359,7 +11359,7 @@ func (siw *ServerInterfaceWrapper) DeleteAdminTeamsTeamIDApiKeysApiKeyID(c *gin. return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11386,7 +11386,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDBuildsCancel(c *gin.Conte return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11413,7 +11413,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsTeamIDSandboxesKill(c *gin.Cont return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11436,7 +11436,7 @@ func (siw *ServerInterfaceWrapper) GetApiKeys(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11494,7 +11494,7 @@ func (siw *ServerInterfaceWrapper) DeleteApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11531,7 +11531,7 @@ func (siw *ServerInterfaceWrapper) PatchApiKeysApiKeyID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11564,7 +11564,7 @@ func (siw *ServerInterfaceWrapper) GetNodes(c *gin.Context) { var err error _ = err - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetNodesParams @@ -11602,7 +11602,7 @@ func (siw *ServerInterfaceWrapper) GetNodesNodeID(c *gin.Context) { return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) // Parameter object where we will unmarshal all parameters from the context var params GetNodesNodeIDParams @@ -11640,7 +11640,7 @@ func (siw *ServerInterfaceWrapper) PostNodesNodeID(c *gin.Context) { return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -11668,7 +11668,7 @@ func (siw *ServerInterfaceWrapper) GetSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11706,7 +11706,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11736,7 +11736,7 @@ func (siw *ServerInterfaceWrapper) GetSandboxesMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11786,7 +11786,7 @@ func (siw *ServerInterfaceWrapper) DeleteSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11825,7 +11825,7 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11864,7 +11864,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDConnect(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11903,7 +11903,7 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -11961,7 +11961,7 @@ func (siw *ServerInterfaceWrapper) GetSandboxesSandboxIDMetrics(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12019,7 +12019,7 @@ func (siw *ServerInterfaceWrapper) PutSandboxesSandboxIDNetwork(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12058,7 +12058,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDPause(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12097,7 +12097,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDRefreshes(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12136,7 +12136,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDResume(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12175,7 +12175,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDSnapshots(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12214,7 +12214,7 @@ func (siw *ServerInterfaceWrapper) PostSandboxesSandboxIDTimeout(c *gin.Context) c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12244,7 +12244,7 @@ func (siw *ServerInterfaceWrapper) GetSnapshots(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12329,7 +12329,7 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetrics(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12387,7 +12387,7 @@ func (siw *ServerInterfaceWrapper) GetTeamsTeamIDMetricsMax(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12446,7 +12446,7 @@ func (siw *ServerInterfaceWrapper) GetTemplates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12519,7 +12519,7 @@ func (siw *ServerInterfaceWrapper) GetTemplatesAliasesAlias(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12546,7 +12546,7 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12573,7 +12573,7 @@ func (siw *ServerInterfaceWrapper) PostTemplatesTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12614,7 +12614,7 @@ func (siw *ServerInterfaceWrapper) DeleteTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12653,7 +12653,7 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12713,7 +12713,7 @@ func (siw *ServerInterfaceWrapper) PatchTemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12842,7 +12842,7 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDLogs(c *gi c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -12935,7 +12935,7 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDBuildsBuildIDStatus(c * c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13012,7 +13012,7 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDFilesHash(c *gin.Contex c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13051,7 +13051,7 @@ func (siw *ServerInterfaceWrapper) GetTemplatesTemplateIDTags(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13081,7 +13081,7 @@ func (siw *ServerInterfaceWrapper) GetV2Sandboxes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13155,7 +13155,7 @@ func (siw *ServerInterfaceWrapper) GetV2SandboxesSandboxIDLogs(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13225,7 +13225,7 @@ func (siw *ServerInterfaceWrapper) PostV2Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13266,7 +13266,7 @@ func (siw *ServerInterfaceWrapper) PatchV2TemplatesTemplateID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13314,7 +13314,7 @@ func (siw *ServerInterfaceWrapper) PostV2TemplatesTemplateIDBuildsBuildID(c *gin c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13341,7 +13341,7 @@ func (siw *ServerInterfaceWrapper) PostV3Templates(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13368,7 +13368,7 @@ func (siw *ServerInterfaceWrapper) GetVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13395,7 +13395,7 @@ func (siw *ServerInterfaceWrapper) PostVolumes(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13434,7 +13434,7 @@ func (siw *ServerInterfaceWrapper) DeleteVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13473,7 +13473,7 @@ func (siw *ServerInterfaceWrapper) GetVolumesVolumeID(c *gin.Context) { c.Set(string(AuthProviderTeamAuthScopes), []string{}) - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) c.Set(string(AdminTeamAuthScopes), []string{}) @@ -13684,69 +13684,69 @@ var swaggerSpec = []string{ "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", - "v3NF6vbp/wUAAP//", + "YZ/NuVEc5k9TWRCEB3AWaFYAOBcCbJaHQUTjQ3giYkakcmnqDb6B88D73zvQcue6XLJQPy4xA8HpaB9G", + "NtkBDNSH6AXGxcnOb/bpsfpnYn6hHC/sI6x3VUiyBn7eEq+yFE8wJ+9Ke9gwjmncjHTTYr8HVMVoJZFj", + "BpMUR3XYi6BCSmHv0/5Hya2ssiQH3t743XgPkjGmJMYp9Q689+O98Z5+UAhkuqsQvAMIVoqZMyPLkSrI", + "o96sVmpiSu4Aj4pOAu/Au0i4sIife+pcES4+JsFCPyYROg4JsmGo7Da7/9TBKEqL6syZX67sWXmTqE2h", + "TGvLsLD9vXcrm/1IS6gqBC2JdLVQs4wuIRDGBwWWa7Yc/F3Z6Gnk/W1vr7utbGQzJTAnu6j5j9un0ffG", + "o/jH7dOtMZT84ZXJ5FaOXyad3e+4QMbJ8ZMioZC4vGPH8DvCcTslqWY2LR3aUwAZMxwRAYlQGmzmRZPd", + "EoBgO6/Qx4eOXMhqPc/bwg9qlq62H17hdkuxsSu1YL77Xfmnn3ZxSnfuyKKTc3CE1SNN++GnypuBQ6Qr", + "NqGHhN1Nw+QBskk42IoRXPwapldSiNcJwfHODegF+C08ps65bf4Gs8w8RhYj6HokdLs2DmepsC/D4KoA", + "OBBbelnqPBx7fQh+b/hBet+n7fvNHbqagqbOFM+iCLNFIURL5wBzBAfLsw4f/N3j0O1+VypBL3b77BOo", + "2bH7DB5qQF76LI66pYCBtJ8AKNF4swBYF42/CrrV8vrZdKuu6Ls+jn2VOrpBYsB3lYWHxjspS1RiIhwH", + "KNUpwCoWOpVNCfKqKZW5W3goU6Sa61VIkBIl7q2Mk8O6YbFqrZeEZ6FwsfMri6qR2qQwL3j6RklXrRlI", + "ySIZnBvz+pJu/rR8F/IvNdLubzTUlFt/9L4EkeavrH8zWZ9+ZCrVq5Vr7UmlcjPscj1vlErlih1E006m", + "luY9I03Z3+SgNt/mNbL7hYhCj37W/vb0jRQaZc2F1L7ZeUmL+qJe+B7tNO903beajFW6X51mapa7yp3N", + "EMTt06iPFcfGoJsZWWSxvd68QvPNqsnOTUw2sxl046hcOJouFF0XiBfR59+GQecV8h0sfEeUjvLIdRHE", + "hey8YnpYPeOqeRd78a69DlLUfs4tKa6IFCXXUnWBGxWkX+GzekfhUovUd68XV5mT3IRCOTIFiQftH5DR", + "bpwEpIdOp5o5gD7XH1pvCm01jeHu8K+MQA4rfXkoVc/f2H2hlz4p1/s8TVKhcmOivOEy4FLxAbLd7/I/", + "WuA6ieIXInQZ8HiaNNLEOYwymJ2qyT15Ht8iDXWRjq7Z2ptgTMn1N3XRrNJW4/UAqqMjnr9qwmqtrsvB", + "KmhqXY6Tarn3Jy2h+3BxOEgaAxB0B0O8Bbk8gLGUEgK3C5pKpQO30LGTAbYKnrwAGjAHFaotEjSloShX", + "mSRFQYGME/ZfeOJ/y/b29v+O0/S/UpYE8OgXaheANToO0L0qMhFlXKAJQTeXp4jEfqLTtbtYUl4B1uZI", + "LyLFTqEmi6ll/yxxVt+wNToonkGtZUIdvWq9spzgusO2YpKZ56nPrVDMOh+1j86azCw5WW3WxlKa1qEu", + "WzWJN+07/guSbYnt70ZFqvhm9q8bWa/C+gkBk4e+QxYcJVGEd3S+BxJAXSoriy86OYb33zNSgsQbeeQx", + "DaVaYt7suFi7HuRPGvBWn0dzPHmEH0/Ux3d7exWGPPKymP4rI7oBnKS1qqrOPP/PEwsqptYQwvawre+w", + "fc+LhbcaTZUTyKrd4bKW5oRwZRUgH6Z9F6XLe1pMK8za+Nxev0L8dlWMxnt+oV5MFghuzM18eE0ksnKu", + "tswdnBeq8pbw1s+3dv0kjomq8exWfy9hd3hOnoEqd6ASM1kchHKkKhCV0jMxKPAfjNH19alsAk+wyKMg", + "sb6+tSjOOZkfaRifS+2rV8I1ZIMU8b2XUMRN1k9TLupp9FJXAk0RP1qo3Y/HGUxWzFxktT/flUKMW3X7", + "oSwS2r3fbxneznDXQ9ydqkSfSzOBkTMHFpRyqlbjAOjEHAsrM0Aup2iMIhqGtCiM57ypyMHdNnHzFrS9", + "6lnNxqaq71mlWNqgbIAqpBEtQ5VnSni3J+9Dw0qzbUCLgF1fRodQiXO37GIz7KLL8mDzhyg3JPQ49Y1W", + "h2cc/Ly4jjr0Rf4SzIRhARBCf4/DkVX2cFQpnVksZE0cwDUsgaJH9gHusTQSB8stbBjIGzGqV6oWLmtU", + "t1nFBswlW86yJGfRpZJVfhbRGINUr6psl7tdc2lvR2Hvys0mc7A2XeD4FV5sWsqq97rkOMxNpUNooqLs", + "M+jcvHWesg97/+jT9h/bE1k5kapGdaPJ4EJ+rtQr7nPPh34bN3sqq0XpPgpuZ100X99Xt3T4CumQqVLo", + "hLeZr6BJidEo+5Nk21RwXUc0QSG9Jz0J9TKf99Vy7kqV+L6RMhVNSS1zQ5bZvwTBcpNGKKfWdrPKJfRY", + "gpmqjq+QQBVgwesPXmi2VG7FwKs6VaaQeZ80NylhnHIB1YtNbfc8oEeP+f/z/DrABVS2MKXvudEKTICb", + "CnCBZ1eFA169Z4Z50IQsklgx0ITRGYU3+fk0IZ0SKX/6ekJyOF6v4DEgWpJno+fbFLWPp4nTFGA2ffNp", + "LbbX/6VOtzwfSdbiobwiQoXjqYaFNc9c9EuMnYYhIo8pZQQ9GuuXFdJHi3R3+pCM0REOQ/ASzClHERHz", + "JEBRFgqahkSnf0zuCXtgVGhrwvX16QgR7KvS6yjjqnthZigMdJgXpkfZKk2o/J6giGCe6QJ7ZmmBsTz0", + "5BfXGnevlltoAJ+lpnK9/2aLDcFsD+jKD6gtaNvDy/OmVrJdR26EX4hokWktAYCV5yZlKD6rsPMChskC", + "8SRjPrGCEJdKMpNiKcLlNKfgSBvU5Zw8Cp1TbjN28pIsXNZMXmz6Nj7QeUhy/KhDAglG+iVvcHrArvWH", + "zaRseH6yhk3SRTX3ahtxDEiKJ3+zNq/IDtPHqWlHU7fxOSv7y7IuTZ3rZevP/LH8mZIoVuHMhDf4G/Fk", + "9s/Q9xcRAp0sZDfCj61sBKhUR/i4WIqpfKIebBia78dozvDjlte8el4zcjyqZNSHUjTyX+SelKgE3kXq", + "pzMNryAZJOJvfiVjChn6Saxvpn/aT4HMYxvYjD8ZFsRRz3CtMWBn+NHmjltu+Pa4oXoj2UsjNk2dTK34", + "2OOWmGfFazrqvavrbkgD0C9Jn6mNGxy94E1tkI7+Kqi1QFv5EXC7Y66Scq3lJbBNuuswpblqlPczu++v", + "HAZd0rbBu6YqkcF7BN8nqTBhFa/ufeJL0nADZZaY6a6urbP7Hf7RnELmCGpJ06lV8YeKuVYiVU0m8ki5", + "aOe5ujQX/KeB/5aTkmLdslnzaCirbTpuUscwk8Py8jpsXZxXChyV8tXUU1xo6AeT9KvLd/6WdI3mM1LU", + "Am1NZlh4cvDMeIIaNRHVJz8Y13i2Lq5enklONIi1f2iogvqDZjp/UxRrira63ZmHUDtTUuNP/Gd5+cP1", + "UrUtSsYaSVJBtjRJvlsxICSwQXHqHHhWlP3dUvxLU3yZPX8vqgb2zTnboGRXmXKpGuFAo1fetX8wcamY", + "4ioyz26vY8V1rN1kUEn930Aftiq7IuJY0u27hIN5E5qvVcF3oInNvlRQwZesKfEXVFVLGZXbLQ3mfVOj", + "jUEOtBbutz5bRbkO99KJlmtFdxuTLb/+FEh/FcPZJdEF6eOeZrO3QdFv1/q2tahV1VFT0Oo7/Ffrp33p", + "G5JKgHjsc1vLJ1Xy96OacM26iV6WS7nYd3NZRTtzzJWfd0s6vUmnnkel5vkv3e5V1op+KmyJZpbKjrIk", + "3Ww2k4qfMQ5e7reUSsWVSUXNqj8vE74QUEZ8WMOop2iQVHGc92ocOCT3UC2v96Cn0MGB2isVZ9tn96cs", + "iZrCP2CUQatUE2/IVwBnTs7a21/gvjhZR/51mpnczPcH8RC0M26VLH4I626q09DFulVS+xdj3idxQB7N", + "ic0fouSk2Xh+8/QYlh7vZC7JjH+ZTjlp4JaDs079MPx8aba7MR7X+I6uk7dtGdoLM7QpDeVPc8zn7TVm", + "cIyyNExwgEIa3xlrKmZIjoAkTWEaWywBL4j61ldP/Szb/or5/LkszhFqMFfD9o00kFAYVmeW0B1s8G49", + "h0vi5QYw33Rnt/flYU4YZKrQP8Jh07v0Azi0/joH0wQmdIRDQjjCMp4N7QJepetrjTGP13j23GcPWgkD", + "vK4xenfr2W3z7NqZXnu8D22rOPF1/0cuPDRqeq6aAzpZoCQmKGEoSpiqWgWY6FUgQyhGsVxOxSvhjEIe", + "eVwsQvmDVILfkvtzW6Xpx3uG3ppTulcC2iYbq8V43mjW6TdpK+26XO8NhTm3ePbBbAPIK7G1VlCpFgFG", + "Fbj667ddGYvHSPZGExImDyrRiGqAGUHk0Q+zoBm3K7PdHmFOdjiJORX0niCeTZTQQhEW/hwlMUAeEc7x", + "TF0MJQ9ukEMEM39eAivCj6cknskDvv+3v282yNtKJv51fzmj7Tat+Lq5eumx2Oof4nzdf4mnOF/3X3s4", + "gMbEtk7fuu0BNonX4l/bK+y3R39ZlP1jx3+tBYhmYbANMHsb56cjYGdoeI7zOL1cgM6a5RRgZJCUel3x", + "QW9aIrxvUnqWVHHev4iK8/6lVBwNgOHhBpDXpe1sM0R0n4MkzCLSM20aMq1dFpz80/rNhmquwfbCEKyN", + "9dVsOaaLUgx2ehRoV9wxx6ibQVr0sZai7IYoNvsiUs16GAfa0t5Bgib5cR1n20vf6gjWYmy739U/+r91", + "bCZj1UgT8lc97GCF1MDT86FjiXzMI0dcJ52tSWxFvK4l5jBHeWPA4TqJY++lmJZJgraluzWyLFgHuzd0", + "krHQO/DmQqT8YHcXp3RM9idjnKae1f97kXWrSED1vZKwufwjZAiz/4Z93hESNeWGKd25I4vSbzrOI/87", + "V6Bun/5fAAAA//8=", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/api/internal/api/spec_test.go b/packages/api/internal/api/spec_test.go index 70c93f811a..76e8d208f4 100644 --- a/packages/api/internal/api/spec_test.go +++ b/packages/api/internal/api/spec_test.go @@ -33,7 +33,7 @@ func TestSpecSecuritySchemeHeaderNames(t *testing.T) { {"Supabase1TokenAuth", auth.HeaderSupabaseToken}, {"Supabase2TeamAuth", auth.HeaderSupabaseTeam}, {"AuthProviderTeamAuth", auth.HeaderTeamID}, - {"AdminApiTokenAuth", auth.HeaderAdminToken}, + {"AdminApiKeyAuth", auth.HeaderAdminToken}, {"AdminTeamAuth", auth.HeaderTeamID}, } @@ -78,7 +78,7 @@ func TestAuthProviderTeamAuthHeaderRoutes(t *testing.T) { "Supabase2TeamAuth": auth.HeaderSupabaseTeam, "AuthProviderBearerAuth": auth.HeaderAuthorization, "AuthProviderTeamAuth": auth.HeaderTeamID, - "AdminApiTokenAuth": auth.HeaderAdminToken, + "AdminApiKeyAuth": auth.HeaderAdminToken, "AdminTeamAuth": auth.HeaderTeamID, } @@ -167,7 +167,7 @@ func TestAdminTeamAuthSchemeOrder(t *testing.T) { "Supabase2TeamAuth": auth.HeaderSupabaseTeam, "AuthProviderBearerAuth": auth.HeaderAuthorization, "AuthProviderTeamAuth": auth.HeaderTeamID, - "AdminApiTokenAuth": auth.HeaderAdminToken, + "AdminApiKeyAuth": auth.HeaderAdminToken, "AdminTeamAuth": auth.HeaderTeamID, } @@ -182,7 +182,7 @@ func TestAdminTeamAuthSchemeOrder(t *testing.T) { } switch input.SecuritySchemeName { - case "AdminApiTokenAuth", "AdminTeamAuth": + case "AdminApiKeyAuth", "AdminTeamAuth": adminSchemeOrder = append(adminSchemeOrder, input.SecuritySchemeName) } @@ -213,5 +213,5 @@ func TestAdminTeamAuthSchemeOrder(t *testing.T) { r.ServeHTTP(rr, req) require.Equal(t, http.StatusOK, rr.Code, "request with admin token and team header should pass auth (body: %s)", rr.Body.String()) - require.Equal(t, []string{"AdminApiTokenAuth", "AdminTeamAuth"}, adminSchemeOrder) + require.Equal(t, []string{"AdminApiKeyAuth", "AdminTeamAuth"}, adminSchemeOrder) } diff --git a/packages/api/main.go b/packages/api/main.go index db4c5a6f31..b5dd6773b0 100644 --- a/packages/api/main.go +++ b/packages/api/main.go @@ -197,7 +197,7 @@ func NewGinServer(ctx context.Context, config cfg.Config, tel *telemetry.Client, auth.NewSupabaseTokenAuthenticator(apiStore.GetUserIDFromAuthProviderToken), auth.NewSupabaseTeamAuthenticator(apiStore.GetTeamFromSupabaseToken), auth.NewAuthProviderTeamAuthenticator(apiStore.GetTeamFromAuthProviderToken), - auth.NewAdminApiTokenAuthenticator(config.AdminToken), + auth.NewAdminApiKeyAuthenticator(config.AdminToken), auth.NewAdminTeamAuthenticator(apiStore.GetTeamFromAdminToken), }, metricsMiddleware.SetProcessingStartTime, diff --git a/packages/auth/pkg/auth/middleware.go b/packages/auth/pkg/auth/middleware.go index 9add47763b..59548d654b 100644 --- a/packages/auth/pkg/auth/middleware.go +++ b/packages/auth/pkg/auth/middleware.go @@ -211,12 +211,12 @@ func NewAuthProviderTeamAuthenticator(validationFunc func(ctx context.Context, g } } -// NewAdminApiTokenAuthenticator creates an authenticator for the AdminApiTokenAuth security scheme (X-Admin-Token header). -func NewAdminApiTokenAuthenticator(adminToken string) Authenticator { - return newAdminApiTokenAuthenticator("AdminApiTokenAuth", adminToken) +// NewAdminApiKeyAuthenticator creates an authenticator for the AdminApiKeyAuth security scheme (X-Admin-Token header). +func NewAdminApiKeyAuthenticator(adminToken string) Authenticator { + return newAdminApiKeyAuthenticator("AdminApiKeyAuth", adminToken) } -func newAdminApiTokenAuthenticator(schemeName, adminToken string) Authenticator { +func newAdminApiKeyAuthenticator(schemeName, adminToken string) Authenticator { return &commonAuthenticator[struct{}]{ schemeName: schemeName, header: headerKey{ diff --git a/packages/dashboard-api/internal/api/api.gen.go b/packages/dashboard-api/internal/api/api.gen.go index 0bc64e25d8..4e82576a6d 100644 --- a/packages/dashboard-api/internal/api/api.gen.go +++ b/packages/dashboard-api/internal/api/api.gen.go @@ -21,7 +21,7 @@ import ( ) const ( - AdminApiTokenAuthScopes adminApiTokenAuthContextKey = "AdminApiTokenAuth.Scopes" + AdminApiKeyAuthScopes adminApiKeyAuthContextKey = "AdminApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" AuthProviderTeamAuthScopes authProviderTeamAuthContextKey = "AuthProviderTeamAuth.Scopes" Supabase1TokenAuthScopes supabase1TokenAuthContextKey = "Supabase1TokenAuth.Scopes" @@ -506,8 +506,8 @@ type N500 = Error // N502 defines model for 502. type N502 = Error -// adminApiTokenAuthContextKey is the context key for AdminApiTokenAuth security scheme -type adminApiTokenAuthContextKey string +// adminApiKeyAuthContextKey is the context key for AdminApiKeyAuth security scheme +type adminApiKeyAuthContextKey string // authProviderBearerAuthContextKey is the context key for AuthProviderBearerAuth security scheme type authProviderBearerAuthContextKey string @@ -672,7 +672,7 @@ type MiddlewareFunc func(c *gin.Context) // PostAdminTeamsBootstrap operation middleware func (siw *ServerInterfaceWrapper) PostAdminTeamsBootstrap(c *gin.Context) { - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -687,7 +687,7 @@ func (siw *ServerInterfaceWrapper) PostAdminTeamsBootstrap(c *gin.Context) { // PostAdminUserProfilesByEmail operation middleware func (siw *ServerInterfaceWrapper) PostAdminUserProfilesByEmail(c *gin.Context) { - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -702,7 +702,7 @@ func (siw *ServerInterfaceWrapper) PostAdminUserProfilesByEmail(c *gin.Context) // PostAdminUserProfilesResolve operation middleware func (siw *ServerInterfaceWrapper) PostAdminUserProfilesResolve(c *gin.Context) { - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -729,7 +729,7 @@ func (siw *ServerInterfaceWrapper) GetAdminUserProfilesUserId(c *gin.Context) { return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -744,7 +744,7 @@ func (siw *ServerInterfaceWrapper) GetAdminUserProfilesUserId(c *gin.Context) { // PostAdminUsersBootstrap operation middleware func (siw *ServerInterfaceWrapper) PostAdminUsersBootstrap(c *gin.Context) { - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -771,7 +771,7 @@ func (siw *ServerInterfaceWrapper) PostAdminUsersUserIdBootstrap(c *gin.Context) return } - c.Set(string(AdminApiTokenAuthScopes), []string{}) + c.Set(string(AdminApiKeyAuthScopes), []string{}) for _, middleware := range siw.HandlerMiddlewares { middleware(c) @@ -1316,75 +1316,75 @@ func RegisterHandlersWithOptions(router gin.IRouter, si ServerInterface, options // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", - "zQ7YeODGXX1b/SsAAP//", + "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", + "gcZDswM2Hrhxt1+3/woAAP//", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/packages/dashboard-api/main.go b/packages/dashboard-api/main.go index dd5b5eb852..fe8540937c 100644 --- a/packages/dashboard-api/main.go +++ b/packages/dashboard-api/main.go @@ -230,7 +230,7 @@ func run() int { authenticationFunc := sharedauth.CreateAuthenticationFunc( []sharedauth.Authenticator{ - sharedauth.NewAdminApiTokenAuthenticator(config.AdminToken), + sharedauth.NewAdminApiKeyAuthenticator(config.AdminToken), sharedauth.NewAuthProviderBearerAuthenticator(apiStore.GetUserIDFromAuthProviderToken), sharedauth.NewSupabaseTokenAuthenticator(apiStore.GetUserIDFromAuthProviderToken), sharedauth.NewSupabaseTeamAuthenticator(apiStore.GetTeamFromSupabaseToken), diff --git a/spec/openapi-dashboard.yml b/spec/openapi-dashboard.yml index d872a71e6e..8e21049a31 100644 --- a/spec/openapi-dashboard.yml +++ b/spec/openapi-dashboard.yml @@ -6,7 +6,7 @@ info: components: securitySchemes: - AdminApiTokenAuth: + AdminApiKeyAuth: type: apiKey in: header name: X-Admin-Token @@ -1054,7 +1054,7 @@ paths: summary: Bootstrap user tags: [teams] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - $ref: "#/components/parameters/userId" responses: @@ -1074,7 +1074,7 @@ paths: summary: Bootstrap auth provider user tags: [teams] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] requestBody: required: true content: @@ -1101,7 +1101,7 @@ paths: description: Creates and provisions a team for an admin-authenticated bootstrap workflow. tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] requestBody: required: true content: @@ -1129,7 +1129,7 @@ paths: summary: Resolve user profiles tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] requestBody: required: true content: @@ -1155,7 +1155,7 @@ paths: summary: Lookup user profiles by email tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] requestBody: required: true content: @@ -1181,7 +1181,7 @@ paths: summary: Get user profile tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - $ref: "#/components/parameters/userId" responses: diff --git a/spec/openapi.yml b/spec/openapi.yml index 1c40a40b90..d149bea916 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -37,9 +37,9 @@ components: type: apiKey in: header name: X-Team-ID - # AdminApiTokenAuth / AdminTeamAuth: alphabetical names ensure token + # AdminApiKeyAuth / AdminTeamAuth: alphabetical names ensure token # validation runs before team context population. - AdminApiTokenAuth: + AdminApiKeyAuth: type: apiKey in: header name: X-Admin-Token @@ -1949,7 +1949,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" @@ -1995,7 +1995,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/teamID" @@ -2046,7 +2046,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - name: metadata @@ -2079,7 +2079,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] requestBody: required: true @@ -2111,7 +2111,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - name: metadata @@ -2158,7 +2158,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - name: sandbox_ids @@ -2197,7 +2197,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2240,7 +2240,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2300,7 +2300,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2327,7 +2327,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2351,7 +2351,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2399,7 +2399,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2426,7 +2426,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2462,7 +2462,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2503,7 +2503,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] tags: [sandboxes] requestBody: @@ -2532,7 +2532,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] tags: [sandboxes] requestBody: @@ -2564,7 +2564,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] tags: [sandboxes] requestBody: @@ -2592,7 +2592,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/sandboxID" @@ -2628,7 +2628,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - name: sandboxID @@ -2663,7 +2663,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] requestBody: required: true @@ -2699,7 +2699,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] requestBody: required: true @@ -2733,7 +2733,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -2771,7 +2771,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - in: query @@ -2834,7 +2834,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -2891,7 +2891,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -2913,7 +2913,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -2965,7 +2965,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -2995,7 +2995,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -3030,7 +3030,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -3081,7 +3081,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -3139,7 +3139,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] requestBody: required: true @@ -3171,7 +3171,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] requestBody: required: true @@ -3201,7 +3201,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/templateID" @@ -3233,7 +3233,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - name: alias @@ -3263,7 +3263,7 @@ paths: description: List all nodes tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - in: query name: clusterID @@ -3291,7 +3291,7 @@ paths: description: Get node info tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - $ref: "#/components/parameters/nodeID" - in: query @@ -3318,7 +3318,7 @@ paths: description: Change status of a node tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - $ref: "#/components/parameters/nodeID" requestBody: @@ -3342,7 +3342,7 @@ paths: description: Kills all sandboxes for the specified team tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - name: teamID in: path @@ -3371,7 +3371,7 @@ paths: description: Cancels all in-progress and pending builds for the specified team tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - name: teamID in: path @@ -3400,7 +3400,7 @@ paths: description: Creates a team API key for internal service workflows. tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - name: teamID in: path @@ -3439,7 +3439,7 @@ paths: description: Deletes a team API key for internal service workflows. tags: [admin] security: - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] parameters: - name: teamID in: path @@ -3514,7 +3514,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] responses: "200": @@ -3564,7 +3564,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" @@ -3591,7 +3591,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/apiKeyID" @@ -3615,7 +3615,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] responses: "200": @@ -3640,7 +3640,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] requestBody: required: true @@ -3672,7 +3672,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" @@ -3699,7 +3699,7 @@ paths: Supabase2TeamAuth: [] - AuthProviderBearerAuth: [] AuthProviderTeamAuth: [] - - AdminApiTokenAuth: [] + - AdminApiKeyAuth: [] AdminTeamAuth: [] parameters: - $ref: "#/components/parameters/volumeID" diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go index 7bb4d8a2e0..ca672da510 100644 --- a/tests/integration/internal/api/generated.go +++ b/tests/integration/internal/api/generated.go @@ -21,7 +21,7 @@ import ( const ( AccessTokenAuthScopes accessTokenAuthContextKey = "AccessTokenAuth.Scopes" - AdminApiTokenAuthScopes adminApiTokenAuthContextKey = "AdminApiTokenAuth.Scopes" + AdminApiKeyAuthScopes adminApiKeyAuthContextKey = "AdminApiKeyAuth.Scopes" AdminTeamAuthScopes adminTeamAuthContextKey = "AdminTeamAuth.Scopes" ApiKeyAuthScopes apiKeyAuthContextKey = "ApiKeyAuth.Scopes" AuthProviderBearerAuthScopes authProviderBearerAuthContextKey = "AuthProviderBearerAuth.Scopes" @@ -1458,8 +1458,8 @@ type N500 = Error // accessTokenAuthContextKey is the context key for AccessTokenAuth security scheme type accessTokenAuthContextKey string -// adminApiTokenAuthContextKey is the context key for AdminApiTokenAuth security scheme -type adminApiTokenAuthContextKey string +// adminApiKeyAuthContextKey is the context key for AdminApiKeyAuth security scheme +type adminApiKeyAuthContextKey string // adminTeamAuthContextKey is the context key for AdminTeamAuth security scheme type adminTeamAuthContextKey string From 9d364f4e6f6747d32e3c86eb863d359afd760daf Mon Sep 17 00:00:00 2001 From: ben-fornefeld Date: Mon, 8 Jun 2026 14:34:52 -0700 Subject: [PATCH 10/10] fix(api): log config failure condition --- packages/api/internal/cfg/model.go | 40 ++++++++++++++++++++++++- packages/api/internal/cfg/model_test.go | 11 +++++++ packages/api/main.go | 7 ++++- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/packages/api/internal/cfg/model.go b/packages/api/internal/cfg/model.go index d3c24d7d91..8e0d132610 100644 --- a/packages/api/internal/cfg/model.go +++ b/packages/api/internal/cfg/model.go @@ -90,6 +90,41 @@ type Config struct { DomainName string `env:"DOMAIN_NAME" envDefault:""` } +type FailureCondition string + +const ( + FailureConditionInvalidServiceDiscoveryProvider FailureCondition = "invalid_service_discovery_provider" +) + +type FailureError struct { + Condition FailureCondition + err error +} + +func (e *FailureError) Error() string { + return e.err.Error() +} + +func (e *FailureError) Unwrap() error { + return e.err +} + +func ParseFailureCondition(err error) (FailureCondition, bool) { + var failureErr *FailureError + if !errors.As(err, &failureErr) { + return "", false + } + + return failureErr.Condition, true +} + +func newFailureError(condition FailureCondition, message string) error { + return &FailureError{ + Condition: condition, + err: errors.New(message), + } +} + type JWTSigningKey any type VolumesTokenConfig struct { @@ -157,7 +192,10 @@ func Parse() (Config, error) { } if !slices.Contains([]string{ServiceDiscoveryProviderNomad, ServiceDiscoveryProviderKubernetes, ServiceDiscoveryProviderLocal}, config.ServiceDiscoveryProvider) { - return config, fmt.Errorf("invalid service discovery provider: %s", config.ServiceDiscoveryProvider) + return config, newFailureError( + FailureConditionInvalidServiceDiscoveryProvider, + fmt.Sprintf("invalid service discovery provider: %s", config.ServiceDiscoveryProvider), + ) } return config, nil diff --git a/packages/api/internal/cfg/model_test.go b/packages/api/internal/cfg/model_test.go index e5a65b96f4..217a03a6a9 100644 --- a/packages/api/internal/cfg/model_test.go +++ b/packages/api/internal/cfg/model_test.go @@ -51,6 +51,17 @@ func TestParse(t *testing.T) { require.NoError(t, err) assert.Equal(t, content, result.VolumesToken.SigningKey) }) + + t.Run("invalid service discovery provider exposes failure condition", func(t *testing.T) { + t.Setenv("SERVICE_DISCOVERY_PROVIDER", "invalid") + + _, err := Parse() + require.Error(t, err) + + condition, ok := ParseFailureCondition(err) + require.True(t, ok) + assert.Equal(t, FailureConditionInvalidServiceDiscoveryProvider, condition) + }) } // removeEnv was mostly copied from the implementation of t.Setenv diff --git a/packages/api/main.go b/packages/api/main.go index b5dd6773b0..b385c13ea4 100644 --- a/packages/api/main.go +++ b/packages/api/main.go @@ -349,7 +349,12 @@ func run() int { config, err := cfg.Parse() if err != nil { - logger.L().Fatal(ctx, "Error parsing config", zap.Error(err)) + fields := []zap.Field{zap.Error(err)} + if condition, ok := cfg.ParseFailureCondition(err); ok { + fields = append(fields, zap.String("config_failure_condition", string(condition))) + } + + logger.L().Fatal(ctx, "Error parsing config", fields...) } err = sqlcdb.CheckMigrationVersion(ctx, config.PostgresConnectionString, expectedMigration)