feat: file explorer
All checks were successful
Build and Push App Image / build-and-push (push) Successful in 50s
All checks were successful
Build and Push App Image / build-and-push (push) Successful in 50s
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/noteapp/backend/internal/application/dto"
|
||||
"github.com/noteapp/backend/internal/domain/entities"
|
||||
"github.com/noteapp/backend/internal/domain/repositories"
|
||||
"github.com/noteapp/backend/internal/infrastructure/security"
|
||||
)
|
||||
|
||||
// AdminService handles admin-level operations
|
||||
@@ -22,6 +23,7 @@ type AdminService struct {
|
||||
categoryRepo repositories.CategoryRepository
|
||||
featureFlagRepo repositories.FeatureFlagRepository
|
||||
permissionService *PermissionService
|
||||
encryptor *security.Encryptor
|
||||
}
|
||||
|
||||
// NewAdminService creates a new AdminService
|
||||
@@ -34,6 +36,7 @@ func NewAdminService(
|
||||
categoryRepo repositories.CategoryRepository,
|
||||
featureFlagRepo repositories.FeatureFlagRepository,
|
||||
permissionService *PermissionService,
|
||||
encryptor *security.Encryptor,
|
||||
) *AdminService {
|
||||
return &AdminService{
|
||||
userRepo: userRepo,
|
||||
@@ -44,6 +47,7 @@ func NewAdminService(
|
||||
categoryRepo: categoryRepo,
|
||||
featureFlagRepo: featureFlagRepo,
|
||||
permissionService: permissionService,
|
||||
encryptor: encryptor,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,10 +303,31 @@ func (s *AdminService) UpdateFeatureFlags(ctx context.Context, req *dto.UpdateFe
|
||||
return nil, errors.New("feature flags are unavailable")
|
||||
}
|
||||
|
||||
// Load existing flags so we can preserve the encrypted S3 secret when not updated
|
||||
existing, err := s.featureFlagRepo.GetFeatureFlags(ctx)
|
||||
if err != nil {
|
||||
existing = entities.NewDefaultFeatureFlags()
|
||||
}
|
||||
|
||||
flags := &entities.FeatureFlags{
|
||||
RegistrationEnabled: req.RegistrationEnabled,
|
||||
ProviderLoginEnabled: req.ProviderLoginEnabled,
|
||||
PublicSharingEnabled: req.PublicSharingEnabled,
|
||||
FileExplorerEnabled: req.FileExplorerEnabled,
|
||||
S3Endpoint: strings.TrimSpace(req.S3Endpoint),
|
||||
S3Bucket: strings.TrimSpace(req.S3Bucket),
|
||||
S3Region: strings.TrimSpace(req.S3Region),
|
||||
S3AccessKey: strings.TrimSpace(req.S3AccessKey),
|
||||
S3SecretKey: existing.S3SecretKey, // keep encrypted secret by default
|
||||
}
|
||||
|
||||
// Only re-encrypt if a new secret was supplied
|
||||
if s.encryptor != nil && strings.TrimSpace(req.S3SecretKey) != "" {
|
||||
encrypted, err := s.encryptor.Encrypt(strings.TrimSpace(req.S3SecretKey))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
flags.S3SecretKey = encrypted
|
||||
}
|
||||
|
||||
if err := s.featureFlagRepo.UpdateFeatureFlags(ctx, flags); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user