Skip to content

Commit 8318a7e

Browse files
author
Philipp Sauter
committed
feat: accept join token in Provision payload
It's now possible to start the siderolink-agent with a join token parameter. Clients are now required to submit that same token in Provision requests or the request will fail. Fixes #5592 Signed-off-by: Philipp Sauter <philipp.sauter@siderolabs.com>
1 parent b38c192 commit 8318a7e

File tree

6 files changed

+96
-29
lines changed

6 files changed

+96
-29
lines changed

api/siderolink/provision.pb.go

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

api/siderolink/provision.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ message ProvisionRequest {
1616
string node_uuid = 1;
1717
// Wireguard public key (as string) of the node.
1818
string node_public_key = 2;
19+
// Join token (as string) of the node.
20+
optional string join_token = 3;
1921
}
2022

2123
message ProvisionResponse {

api/siderolink/provision_vtproto.pb.go

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

cmd/siderolink-agent/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
func main() {
2121
flag.StringVar(&sideroLinkFlags.wireguardEndpoint, "sidero-link-wireguard-endpoint", "172.20.0.1:51821", "advertised Wireguard endpoint")
2222
flag.StringVar(&sideroLinkFlags.apiEndpoint, "sidero-link-api-endpoint", ":4000", "gRPC API endpoint for the SideroLink")
23+
flag.StringVar(&sideroLinkFlags.joinToken, "sidero-link-join-token", "", "join token")
2324
flag.StringVar(&eventSinkFlags.apiEndpoint, "event-sink-endpoint", ":8080", "gRPC API endpoint for the Event Sink")
2425
flag.StringVar(&logReceiverFlags.endpoint, "log-receiver-endpoint", ":4001", "TCP log receiver endpoint")
2526
flag.Parse()

cmd/siderolink-agent/siderolink.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
var sideroLinkFlags struct {
2424
wireguardEndpoint string
2525
apiEndpoint string
26+
joinToken string
2627
}
2728

2829
func sideroLink(ctx context.Context, eg *errgroup.Group, logger *zap.Logger) error {
@@ -56,6 +57,7 @@ func sideroLink(ctx context.Context, eg *errgroup.Group, logger *zap.Logger) err
5657
ServerAddress: serverAddr.IP(),
5758
ServerEndpoint: wireguardEndpoint,
5859
ServerPublicKey: privateKey.PublicKey(),
60+
JoinToken: sideroLinkFlags.joinToken,
5961
})
6062

6163
s := grpc.NewServer()

internal/server/server.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type Config struct {
3333
NodePrefix netaddr.IPPrefix
3434
ServerAddress netaddr.IP
3535
ServerEndpoint netaddr.IPPort
36+
JoinToken string
3637
ServerPublicKey wgtypes.Key
3738
}
3839

@@ -51,6 +52,10 @@ func (srv *Server) EventCh() <-chan wireguard.PeerEvent {
5152

5253
// Provision the SideroLink.
5354
func (srv *Server) Provision(ctx context.Context, req *pb.ProvisionRequest) (*pb.ProvisionResponse, error) {
55+
if srv.cfg.JoinToken != "" && (req.JoinToken == nil || *req.JoinToken != srv.cfg.JoinToken) {
56+
return nil, status.Error(codes.PermissionDenied, "invalid join token")
57+
}
58+
5459
// generated random address for the node
5560
raw := srv.cfg.NodePrefix.IP().As16()
5661
salt := make([]byte, 8)

0 commit comments

Comments
 (0)