Skip to content

Commit 7e86229

Browse files
committed
Database implementation
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent 09f82b4 commit 7e86229

26 files changed

+1035
-15
lines changed

coderd/apidoc/docs.go

Lines changed: 130 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 116 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/coderd.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,17 @@ func New(options *Options) *API {
12471247
r.Get("/settings", api.notificationsSettings)
12481248
r.Put("/settings", api.putNotificationsSettings)
12491249
})
1250+
r.Route("/frobulators", func(r chi.Router) {
1251+
r.Use(apiKeyMiddleware)
1252+
r.Get("/", api.listAllFrobulators)
1253+
r.Route("/{user}", func(r chi.Router) {
1254+
r.Use(
1255+
httpmw.ExtractUserParam(options.Database),
1256+
)
1257+
r.Get("/", api.listUserFrobulators)
1258+
r.Post("/", api.createFrobulator)
1259+
})
1260+
})
12501261
})
12511262

12521263
if options.SwaggerEndpoint {

coderd/database/dbauthz/dbauthz.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,6 +1204,13 @@ func (q *querier) GetActiveWorkspaceBuildsByTemplateID(ctx context.Context, temp
12041204
return q.db.GetActiveWorkspaceBuildsByTemplateID(ctx, templateID)
12051205
}
12061206

1207+
func (q *querier) GetAllFrobulators(ctx context.Context) ([]database.Frobulator, error) {
1208+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceFrobulator); err != nil {
1209+
return nil, err
1210+
}
1211+
return q.db.GetAllFrobulators(ctx)
1212+
}
1213+
12071214
func (q *querier) GetAllTailnetAgents(ctx context.Context) ([]database.TailnetAgent, error) {
12081215
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceTailnetCoordinator); err != nil {
12091216
return []database.TailnetAgent{}, err
@@ -2052,6 +2059,13 @@ func (q *querier) GetUserCount(ctx context.Context) (int64, error) {
20522059
return q.db.GetUserCount(ctx)
20532060
}
20542061

2062+
func (q *querier) GetUserFrobulators(ctx context.Context, userID uuid.UUID) ([]database.Frobulator, error) {
2063+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceFrobulator.WithOwner(userID.String())); err != nil {
2064+
return nil, err
2065+
}
2066+
return q.db.GetUserFrobulators(ctx, userID)
2067+
}
2068+
20552069
func (q *querier) GetUserLatencyInsights(ctx context.Context, arg database.GetUserLatencyInsightsParams) ([]database.GetUserLatencyInsightsRow, error) {
20562070
// Used by insights endpoints. Need to check both for auditors and for regular users with template acl perms.
20572071
if err := q.authorizeContext(ctx, policy.ActionViewInsights, rbac.ResourceTemplate); err != nil {
@@ -2537,6 +2551,14 @@ func (q *querier) InsertFile(ctx context.Context, arg database.InsertFileParams)
25372551
return insert(q.log, q.auth, rbac.ResourceFile.WithOwner(arg.CreatedBy.String()), q.db.InsertFile)(ctx, arg)
25382552
}
25392553

2554+
func (q *querier) InsertFrobulator(ctx context.Context, arg database.InsertFrobulatorParams) error {
2555+
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceFrobulator.WithOwner(arg.UserID.String())); err != nil {
2556+
return err
2557+
}
2558+
2559+
return q.db.InsertFrobulator(ctx, arg)
2560+
}
2561+
25402562
func (q *querier) InsertGitSSHKey(ctx context.Context, arg database.InsertGitSSHKeyParams) (database.GitSSHKey, error) {
25412563
return insertWithAction(q.log, q.auth, rbac.ResourceUser.WithOwner(arg.UserID.String()).WithID(arg.UserID), policy.ActionUpdatePersonal, q.db.InsertGitSSHKey)(ctx, arg)
25422564
}

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2583,6 +2583,19 @@ func (s *MethodTestSuite) TestSystemFunctions() {
25832583
Limit: 10,
25842584
}).Asserts(rbac.ResourceSystem, policy.ActionRead)
25852585
}))
2586+
s.Run("GetAllFrobulators", s.Subtest(func(db database.Store, check *expects) {
2587+
check.Args().Asserts(rbac.ResourceFrobulator, policy.ActionRead)
2588+
}))
2589+
s.Run("GetUserFrobulators", s.Subtest(func(db database.Store, check *expects) {
2590+
user := dbgen.User(s.T(), db, database.User{})
2591+
check.Args(user.ID).Asserts(rbac.ResourceFrobulator.WithOwner(user.ID.String()), policy.ActionRead)
2592+
}))
2593+
s.Run("InsertFrobulator", s.Subtest(func(db database.Store, check *expects) {
2594+
user := dbgen.User(s.T(), db, database.User{})
2595+
check.Args(database.InsertFrobulatorParams{
2596+
UserID: user.ID,
2597+
}).Asserts(rbac.ResourceFrobulator.WithOwner(user.ID.String()), policy.ActionCreate)
2598+
}))
25862599
}
25872600

25882601
func (s *MethodTestSuite) TestOAuth2ProviderApps() {

0 commit comments

Comments
 (0)