using Bit.Core.Vault.Enums; using Bit.Seeder.Data.Distributions; using Bit.Seeder.Data.Enums; namespace Bit.Seeder.Options; /// /// Options for seeding an organization with vault data. /// public class OrganizationVaultOptions { /// /// Organization name. /// public required string Name { get; init; } /// /// Domain for user emails (e.g., "example.com"). /// public required string Domain { get; init; } /// /// Number of member users to create. /// public required int Users { get; init; } /// /// Number of login ciphers to create. /// public int Ciphers { get; init; } = 0; /// /// Number of groups to create. /// public int Groups { get; init; } = 0; /// /// When true and Users >= 10, creates a realistic mix of user statuses: /// 85% Confirmed, 5% Invited, 5% Accepted, 5% Revoked. /// When false or Users < 10, all users are Confirmed. /// public bool RealisticStatusMix { get; init; } = false; /// /// Org structure for realistic collection names. /// public OrgStructureModel? StructureModel { get; init; } /// /// Username pattern for corporate email format (e.g., first.last@domain). /// Only applies to CorporateEmail category usernames. /// public UsernamePatternType UsernamePattern { get; init; } = UsernamePatternType.FirstDotLast; /// /// Distribution of username categories (corporate email, personal email, social handles, etc.). /// Use for a typical enterprise mix (45% corporate). /// Defaults to Realistic if not specified. /// public Distribution UsernameDistribution { get; init; } = UsernameDistributions.Realistic; /// /// Distribution of password strengths for cipher logins. /// Use for breach-data distribution /// (25% VeryWeak, 30% Weak, 25% Fair, 15% Strong, 5% VeryStrong). /// Defaults to Realistic if not specified. /// public Distribution PasswordDistribution { get; init; } = PasswordDistributions.Realistic; /// /// Geographic region for culturally-appropriate name generation in cipher usernames. /// Defaults to Global (mixed locales from all regions). /// public GeographicRegion? Region { get; init; } /// /// When specified, ciphers are distributed according to the percentages. /// Use for a typical enterprise mix. /// public Distribution CipherTypeDistribution { get; init; } = CipherTypeDistributions.Realistic; /// /// Seed for deterministic data generation. When null, derived from Domain hash. /// public int? Seed { get; init; } }