Skip to content

Commit ae956fb

Browse files
committed
Store mesh key in the database
1 parent d8580d1 commit ae956fb

File tree

6 files changed

+69
-3
lines changed

6 files changed

+69
-3
lines changed

coderd/coderd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ func New(options *Options) *API {
127127
}
128128
if options.DERPServer == nil {
129129
options.DERPServer = derp.NewServer(key.NewNode(), tailnet.Logger(options.Logger.Named("derp")))
130-
options.DERPServer.SetMeshKey("todo-kyle-change-this")
131130
}
132131
if options.Auditor == nil {
133132
options.Auditor = audit.NewNop()

coderd/database/databasefake/databasefake.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,11 @@ type data struct {
110110
replicas []database.Replica
111111

112112
deploymentID string
113+
derpMeshKey string
113114
lastLicenseID int32
114115
}
115116

116-
func (q *fakeQuerier) Ping(_ context.Context) (time.Duration, error) {
117+
func (*fakeQuerier) Ping(_ context.Context) (time.Duration, error) {
117118
return 0, nil
118119
}
119120

@@ -2890,6 +2891,21 @@ func (q *fakeQuerier) GetDeploymentID(_ context.Context) (string, error) {
28902891
return q.deploymentID, nil
28912892
}
28922893

2894+
func (q *fakeQuerier) InsertDERPMeshKey(_ context.Context, id string) error {
2895+
q.mutex.Lock()
2896+
defer q.mutex.Unlock()
2897+
2898+
q.derpMeshKey = id
2899+
return nil
2900+
}
2901+
2902+
func (q *fakeQuerier) GetDERPMeshKey(_ context.Context) (string, error) {
2903+
q.mutex.RLock()
2904+
defer q.mutex.RUnlock()
2905+
2906+
return q.derpMeshKey, nil
2907+
}
2908+
28932909
func (q *fakeQuerier) InsertLicense(
28942910
_ context.Context, arg database.InsertLicenseParams,
28952911
) (database.License, error) {
@@ -3156,7 +3172,7 @@ func (q *fakeQuerier) DeleteGroupByID(_ context.Context, id uuid.UUID) error {
31563172
return sql.ErrNoRows
31573173
}
31583174

3159-
func (q *fakeQuerier) DeleteReplicasUpdatedBefore(ctx context.Context, before time.Time) error {
3175+
func (q *fakeQuerier) DeleteReplicasUpdatedBefore(_ context.Context, before time.Time) error {
31603176
q.mutex.Lock()
31613177
defer q.mutex.Unlock()
31623178

coderd/database/querier.go

Lines changed: 2 additions & 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: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/siteconfig.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@ INSERT INTO site_configs (key, value) VALUES ('deployment_id', $1);
33

44
-- name: GetDeploymentID :one
55
SELECT value FROM site_configs WHERE key = 'deployment_id';
6+
7+
-- name: InsertDERPMeshKey :exec
8+
INSERT INTO site_configs (key, value) VALUES ('derp_mesh_key', $1);
9+
10+
-- name: GetDERPMeshKey :one
11+
SELECT value FROM site_configs WHERE key = 'derp_mesh_key';

enterprise/cli/server.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@ package cli
22

33
import (
44
"context"
5+
"database/sql"
6+
"errors"
57
"io"
68
"net/url"
79

810
"github.com/spf13/cobra"
911
"golang.org/x/xerrors"
12+
"tailscale.com/derp"
13+
"tailscale.com/types/key"
1014

1115
"github.com/coder/coder/cli/deployment"
16+
"github.com/coder/coder/cryptorand"
1217
"github.com/coder/coder/enterprise/coderd"
18+
"github.com/coder/coder/tailnet"
1319

1420
agpl "github.com/coder/coder/cli"
1521
agplcoderd "github.com/coder/coder/coderd"
@@ -25,6 +31,23 @@ func server() *cobra.Command {
2531
}
2632
}
2733

34+
options.DERPServer = derp.NewServer(key.NewNode(), tailnet.Logger(options.Logger.Named("derp")))
35+
meshKey, err := options.Database.GetDERPMeshKey(ctx)
36+
if err != nil {
37+
if !errors.Is(err, sql.ErrNoRows) {
38+
return nil, nil, xerrors.Errorf("get mesh key: %w", err)
39+
}
40+
meshKey, err = cryptorand.String(32)
41+
if err != nil {
42+
return nil, nil, xerrors.Errorf("generate mesh key: %w", err)
43+
}
44+
err = options.Database.InsertDERPMeshKey(ctx, meshKey)
45+
if err != nil {
46+
return nil, nil, xerrors.Errorf("insert mesh key: %w", err)
47+
}
48+
}
49+
options.DERPServer.SetMeshKey(meshKey)
50+
2851
o := &coderd.Options{
2952
AuditLogging: dflags.AuditLogging.Value,
3053
BrowserOnly: dflags.BrowserOnly.Value,

0 commit comments

Comments
 (0)