Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 808aa32

Browse files
committed
feat: add wsproxy endpoint for fetching keys
1 parent c127d90 commit 808aa32

File tree

13 files changed

+220
-5
lines changed

13 files changed

+220
-5
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 7 additions & 0 deletions
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

Lines changed: 4 additions & 0 deletions
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

Lines changed: 17 additions & 0 deletions
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 {
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

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

coderd/database/dbmock/dbmock.go

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

coderd/database/querier.go

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

coderd/database/queries.sql.go

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

coderd/database/queries/crypto_keys.sql

Lines changed: 7 additions & 0 deletions
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

enterprise/coderd/coderd.go

Lines changed: 1 addition & 0 deletions
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(

enterprise/coderd/workspaceproxy.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,20 @@ func (api *API) workspaceProxyRegister(rw http.ResponseWriter, r *http.Request)
710710
go api.forceWorkspaceProxyHealthUpdate(api.ctx)
711711
}
712712

713+
func (api *API) workspaceProxyCryptoKeys(rw http.ResponseWriter, r *http.Request) {
714+
ctx := r.Context()
715+
716+
keys, err := api.Database.GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps)
717+
if err != nil {
718+
httpapi.InternalServerError(rw, err)
719+
return
720+
}
721+
722+
httpapi.Write(ctx, rw, http.StatusOK, wsproxysdk.CryptoKeysResponse{
723+
CryptoKeys: fromDBCryptoKeys(keys),
724+
})
725+
}
726+
713727
// @Summary Deregister workspace proxy
714728
// @ID deregister-workspace-proxy
715729
// @Security CoderSessionToken
@@ -967,3 +981,17 @@ func (w *workspaceProxiesFetchUpdater) Fetch(ctx context.Context) (codersdk.Regi
967981
func (w *workspaceProxiesFetchUpdater) Update(ctx context.Context) error {
968982
return w.updateFunc(ctx)
969983
}
984+
985+
func fromDBCryptoKeys(keys []database.CryptoKey) []wsproxysdk.CryptoKey {
986+
wskeys := make([]wsproxysdk.CryptoKey, 0, len(keys))
987+
for _, key := range keys {
988+
wskeys = append(wskeys, wsproxysdk.CryptoKey{
989+
Feature: wsproxysdk.CryptoKeyFeature(key.Feature),
990+
Secret: key.Secret.String,
991+
DeletesAt: key.DeletesAt.Time,
992+
Sequence: key.Sequence,
993+
StartsAt: key.StartsAt,
994+
})
995+
}
996+
return wskeys
997+
}

0 commit comments

Comments
 (0)