From 129736ad61f0031953b009e25d0c7fef0c57b717 Mon Sep 17 00:00:00 2001 From: Dmitri Dolguikh Date: Thu, 30 Jul 2026 16:03:19 +0200 Subject: [PATCH] support for account settings Signed-off-by: Dmitri Dolguikh --- .../internals/network_map_db/db_store.go | 1 + .../network_map_db/pgsql/account_settings.go | 47 +++++++++++++++++++ .../network_map_db/pgsql/group_test.go | 19 ++++++++ 3 files changed, 67 insertions(+) create mode 100644 management/internals/network_map_db/pgsql/account_settings.go diff --git a/management/internals/network_map_db/db_store.go b/management/internals/network_map_db/db_store.go index 5f6e565cc..a97b4b716 100644 --- a/management/internals/network_map_db/db_store.go +++ b/management/internals/network_map_db/db_store.go @@ -27,6 +27,7 @@ type NetworkMapDBStore interface { GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error) GetNetwork(ctx context.Context, accountId string) (nmdata.Network, error) GetAccountZones(ctx context.Context, accountId string) ([]nmdata.CustomZone, error) + GetAccountSettings(ctx context.Context, accountId string) (nmdata.AccountSettingsInfo, error) } type NetworkMapDBStoreImpl struct { diff --git a/management/internals/network_map_db/pgsql/account_settings.go b/management/internals/network_map_db/pgsql/account_settings.go new file mode 100644 index 000000000..5ac3175be --- /dev/null +++ b/management/internals/network_map_db/pgsql/account_settings.go @@ -0,0 +1,47 @@ +package networkmap_pgsql + +import ( + "context" + "database/sql" + "time" + + "github.com/jackc/pgx/v5" + "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" +) + +const ( + GetAccountSettingsQuery = ` + select settings_peer_login_expiration_enabled as peer_login_expiration_enabled, + settings_peer_login_expiration as peer_login_expiration, + settings_peer_inactivity_expiration_enabled as peer_inactivity_expiration_enabled, + settings_peer_inactivity_expiration as peer_inactivity_expiration + from accounts + where id=$1 + ` +) + +func (pg *PgStore) GetAccountSettings(ctx context.Context, accountId string) (nmdata.AccountSettingsInfo, error) { + rows, err := pg.pool.Query(ctx, GetAccountSettingsQuery, accountId) + if err != nil { + return nmdata.AccountSettingsInfo{}, err + } + + settings, err := pgx.CollectOneRow(rows, pgx.RowToStructByName[account]) + if err != nil { + return nmdata.AccountSettingsInfo{}, err + } + + return nmdata.AccountSettingsInfo{ + PeerLoginExpirationEnabled: settings.PeerLoginExpirationEnabled.Bool, + PeerLoginExpiration: time.Duration(settings.PeerLoginExpiration.Int64), + PeerInactivityExpirationEnabled: settings.PeerLoginExpirationEnabled.Bool, + PeerInactivityExpiration: time.Duration(settings.PeerInactivityExpiration.Int64), + }, nil +} + +type account struct { + PeerLoginExpirationEnabled sql.NullBool + PeerLoginExpiration sql.NullInt64 + PeerInactivityExpirationEnabled sql.NullBool + PeerInactivityExpiration sql.NullInt64 +} diff --git a/management/internals/network_map_db/pgsql/group_test.go b/management/internals/network_map_db/pgsql/group_test.go index 610aaf218..6ed251d6d 100644 --- a/management/internals/network_map_db/pgsql/group_test.go +++ b/management/internals/network_map_db/pgsql/group_test.go @@ -5,6 +5,7 @@ import ( "fmt" "strings" "testing" + "time" _ "embed" @@ -215,6 +216,24 @@ func TestGetAccountZones(t *testing.T) { // ) } +func TestGetAccountSetings(t *testing.T) { + ctx := context.TODO() + + s, err := NewPostgresqlStore(ctx, "postgresql://root:netbird@localhost:5432/netbird") + assert.NoError(t, err) + // err = loadSQL(ctx, s.pool, initDb) + //assert.NoError(t, err) + + settings, err := s.GetAccountSettings(ctx, "d5n27dafadhs73bt5ovg") //"ckd7ee2fic3c73dtendg") + assert.NoError(t, err) + assert.Equal(t, nmdata.AccountSettingsInfo{ + PeerLoginExpirationEnabled: true, + PeerLoginExpiration: 86400000000000 * time.Nanosecond, + PeerInactivityExpirationEnabled: true, + PeerInactivityExpiration: 600000000000 * time.Nanosecond, + }, settings) +} + func loadSQL(ctx context.Context, pool *pgxpool.Pool, initdb string) error { queries := strings.Split(string(initdb), ";")