diff --git a/src/Core/Auth/Entities/EmergencyAccess.cs b/src/Core/Auth/Entities/EmergencyAccess.cs index d855126468..36aaf46a8c 100644 --- a/src/Core/Auth/Entities/EmergencyAccess.cs +++ b/src/Core/Auth/Entities/EmergencyAccess.cs @@ -18,7 +18,7 @@ public class EmergencyAccess : ITableObject public string KeyEncrypted { get; set; } public EmergencyAccessType Type { get; set; } public EmergencyAccessStatusType Status { get; set; } - public int WaitTimeDays { get; set; } + public short WaitTimeDays { get; set; } public DateTime? RecoveryInitiatedDate { get; set; } public DateTime? LastNotificationDate { get; set; } public DateTime CreationDate { get; set; } = DateTime.UtcNow; diff --git a/src/Core/Auth/Services/EmergencyAccess/EmergencyAccessService.cs b/src/Core/Auth/Services/EmergencyAccess/EmergencyAccessService.cs index 4331179554..0072f85e61 100644 --- a/src/Core/Auth/Services/EmergencyAccess/EmergencyAccessService.cs +++ b/src/Core/Auth/Services/EmergencyAccess/EmergencyAccessService.cs @@ -79,7 +79,7 @@ public class EmergencyAccessService : IEmergencyAccessService Email = emergencyContactEmail.ToLowerInvariant(), Status = EmergencyAccessStatusType.Invited, Type = accessType, - WaitTimeDays = waitTime, + WaitTimeDays = (short)waitTime, CreationDate = DateTime.UtcNow, RevisionDate = DateTime.UtcNow, }; diff --git a/util/Seeder/Recipes/EmergencyAccessInviteRecipe.cs b/util/Seeder/Recipes/EmergencyAccessInviteRecipe.cs new file mode 100644 index 0000000000..c6d550e5bf --- /dev/null +++ b/util/Seeder/Recipes/EmergencyAccessInviteRecipe.cs @@ -0,0 +1,28 @@ +using Bit.Core.Auth.Enums; +using Bit.Core.Auth.Models.Business.Tokenables; +using Bit.Core.Tokens; +using Bit.Infrastructure.EntityFramework.Repositories; + +namespace Bit.Seeder.Recipes; + +public class EmergencyAccessInviteRecipe( + DatabaseContext db, + IDataProtectorTokenFactory dataProtectorTokenizer) +{ + public RecipeResult Seed(string email) + { + var invites = db.EmergencyAccesses + .Where(ea => ea.Email == email).ToList().Select(ea => + { + var token = dataProtectorTokenizer.Protect( + new EmergencyAccessInviteTokenable(ea, hoursTillExpiration: 1) + ); + return $"/accept-emergency?id={ea.Id}&name=Dummy&email={ea.Email}&token={token}"; + }); + + return new RecipeResult + { + Result = invites, + }; + } +} diff --git a/util/SeederApi/Program.cs b/util/SeederApi/Program.cs index cc9cee660f..c4bc16e977 100644 --- a/util/SeederApi/Program.cs +++ b/util/SeederApi/Program.cs @@ -13,22 +13,16 @@ builder.Services.AddControllers(); // Configure GlobalSettings from appsettings var globalSettings = builder.Services.AddGlobalSettingsServices(builder.Configuration, builder.Environment); -// Data Protection +// Common services builder.Services.AddCustomDataProtectionServices(builder.Environment, globalSettings); - -// Repositories +builder.Services.AddTokenizers(); builder.Services.AddDatabaseRepositories(globalSettings, forceEf: true); -// Identity Services builder.Services.AddScoped, Microsoft.AspNetCore.Identity.PasswordHasher>(); -// RustSDK Services +// Seeder services builder.Services.AddSingleton(); - -// Seeder Services builder.Services.AddScoped(); - -// Recipe Service builder.Services.AddScoped(); var app = builder.Build();