Skip to content

Commit 8980d32

Browse files
committed
dbcrypt
1 parent 86195f0 commit 8980d32

File tree

11 files changed

+308
-203
lines changed

11 files changed

+308
-203
lines changed

coderd/database/dbgen/dbgen.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -907,8 +907,9 @@ func CryptoKey(t testing.TB, db database.Store, seed database.CryptoKey) databas
907907
String: hex.EncodeToString(b),
908908
Valid: true,
909909
}),
910-
Feature: takeFirst(seed.Feature, database.CryptoKeyFeatureWorkspaceApps),
911-
StartsAt: takeFirst(seed.StartsAt, time.Now()),
910+
SecretKeyID: takeFirst(seed.SecretKeyID, sql.NullString{}),
911+
Feature: takeFirst(seed.Feature, database.CryptoKeyFeatureWorkspaceApps),
912+
StartsAt: takeFirst(seed.StartsAt, time.Now()),
912913
})
913914
require.NoError(t, err, "insert crypto key")
914915

coderd/database/dbmem/dbmem.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ type data struct {
153153
// New tables
154154
workspaceAgentStats []database.WorkspaceAgentStat
155155
auditLogs []database.AuditLog
156+
cryptoKeys []database.CryptoKey
156157
dbcryptKeys []database.DBCryptKey
157158
files []database.File
158159
externalAuthLinks []database.ExternalAuthLink
@@ -2318,13 +2319,26 @@ func (q *FakeQuerier) GetCoordinatorResumeTokenSigningKey(_ context.Context) (st
23182319
return q.coordinatorResumeTokenSigningKey, nil
23192320
}
23202321

2321-
func (q *FakeQuerier) GetCryptoKeyByFeatureAndSequence(ctx context.Context, arg database.GetCryptoKeyByFeatureAndSequenceParams) (database.CryptoKey, error) {
2322+
func (q *FakeQuerier) GetCryptoKeyByFeatureAndSequence(_ context.Context, arg database.GetCryptoKeyByFeatureAndSequenceParams) (database.CryptoKey, error) {
23222323
err := validateDatabaseType(arg)
23232324
if err != nil {
23242325
return database.CryptoKey{}, err
23252326
}
23262327

2327-
panic("not implemented")
2328+
q.mutex.RLock()
2329+
defer q.mutex.RUnlock()
2330+
2331+
for _, key := range q.cryptoKeys {
2332+
if key.Feature == arg.Feature && key.Sequence == arg.Sequence {
2333+
// Keys with NULL secrets are considered deleted.
2334+
if key.Secret.Valid {
2335+
return key, nil
2336+
}
2337+
return database.CryptoKey{}, sql.ErrNoRows
2338+
}
2339+
}
2340+
2341+
return database.CryptoKey{}, sql.ErrNoRows
23282342
}
23292343

23302344
func (q *FakeQuerier) GetCryptoKeys(ctx context.Context) ([]database.CryptoKey, error) {
@@ -6331,13 +6345,26 @@ func (q *FakeQuerier) InsertAuditLog(_ context.Context, arg database.InsertAudit
63316345
return alog, nil
63326346
}
63336347

6334-
func (q *FakeQuerier) InsertCryptoKey(ctx context.Context, arg database.InsertCryptoKeyParams) (database.CryptoKey, error) {
6348+
func (q *FakeQuerier) InsertCryptoKey(_ context.Context, arg database.InsertCryptoKeyParams) (database.CryptoKey, error) {
63356349
err := validateDatabaseType(arg)
63366350
if err != nil {
63376351
return database.CryptoKey{}, err
63386352
}
63396353

6340-
panic("not implemented")
6354+
q.mutex.Lock()
6355+
defer q.mutex.Unlock()
6356+
6357+
key := database.CryptoKey{
6358+
Feature: arg.Feature,
6359+
Sequence: arg.Sequence,
6360+
Secret: arg.Secret,
6361+
SecretKeyID: arg.SecretKeyID,
6362+
StartsAt: arg.StartsAt,
6363+
}
6364+
6365+
q.cryptoKeys = append(q.cryptoKeys, key)
6366+
6367+
return key, nil
63416368
}
63426369

63436370
func (q *FakeQuerier) InsertCustomRole(_ context.Context, arg database.InsertCustomRoleParams) (database.CustomRole, error) {

coderd/database/dump.sql

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

coderd/database/foreign_key_constraint.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.
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
CREATE TYPE "crypto_key_feature" AS ENUM (
1+
CREATE TYPE crypto_key_feature AS ENUM (
22
'workspace_apps',
33
'oidc_convert',
44
'peer_reconnect'
55
);
66

7-
CREATE TABLE "crypto_keys" (
8-
"feature" "crypto_key_feature" NOT NULL,
9-
"sequence" integer NOT NULL,
10-
"secret" text NULL,
11-
"starts_at" timestamptz NOT NULL,
12-
"deletes_at" timestamptz NULL,
13-
PRIMARY KEY ("feature", "sequence")
7+
CREATE TABLE crypto_keys (
8+
feature crypto_key_feature NOT NULL,
9+
sequence integer NOT NULL,
10+
secret text NULL,
11+
secret_key_id text NULL REFERENCES dbcrypt_keys(active_key_digest),
12+
starts_at timestamptz NOT NULL,
13+
deletes_at timestamptz NULL,
14+
PRIMARY KEY (feature, sequence)
1415
);
1516

coderd/database/models.go

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

0 commit comments

Comments
 (0)