headscale/hscontrol/types
Kristoffer Dalby 75e56df9e4 hscontrol: enforce that tagged nodes never have user_id
Tagged nodes are owned by their tags, not a user. Enforce this
invariant at every write path:

- createAndSaveNewNode: do not set UserID for tagged PreAuthKey
  registration; clear UserID when advertise-tags are applied
  during OIDC/CLI registration
- SetNodeTags: clear UserID/User when tags are assigned
- processReauthTags: clear UserID/User when tags are applied
  during re-authentication
- validateNodeOwnership: reject tagged nodes with non-nil UserID
- NodeStore: skip nodesByUser indexing for tagged nodes since
  they have no owning user
- HandleNodeFromPreAuthKey: add fallback lookup for tagged PAK
  re-registration (tagged nodes indexed under UserID(0)); guard
  against nil User deref for tagged nodes in different-user check

Since tagged nodes now have user_id = NULL, ListNodesByUser
will not return them and DestroyUser naturally allows deleting
users whose nodes have all been tagged. The ON DELETE CASCADE
FK cannot reach tagged nodes through a NULL foreign key.

Also tone down shouty comments throughout state.go.

Fixes #3077
2026-02-20 21:51:00 +01:00
..
change all: apply golangci-lint 2.9.0 fixes 2026-02-19 08:21:23 +01:00
testdata Restore support for "Override local DNS" (#2438) 2025-04-17 17:16:59 +02:00
api_key.go types: add MarshalZerologObject to domain types 2026-02-06 07:40:29 +01:00
common.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
common_test.go mapper: produce map before poll (#2628) 2025-07-28 11:15:53 +02:00
config.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
config_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
const.go improve testing of route failover logic 2024-04-15 12:31:53 +02:00
node.go hscontrol: enforce that tagged nodes never have user_id 2026-02-20 21:51:00 +01:00
node_tags_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
node_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
policy.go feat: implements apis for managing headscale policy (#1792) 2024-07-18 07:38:25 +02:00
preauth_key.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
preauth_key_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
routes.go Redo route code (#2422) 2025-02-26 16:22:55 +01:00
types_clone.go make tags first class node owner (#2885) 2025-12-02 12:01:25 +01:00
types_view.go gen: regenerate protobuf and type views 2026-01-21 19:17:10 +00:00
users.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
users_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
version.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00