Files
server/util/Seeder/Factories/UserSeeder.cs

55 lines
1.7 KiB
C#

using Bit.Core.Entities;
using Bit.Core.Enums;
using Bit.Core.Utilities;
using Bit.RustSDK;
using Bit.Seeder.Services;
using Microsoft.AspNetCore.Identity;
namespace Bit.Seeder.Factories;
internal static class UserSeeder
{
internal const string DefaultPassword = "asdfasdfasdf";
internal static (User user, UserKeys keys) Create(
string email,
IPasswordHasher<User> passwordHasher,
IManglerService manglerService,
string? name = null,
bool emailVerified = true,
bool premium = false,
short? maxStorageGb = null,
UserKeys? keys = null,
string? password = null,
int kdfIterations = 5_000,
uint poolIndex = 0)
{
// When keys are provided, caller owns email/key consistency - don't mangle
var mangledEmail = keys == null ? manglerService.Mangle(email) : email;
keys ??= RustSdkService.GenerateUserKeys(mangledEmail, password ?? DefaultPassword, kdfIterations, poolIndex);
var user = new User
{
Id = CoreHelpers.GenerateComb(),
Name = name ?? mangledEmail.Split('@')[0],
Email = mangledEmail,
EmailVerified = emailVerified,
MasterPassword = null,
SecurityStamp = Guid.NewGuid().ToString(),
Key = keys.EncryptedUserKey,
PublicKey = keys.PublicKey,
PrivateKey = keys.PrivateKey,
Premium = premium,
MaxStorageGb = maxStorageGb,
ApiKey = CoreHelpers.SecureRandomString(30),
Kdf = KdfType.PBKDF2_SHA256,
KdfIterations = kdfIterations
};
user.MasterPassword = passwordHasher.HashPassword(user, keys.MasterPasswordHash);
return (user, keys);
}
}