support for GetPrivateServices in sqlite

Signed-off-by: Dmitri Dolguikh <dmitri.external@netbird.io>
This commit is contained in:
Dmitri Dolguikh
2026-08-11 14:25:39 +02:00
parent 859af13c12
commit cd6f63272b
3 changed files with 91 additions and 16 deletions

View File

@@ -10,13 +10,9 @@ import (
"github.com/stretchr/testify/assert"
networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db"
"github.com/netbirdio/netbird/management/server/types"
)
func TestGetPrivateServicesViaPgxConnection(t *testing.T) {
if engine == string(types.SqliteStoreEngine) {
t.Skip()
}
func TestGetPrivateServices(t *testing.T) {
ctx := context.TODO()
execQuery(t, ctx,
@@ -54,11 +50,7 @@ func TestGetPrivateServicesViaPgxConnection(t *testing.T) {
})
}
func TestGetProxyTargetedDomainResourceIDsViaPgxConnection(t *testing.T) {
if engine == string(types.SqliteStoreEngine) {
t.Skip()
}
func TestGetProxyTargetedDomainResourceIDs(t *testing.T) {
ctx := context.TODO()
execQuery(t, ctx,

View File

@@ -0,0 +1,89 @@
package networkmap_sqlite
import (
"context"
"database/sql"
"encoding/json"
networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db"
)
const (
GetServicesQuery = `
select enabled, private, access_groups, proxy_cluster, domain
from services
where account_id=?
`
GetProxyTargetedDomainResourcesQuery = `
select t.target_id
from targets as t
join services as s on s.id = t.service_id
where s.account_id=? and s.enabled and not coalesce(s.terminated, false)
and t.enabled and t.target_type='domain' and t.target_id is not null
`
)
func (sc *SqliteStoreConn) GetPrivateServices(ctx context.Context, accountId string) ([]networkmapdb.Service, error) {
rows, err := sc.Conn.QueryContext(ctx, GetServicesQuery, accountId)
if err != nil {
return nil, err
}
services, err := CollectRowsForSqlite[service](rows)
if err != nil {
return nil, err
}
toret := make([]networkmapdb.Service, 0, len(services))
for _, service := range services {
acg := []string{}
if service.AccessGroups != nil {
if err := json.Unmarshal(service.AccessGroups, &acg); err != nil {
return nil, err
}
}
s := networkmapdb.Service{
Enabled: service.Enabled,
Private: service.Private,
AccessGroups: acg,
ProxyCluster: service.ProxyCluster,
Domain: service.Domain,
}
toret = append(toret, s)
}
return toret, nil
}
func (sc *SqliteStoreConn) GetProxyTargetedDomainResourceIDs(ctx context.Context, accountId string) (map[string]struct{}, error) {
rows, err := sc.Conn.QueryContext(ctx, GetProxyTargetedDomainResourcesQuery, accountId)
if err != nil {
return nil, err
}
defer rows.Close()
toret := make(map[string]struct{})
for rows.Next() {
var id string
err := rows.Scan(&id)
if err != nil {
return nil, err
}
toret[id] = struct{}{}
}
if err := rows.Err(); err != nil {
return nil, err
}
return toret, nil
}
type service struct {
Enabled sql.NullBool
Private sql.NullBool
AccessGroups []byte
ProxyCluster sql.NullString
Domain sql.NullString
}

View File

@@ -122,9 +122,3 @@ func CollectRowsForSqlite[T any](rows *sql.Rows) ([]T, error) {
func (s *SqliteStoreConn) GetAllowedUsers(ctx context.Context, accountId string) (map[string]struct{}, map[string][]string, error) {
return nil, nil, nil
}
func (s *SqliteStoreConn) GetPrivateServices(ctx context.Context, accountId string) ([]networkmapdb.Service, error) {
return nil, nil
}
func (s *SqliteStoreConn) GetProxyTargetedDomainResourceIDs(ctx context.Context, accountId string) (map[string]struct{}, error) {
return nil, nil
}