@@ -1777,6 +1777,13 @@ func (q *querier) EnqueueNotificationMessage(ctx context.Context, arg database.E
17771777return q .db .EnqueueNotificationMessage (ctx ,arg )
17781778}
17791779
1780+ func (q * querier )ExpirePrebuildsAPIKeys (ctx context.Context ,now time.Time )error {
1781+ if err := q .authorizeContext (ctx ,policy .ActionDelete ,rbac .ResourceApiKey );err != nil {
1782+ return err
1783+ }
1784+ return q .db .ExpirePrebuildsAPIKeys (ctx ,now )
1785+ }
1786+
17801787func (q * querier )FavoriteWorkspace (ctx context.Context ,id uuid.UUID )error {
17811788fetch := func (ctx context.Context ,id uuid.UUID ) (database.Workspace ,error ) {
17821789return q .db .GetWorkspaceByID (ctx ,id )
@@ -2242,14 +2249,6 @@ func (q *querier) GetLogoURL(ctx context.Context) (string, error) {
22422249return q .db .GetLogoURL (ctx )
22432250}
22442251
2245- func (q * querier )GetManagedAgentCount (ctx context.Context ,arg database.GetManagedAgentCountParams ) (int64 ,error ) {
2246- // Must be able to read all workspaces to check usage.
2247- if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceWorkspace );err != nil {
2248- return 0 ,xerrors .Errorf ("authorize read all workspaces: %w" ,err )
2249- }
2250- return q .db .GetManagedAgentCount (ctx ,arg )
2251- }
2252-
22532252func (q * querier )GetNotificationMessagesByStatus (ctx context.Context ,arg database.GetNotificationMessagesByStatusParams ) ([]database.NotificationMessage ,error ) {
22542253if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceNotificationMessage );err != nil {
22552254return nil ,err
@@ -2689,6 +2688,13 @@ func (q *querier) GetQuotaConsumedForUser(ctx context.Context, params database.G
26892688return q .db .GetQuotaConsumedForUser (ctx ,params )
26902689}
26912690
2691+ func (q * querier )GetRegularWorkspaceCreateMetrics (ctx context.Context ) ([]database.GetRegularWorkspaceCreateMetricsRow ,error ) {
2692+ if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceWorkspace .All ());err != nil {
2693+ return nil ,err
2694+ }
2695+ return q .db .GetRegularWorkspaceCreateMetrics (ctx )
2696+ }
2697+
26922698func (q * querier )GetReplicaByID (ctx context.Context ,id uuid.UUID ) (database.Replica ,error ) {
26932699if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceSystem );err != nil {
26942700return database.Replica {},err
@@ -3041,6 +3047,13 @@ func (q *querier) GetTemplatesWithFilter(ctx context.Context, arg database.GetTe
30413047return q .db .GetAuthorizedTemplates (ctx ,arg ,prep )
30423048}
30433049
3050+ func (q * querier )GetTotalUsageDCManagedAgentsV1 (ctx context.Context ,arg database.GetTotalUsageDCManagedAgentsV1Params ) (int64 ,error ) {
3051+ if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceUsageEvent );err != nil {
3052+ return 0 ,err
3053+ }
3054+ return q .db .GetTotalUsageDCManagedAgentsV1 (ctx ,arg )
3055+ }
3056+
30443057func (q * querier )GetUnexpiredLicenses (ctx context.Context ) ([]database.License ,error ) {
30453058if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceLicense );err != nil {
30463059return nil ,err
@@ -3711,6 +3724,14 @@ func (q *querier) GetWorkspacesEligibleForTransition(ctx context.Context, now ti
37113724}
37123725
37133726func (q * querier )InsertAPIKey (ctx context.Context ,arg database.InsertAPIKeyParams ) (database.APIKey ,error ) {
3727+ // TODO(Cian): ideally this would be encoded in the policy, but system users are just members and we
3728+ // don't currently have a capability to conditionally deny creating resources by owner ID in a role.
3729+ // We also need to enrich rbac.Actor with IsSystem so that we can distinguish all system users.
3730+ // For now, there is only one system user (prebuilds).
3731+ if act ,ok := ActorFromContext (ctx );ok && act .ID == database .PrebuildsSystemUserID .String () {
3732+ return database.APIKey {},logNotAuthorizedError (ctx ,q .log ,NotAuthorizedError {Err :xerrors .Errorf ("prebuild user may not create api keys" )})
3733+ }
3734+
37143735return insert (q .log ,q .auth ,
37153736rbac .ResourceApiKey .WithOwner (arg .UserID .String ()),
37163737q .db .InsertAPIKey )(ctx ,arg )