mirror of
https://github.com/bitwarden/server.git
synced 2026-06-01 01:55:55 -05:00
40 lines
1.4 KiB
C#
40 lines
1.4 KiB
C#
using Bit.Seeder.Data.Distributions;
|
|
using Bit.Seeder.Factories;
|
|
using Bit.Seeder.Options;
|
|
using Bit.Seeder.Pipeline;
|
|
|
|
namespace Bit.Seeder.Steps;
|
|
|
|
/// <summary>
|
|
/// Generates folders for each user based on a configurable distribution, encrypted with each user's symmetric key.
|
|
/// </summary>
|
|
internal sealed class GenerateFoldersStep(DensityProfile? density = null) : IStep
|
|
{
|
|
public void Execute(SeederContext context)
|
|
{
|
|
var generator = context.RequireGenerator();
|
|
var userDigests = context.Registry.UserDigests;
|
|
var distribution = density?.FolderDistribution ?? FolderCountDistributions.Realistic;
|
|
|
|
for (var index = 0; index < userDigests.Count; index++)
|
|
{
|
|
var digest = userDigests[index];
|
|
var range = distribution.Select(index, userDigests.Count);
|
|
var count = range.Min + (index % Math.Max(range.Max - range.Min + 1, 1));
|
|
var folderIds = new List<Guid>(count);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
var folder = FolderSeeder.Create(
|
|
digest.UserId,
|
|
digest.SymmetricKey,
|
|
generator.Folder.GetFolderName(i));
|
|
context.Folders.Add(folder);
|
|
folderIds.Add(folder.Id);
|
|
}
|
|
|
|
context.Registry.UserFolderIds[digest.UserId] = folderIds;
|
|
}
|
|
}
|
|
}
|