Skip to content

Commit 22a1ae0

Browse files
committed
fix: use typed wireguard public keys in database structs
1 parent bd07284 commit 22a1ae0

File tree

8 files changed

+65
-27
lines changed

8 files changed

+65
-27
lines changed

coderd/database/dbtypes/wireguard.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package dbtypes
2+
3+
import (
4+
"database/sql/driver"
5+
6+
"golang.org/x/xerrors"
7+
"tailscale.com/types/key"
8+
)
9+
10+
type NodePublic key.NodePublic
11+
12+
func (n NodePublic) Value() (driver.Value, error) {
13+
return key.NodePublic(n).MarshalText()
14+
}
15+
16+
func (n *NodePublic) Scan(value interface{}) error {
17+
switch v := value.(type) {
18+
case []byte:
19+
return (*key.NodePublic)(n).UnmarshalText(v)
20+
case string:
21+
return (*key.NodePublic)(n).UnmarshalText([]byte(v))
22+
default:
23+
return xerrors.Errorf("unexpected type: %T", v)
24+
}
25+
}
26+
27+
type DiscoPublic key.DiscoPublic
28+
29+
func (n DiscoPublic) Value() (driver.Value, error) {
30+
return key.DiscoPublic(n).MarshalText()
31+
}
32+
33+
func (n *DiscoPublic) Scan(value interface{}) error {
34+
switch v := value.(type) {
35+
case []byte:
36+
return (*key.DiscoPublic)(n).UnmarshalText(v)
37+
case string:
38+
return (*key.DiscoPublic)(n).UnmarshalText([]byte(v))
39+
default:
40+
return xerrors.Errorf("unexpected type: %T", v)
41+
}
42+
}

coderd/database/dump.sql

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
ALTER TABLE workspace_agents
22
ADD COLUMN wireguard_node_ipv6 inet NOT NULL DEFAULT '::/128',
3-
ADD COLUMN wireguard_node_public_key varchar(128) NOT NULL DEFAULT 'mkey:0000000000000000000000000000000000000000000000000000000000000000',
3+
ADD COLUMN wireguard_node_public_key varchar(128) NOT NULL DEFAULT 'nodekey:0000000000000000000000000000000000000000000000000000000000000000',
44
ADD COLUMN wireguard_disco_public_key varchar(128) NOT NULL DEFAULT 'discokey:0000000000000000000000000000000000000000000000000000000000000000';

coderd/database/models.go

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

coderd/database/sqlc.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ packages:
1717
output_db_file_name: db_tmp.go
1818

1919
overrides:
20-
- column: workspaces.wireguard_public_key
21-
go_type: tailscale.com/types/key.MachinePublic
22-
- column: workspaces.disco_public_key
23-
go_type: tailscale.com/types/key.DiscoPublic
20+
- column: workspace_agents.wireguard_node_public_key
21+
go_type: github.com/coder/coder/coderd/database/dbtypes.NodePublic
22+
- column: workspace_agents.wireguard_disco_public_key
23+
go_type: github.com/coder/coder/coderd/database/dbtypes.DiscoPublic
2424

2525
rename:
2626
api_key: APIKey

coderd/provisionerdaemons.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import (
1919
protobuf "google.golang.org/protobuf/proto"
2020
"storj.io/drpc/drpcmux"
2121
"storj.io/drpc/drpcserver"
22-
"tailscale.com/types/key"
2322

2423
"cdr.dev/slog"
2524

2625
"github.com/coder/coder/coderd/database"
26+
"github.com/coder/coder/coderd/database/dbtypes"
2727
"github.com/coder/coder/coderd/httpapi"
2828
"github.com/coder/coder/coderd/parameter"
2929
"github.com/coder/coder/coderd/rbac"
@@ -761,8 +761,8 @@ func insertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
761761
Valid: prAgent.StartupScript != "",
762762
},
763763
WireguardNodeIPv6: peerwg.UUIDToInet(agentID),
764-
WireguardNodePublicKey: key.NodePublic{}.String(),
765-
WireguardDiscoPublicKey: key.DiscoPublic{}.String(),
764+
WireguardNodePublicKey: dbtypes.NodePublic{},
765+
WireguardDiscoPublicKey: dbtypes.DiscoPublic{},
766766
})
767767
if err != nil {
768768
return xerrors.Errorf("insert agent: %w", err)

coderd/workspaceagents.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"cdr.dev/slog"
2323
"github.com/coder/coder/agent"
2424
"github.com/coder/coder/coderd/database"
25+
"github.com/coder/coder/coderd/database/dbtypes"
2526
"github.com/coder/coder/coderd/httpapi"
2627
"github.com/coder/coder/coderd/httpmw"
2728
"github.com/coder/coder/coderd/rbac"
@@ -488,8 +489,8 @@ func (api *API) postWorkspaceAgentKeys(rw http.ResponseWriter, r *http.Request)
488489

489490
err := api.Database.UpdateWorkspaceAgentKeysByID(ctx, database.UpdateWorkspaceAgentKeysByIDParams{
490491
ID: workspaceAgent.ID,
491-
WireguardNodePublicKey: keys.Public.String(),
492-
WireguardDiscoPublicKey: keys.Disco.String(),
492+
WireguardNodePublicKey: dbtypes.NodePublic(keys.Public),
493+
WireguardDiscoPublicKey: dbtypes.DiscoPublic(keys.Disco),
493494
})
494495
if err != nil {
495496
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
@@ -711,15 +712,8 @@ func convertWorkspaceAgent(dbAgent database.WorkspaceAgent, apps []codersdk.Work
711712
Directory: dbAgent.Directory,
712713
Apps: apps,
713714
IPv6: inetToNetaddr(dbAgent.WireguardNodeIPv6),
714-
}
715-
716-
err := workspaceAgent.WireguardPublicKey.UnmarshalText([]byte(dbAgent.WireguardNodePublicKey))
717-
if err != nil {
718-
return codersdk.WorkspaceAgent{}, xerrors.Errorf("unmarshal wireguard node public key %q: %w", dbAgent.WireguardNodePublicKey, err)
719-
}
720-
err = workspaceAgent.DiscoPublicKey.UnmarshalText([]byte(dbAgent.WireguardDiscoPublicKey))
721-
if err != nil {
722-
return codersdk.WorkspaceAgent{}, xerrors.Errorf("unmarshal disco public key %q: %w", dbAgent.WireguardDiscoPublicKey, err)
715+
WireguardPublicKey: key.NodePublic(dbAgent.WireguardNodePublicKey),
716+
DiscoPublicKey: key.DiscoPublic(dbAgent.WireguardDiscoPublicKey),
723717
}
724718

725719
if dbAgent.FirstConnectedAt.Valid {

0 commit comments

Comments
 (0)