[management] add update account peers hook (#3060)

This commit is contained in:
Pascal Fischer
2024-12-17 12:10:33 +01:00
committed by GitHub
parent 12ae7ff54e
commit 712341e73d
28 changed files with 263 additions and 190 deletions

View File

@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
s "github.com/netbirdio/netbird/management/server"
"github.com/netbirdio/netbird/management/server/networks/resources/types"
"github.com/netbirdio/netbird/management/server/permissions"
"github.com/netbirdio/netbird/management/server/status"
@@ -25,12 +26,14 @@ type Manager interface {
type managerImpl struct {
store store.Store
permissionsManager permissions.Manager
accountManager s.AccountManager
}
func NewManager(store store.Store, permissionsManager permissions.Manager) Manager {
func NewManager(store store.Store, permissionsManager permissions.Manager, accountManager s.AccountManager) Manager {
return &managerImpl{
store: store,
permissionsManager: permissionsManager,
accountManager: accountManager,
}
}
@@ -94,12 +97,19 @@ func (m *managerImpl) CreateResource(ctx context.Context, userID string, resourc
return nil, fmt.Errorf("failed to create new network resource: %w", err)
}
_, err = m.store.GetNetworkResourceByName(ctx, store.LockingStrengthShare, resource.AccountID, resource.Name)
_, err = m.store.GetNetworkResourceByName(ctx, store.LockingStrengthShare, resource.AccountID, resource.Name)
if err == nil {
return nil, errors.New("resource already exists")
}
err = m.store.SaveNetworkResource(ctx, store.LockingStrengthUpdate, resource)
if err != nil {
return nil, fmt.Errorf("failed to create network resource: %w", err)
}
return resource, m.store.SaveNetworkResource(ctx, store.LockingStrengthUpdate, resource)
go m.accountManager.UpdateAccountPeers(ctx, resource.AccountID)
return resource, nil
}
func (m *managerImpl) GetResource(ctx context.Context, accountID, userID, networkID, resourceID string) (*types.NetworkResource, error) {
@@ -150,7 +160,14 @@ func (m *managerImpl) UpdateResource(ctx context.Context, userID string, resourc
return nil, errors.New("new resource name already exists")
}
return resource, m.store.SaveNetworkResource(ctx, store.LockingStrengthUpdate, resource)
err = m.store.SaveNetworkResource(ctx, store.LockingStrengthUpdate, resource)
if err != nil {
return nil, fmt.Errorf("failed to update network resource: %w", err)
}
go m.accountManager.UpdateAccountPeers(ctx, resource.AccountID)
return resource, nil
}
func (m *managerImpl) DeleteResource(ctx context.Context, accountID, userID, networkID, resourceID string) error {
@@ -165,9 +182,16 @@ func (m *managerImpl) DeleteResource(ctx context.Context, accountID, userID, net
unlock := m.store.AcquireWriteLockByUID(ctx, accountID)
defer unlock()
return m.store.ExecuteInTransaction(ctx, func(transaction store.Store) error {
err = m.store.ExecuteInTransaction(ctx, func(transaction store.Store) error {
return m.DeleteResourceInTransaction(ctx, transaction, accountID, networkID, resourceID)
})
if err != nil {
return fmt.Errorf("failed to delete network resource: %w", err)
}
go m.accountManager.UpdateAccountPeers(ctx, accountID)
return nil
}
func (m *managerImpl) DeleteResourceInTransaction(ctx context.Context, transaction store.Store, accountID, networkID, resourceID string) error {

View File

@@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/netbirdio/netbird/management/server/mock_server"
"github.com/netbirdio/netbird/management/server/networks/resources/types"
"github.com/netbirdio/netbird/management/server/permissions"
"github.com/netbirdio/netbird/management/server/status"
@@ -25,7 +26,8 @@ func Test_GetAllResourcesInNetworkReturnsResources(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
resources, err := manager.GetAllResourcesInNetwork(ctx, accountID, userID, networkID)
require.NoError(t, err)
@@ -44,7 +46,8 @@ func Test_GetAllResourcesInNetworkReturnsPermissionDenied(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
resources, err := manager.GetAllResourcesInNetwork(ctx, accountID, userID, networkID)
require.Error(t, err)
@@ -62,7 +65,8 @@ func Test_GetAllResourcesInAccountReturnsResources(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
resources, err := manager.GetAllResourcesInAccount(ctx, accountID, userID)
require.NoError(t, err)
@@ -80,7 +84,8 @@ func Test_GetAllResourcesInAccountReturnsPermissionDenied(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
resources, err := manager.GetAllResourcesInAccount(ctx, accountID, userID)
require.Error(t, err)
@@ -101,7 +106,8 @@ func Test_GetResourceInNetworkReturnsResources(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
resource, err := manager.GetResource(ctx, accountID, userID, networkID, resourceID)
require.NoError(t, err)
@@ -121,7 +127,8 @@ func Test_GetResourceInNetworkReturnsPermissionDenied(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
resources, err := manager.GetResource(ctx, accountID, userID, networkID, resourceID)
require.Error(t, err)
@@ -146,7 +153,8 @@ func Test_CreateResourceSuccessfully(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(store, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(store, permissionsManager, &am)
createdResource, err := manager.CreateResource(ctx, userID, resource)
require.NoError(t, err)
@@ -170,7 +178,8 @@ func Test_CreateResourceFailsWithPermissionDenied(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(store, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(store, permissionsManager, &am)
createdResource, err := manager.CreateResource(ctx, userID, resource)
require.Error(t, err)
@@ -195,7 +204,8 @@ func Test_CreateResourceFailsWithInvalidAddress(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(store, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(store, permissionsManager, &am)
createdResource, err := manager.CreateResource(ctx, userID, resource)
require.Error(t, err)
@@ -219,7 +229,8 @@ func Test_CreateResourceFailsWithUsedName(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(store, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(store, permissionsManager, &am)
createdResource, err := manager.CreateResource(ctx, userID, resource)
require.Error(t, err)
@@ -247,7 +258,8 @@ func Test_UpdateResourceSuccessfully(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
updatedResource, err := manager.UpdateResource(ctx, userID, resource)
require.NoError(t, err)
@@ -277,7 +289,8 @@ func Test_UpdateResourceFailsWithResourceNotFound(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
updatedResource, err := manager.UpdateResource(ctx, userID, resource)
require.Error(t, err)
@@ -305,7 +318,8 @@ func Test_UpdateResourceFailsWithNameInUse(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
updatedResource, err := manager.UpdateResource(ctx, userID, resource)
require.Error(t, err)
@@ -333,7 +347,8 @@ func Test_UpdateResourceFailsWithPermissionDenied(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
updatedResource, err := manager.UpdateResource(ctx, userID, resource)
require.Error(t, err)
@@ -353,7 +368,8 @@ func Test_DeleteResourceSuccessfully(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(s, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(s, permissionsManager, &am)
err = manager.DeleteResource(ctx, accountID, userID, networkID, resourceID)
require.NoError(t, err)
@@ -372,7 +388,8 @@ func Test_DeleteResourceFailsWithPermissionDenied(t *testing.T) {
}
t.Cleanup(cleanUp)
permissionsManager := permissions.NewManagerMock()
manager := NewManager(store, permissionsManager)
am := mock_server.MockAccountManager{}
manager := NewManager(store, permissionsManager, &am)
err = manager.DeleteResource(ctx, accountID, userID, networkID, resourceID)
require.Error(t, err)