headscale/hscontrol/db
Kristoffer Dalby 7a20db9f49 types: persist Node JSON slices via named IsZero types
Endpoints, Tags and ApprovedRoutes serialize as JSON on Node. GORM's
struct Updates path skips fields it considers zero, and reflect treats
a nil slice as zero — clearing any of these columns via the State
persist path would leave the previous value in the database.

Introduce Strings, Prefixes and AddrPorts as named slice types whose
IsZero() always reports false, so GORM keeps the column in the UPDATE
regardless of the slice being nil or empty. JSON marshalling is
unchanged: nil serializes to null, empty to []. List() returns the
underlying unnamed slice for callers (mainly testify assertions over
reflect.DeepEqual) that distinguish the named type from its base.

Regenerated types_clone.go and types_view.go follow the field-type
swap. Test assertions across hscontrol/{db,state,servertest} updated
to call .List() where reflect.DeepEqual previously matched the raw
slice type.

Fixes #3110
2026-05-15 11:21:58 +02:00
..
sqliteconfig all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
testdata/sqlite db: use PolicyManager for RequestTags migration 2026-01-21 15:10:29 +01:00
api_key.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
api_key_test.go grpc: support expire/delete API keys by ID 2026-01-20 17:13:38 +01:00
db.go state: replace zcache with bounded LRU for auth cache 2026-04-10 14:09:57 +01:00
db_test.go types: persist Node JSON slices via named IsZero types 2026-05-15 11:21:58 +02:00
ephemeral_garbage_collector_test.go all: apply formatter changes 2026-04-13 17:23:47 +01:00
ip.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
ip_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
main_test.go all: fix test flakiness and improve test infrastructure 2026-03-14 02:52:28 -07:00
node.go hscontrol: route hostname handling through dnsname and NodeStore 2026-04-18 15:12:21 +01:00
node_test.go hscontrol: route hostname handling through dnsname and NodeStore 2026-04-18 15:12:21 +01:00
policy.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
preauth_keys.go db: guard UsePreAuthKey with WHERE used=false 2026-04-10 14:09:57 +01:00
preauth_keys_test.go db: guard UsePreAuthKey with WHERE used=false 2026-04-10 14:09:57 +01:00
schema.sql hscontrol/db: add migration to clear user_id on tagged nodes 2026-02-20 21:51:00 +01:00
suite_test.go hscontrol/types: silence zerolog by default in tests 2026-04-17 16:31:49 +01:00
text_serialiser.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
user_update_test.go hscontrol: use Updates() instead of Save() for partial updates 2025-11-11 12:47:48 -06:00
users.go hscontrol: route hostname handling through dnsname and NodeStore 2026-04-18 15:12:21 +01:00
users_test.go types: persist Node JSON slices via named IsZero types 2026-05-15 11:21:58 +02:00
versioncheck.go db: fix database_versions table creation for PostgreSQL 2026-02-19 08:21:23 +01:00
versioncheck_test.go db: enforce strict version upgrade path 2026-02-19 08:21:23 +01:00