Skip to content

Commit 3fdeaf7

Browse files
authored
feat: add endpoint for fetching workspace proxy keys (#14789)
1 parent 5c977c6 commit 3fdeaf7

File tree

17 files changed

+547
-0
lines changed

17 files changed

+547
-0
lines changed

coderd/apidoc/docs.go

+72
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+64
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbauthz/dbauthz.go

+7
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,13 @@ func (q *querier) GetCryptoKeys(ctx context.Context) ([]database.CryptoKey, erro
14051405
return q.db.GetCryptoKeys(ctx)
14061406
}
14071407

1408+
func (q *querier) GetCryptoKeysByFeature(ctx context.Context, feature database.CryptoKeyFeature) ([]database.CryptoKey, error) {
1409+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceCryptoKey); err != nil {
1410+
return nil, err
1411+
}
1412+
return q.db.GetCryptoKeysByFeature(ctx, feature)
1413+
}
1414+
14081415
func (q *querier) GetDBCryptKeys(ctx context.Context) ([]database.DBCryptKey, error) {
14091416
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
14101417
return nil, err

coderd/database/dbauthz/dbauthz_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -2302,6 +2302,10 @@ func (s *MethodTestSuite) TestCryptoKeys() {
23022302
DeletesAt: sql.NullTime{Time: time.Now(), Valid: true},
23032303
}).Asserts(rbac.ResourceCryptoKey, policy.ActionUpdate)
23042304
}))
2305+
s.Run("GetCryptoKeysByFeature", s.Subtest(func(db database.Store, check *expects) {
2306+
check.Args(database.CryptoKeyFeatureWorkspaceApps).
2307+
Asserts(rbac.ResourceCryptoKey, policy.ActionRead)
2308+
}))
23052309
}
23062310

23072311
func (s *MethodTestSuite) TestSystemFunctions() {

coderd/database/dbmem/dbmem.go

+17
Original file line numberDiff line numberDiff line change
@@ -2429,6 +2429,23 @@ func (q *FakeQuerier) GetCryptoKeys(_ context.Context) ([]database.CryptoKey, er
24292429
return keys, nil
24302430
}
24312431

2432+
func (q *FakeQuerier) GetCryptoKeysByFeature(_ context.Context, feature database.CryptoKeyFeature) ([]database.CryptoKey, error) {
2433+
q.mutex.RLock()
2434+
defer q.mutex.RUnlock()
2435+
2436+
keys := make([]database.CryptoKey, 0)
2437+
for _, key := range q.cryptoKeys {
2438+
if key.Feature == feature && key.Secret.Valid {
2439+
keys = append(keys, key)
2440+
}
2441+
}
2442+
// We want to return the highest sequence number first.
2443+
slices.SortFunc(keys, func(i, j database.CryptoKey) int {
2444+
return int(j.Sequence - i.Sequence)
2445+
})
2446+
return keys, nil
2447+
}
2448+
24322449
func (q *FakeQuerier) GetDBCryptKeys(_ context.Context) ([]database.DBCryptKey, error) {
24332450
q.mutex.RLock()
24342451
defer q.mutex.RUnlock()

coderd/database/dbmetrics/dbmetrics.go

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+38
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/crypto_keys.sql

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ SELECT *
33
FROM crypto_keys
44
WHERE secret IS NOT NULL;
55

6+
-- name: GetCryptoKeysByFeature :many
7+
SELECT *
8+
FROM crypto_keys
9+
WHERE feature = $1
10+
AND secret IS NOT NULL
11+
ORDER BY sequence DESC;
12+
613
-- name: GetLatestCryptoKeyByFeature :one
714
SELECT *
815
FROM crypto_keys

docs/reference/api/schemas.md

+60
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

enterprise/coderd/coderd.go

+1
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ func New(ctx context.Context, options *Options) (_ *API, err error) {
243243
r.Post("/app-stats", api.workspaceProxyReportAppStats)
244244
r.Post("/register", api.workspaceProxyRegister)
245245
r.Post("/deregister", api.workspaceProxyDeregister)
246+
r.Get("/crypto-keys", api.workspaceProxyCryptoKeys)
246247
})
247248
r.Route("/{workspaceproxy}", func(r chi.Router) {
248249
r.Use(

0 commit comments

Comments
 (0)