Files
2025-05-27 09:22:01 +02:00

95 lines
3.2 KiB
Go

package settings
import (
"context"
"fmt"
"github.com/gorilla/mux"
"github.com/netbirdio/netbird/management/server/integrations/extra_settings"
types2 "github.com/netbirdio/netbird/management/server/types"
"management/internal/modules/accounts/settings/types"
"management/internal/modules/users"
"management/internal/shared/activity"
"management/internal/shared/db"
"management/internal/shared/permissions"
"management/pkg/logging"
)
var log = logging.LoggerForThisPackage()
type Manager struct {
repository Repository
extraSettingsManager extra_settings.Manager
userManager *users.Manager
eventManager *activity.Manager
}
func NewManager(store *db.Store, router *mux.Router, eventManager *activity.Manager, permissionsManager permissions.Manager, userManager *users.Manager, extraSettingsManager extra_settings.Manager) *Manager {
repo := newRepository(store)
m := &Manager{
repository: repo,
extraSettingsManager: extraSettingsManager,
userManager: userManager,
eventManager: eventManager,
}
api := newHandler(m, permissionsManager)
api.RegisterEndpoints(router)
return m
}
func (m *Manager) GetExtraSettingsManager() extra_settings.Manager {
return m.extraSettingsManager
}
func (m *Manager) GetSettings(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID string) (*types.Settings, error) {
extraSettings, err := m.extraSettingsManager.GetExtraSettings(ctx, accountID)
if err != nil {
return nil, fmt.Errorf("get extra settings: %w", err)
}
settings, err := m.repository.GetAccountSettings(tx, strength, accountID)
if err != nil {
return nil, fmt.Errorf("get account settings: %w", err)
}
// Once we migrate the peer approval to settings manager this merging is obsolete
if settings.Extra != nil {
settings.Extra.FlowEnabled = extraSettings.FlowEnabled
settings.Extra.FlowPacketCounterEnabled = extraSettings.FlowPacketCounterEnabled
settings.Extra.FlowENCollectionEnabled = extraSettings.FlowENCollectionEnabled
settings.Extra.FlowDnsCollectionEnabled = extraSettings.FlowDnsCollectionEnabled
}
return settings, nil
}
func (m *Manager) GetExtraSettings(ctx context.Context, tx db.Transaction, accountID string) (*types.ExtraSettings, error) {
extraSettings, err := m.extraSettingsManager.GetExtraSettings(ctx, accountID)
if err != nil {
return nil, fmt.Errorf("get extra settings: %w", err)
}
settings, err := m.repository.GetAccountSettings(tx, db.LockingStrengthShare, accountID)
if err != nil {
return nil, fmt.Errorf("get account settings: %w", err)
}
// Once we migrate the peer approval to settings manager this merging is obsolete
if settings.Extra == nil {
settings.Extra = &types.ExtraSettings{}
}
settings.Extra.FlowEnabled = extraSettings.FlowEnabled
return settings.Extra, nil
}
func (m *Manager) UpdateExtraSettings(ctx context.Context, accountID, userID string, extraSettings *types.ExtraSettings) (bool, error) {
return m.extraSettingsManager.UpdateExtraSettings(ctx, accountID, userID, (*types2.ExtraSettings)(extraSettings))
}
func (m *Manager) UpdateSettings(ctx context.Context, tx db.Transaction, settings *types.Settings) (*types.Settings, error) {
return m.repository.UpdateSettings(tx, settings)
}