2026-01-13 18:10:01 +01:00
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
2026-02-04 19:27:09 +01:00
|
|
|
|
using Bit.Core.Entities;
|
2026-01-13 18:10:01 +01:00
|
|
|
|
using Bit.Core.Repositories;
|
|
|
|
|
|
using Bit.Seeder.Factories;
|
2026-02-04 19:27:09 +01:00
|
|
|
|
using Bit.Seeder.Services;
|
|
|
|
|
|
using Microsoft.AspNetCore.Identity;
|
2026-01-13 18:10:01 +01:00
|
|
|
|
|
|
|
|
|
|
namespace Bit.Seeder.Scenes;
|
|
|
|
|
|
|
2026-01-27 12:55:04 -08:00
|
|
|
|
public struct SingleUserSceneResult
|
|
|
|
|
|
{
|
|
|
|
|
|
public Guid UserId { get; init; }
|
|
|
|
|
|
public string Kdf { get; init; }
|
|
|
|
|
|
public int KdfIterations { get; init; }
|
|
|
|
|
|
public string Key { get; init; }
|
|
|
|
|
|
public string PublicKey { get; init; }
|
|
|
|
|
|
public string PrivateKey { get; init; }
|
|
|
|
|
|
public string ApiKey { get; init; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-13 18:10:01 +01:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Creates a single user using the provided account details.
|
|
|
|
|
|
/// </summary>
|
2026-02-04 19:27:09 +01:00
|
|
|
|
public class SingleUserScene(
|
|
|
|
|
|
IPasswordHasher<User> passwordHasher,
|
|
|
|
|
|
IUserRepository userRepository,
|
|
|
|
|
|
IManglerService manglerService) : IScene<SingleUserScene.Request, SingleUserSceneResult>
|
2026-01-13 18:10:01 +01:00
|
|
|
|
{
|
|
|
|
|
|
public class Request
|
|
|
|
|
|
{
|
|
|
|
|
|
[Required]
|
|
|
|
|
|
public required string Email { get; set; }
|
|
|
|
|
|
public bool EmailVerified { get; set; } = false;
|
|
|
|
|
|
public bool Premium { get; set; } = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-27 12:55:04 -08:00
|
|
|
|
public async Task<SceneResult<SingleUserSceneResult>> SeedAsync(Request request)
|
2026-01-13 18:10:01 +01:00
|
|
|
|
{
|
2026-02-04 19:27:09 +01:00
|
|
|
|
// Pass service to factory - factory will call Mangle()
|
|
|
|
|
|
var user = UserSeeder.Create(
|
|
|
|
|
|
request.Email,
|
|
|
|
|
|
passwordHasher,
|
|
|
|
|
|
manglerService,
|
|
|
|
|
|
request.EmailVerified,
|
|
|
|
|
|
request.Premium);
|
2026-01-13 18:10:01 +01:00
|
|
|
|
|
|
|
|
|
|
await userRepository.CreateAsync(user);
|
|
|
|
|
|
|
2026-02-04 19:27:09 +01:00
|
|
|
|
return new SceneResult<SingleUserSceneResult>(
|
|
|
|
|
|
result: new SingleUserSceneResult
|
|
|
|
|
|
{
|
|
|
|
|
|
UserId = user.Id,
|
|
|
|
|
|
Kdf = user.Kdf.ToString(),
|
|
|
|
|
|
KdfIterations = user.KdfIterations,
|
|
|
|
|
|
Key = user.Key!,
|
|
|
|
|
|
PublicKey = user.PublicKey!,
|
|
|
|
|
|
PrivateKey = user.PrivateKey!,
|
|
|
|
|
|
ApiKey = user.ApiKey!,
|
|
|
|
|
|
},
|
|
|
|
|
|
mangleMap: manglerService.GetMangleMap());
|
2026-01-13 18:10:01 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|