From 9391b94f3982fb008a8fa3973cb575fdcd42e550 Mon Sep 17 00:00:00 2001 From: Ike Kottlowski Date: Thu, 22 Jan 2026 23:07:49 -0500 Subject: [PATCH] chore: fixing nullable compatibility. --- src/Core/Auth/Models/Data/EmergencyAccessDetails.cs | 3 +++ src/Core/Platform/Mail/HandlebarsMailService.cs | 10 +++++++--- .../EmergencyAccessRotationValidatorTests.cs | 2 +- .../EmergencyAccess/EmergencyAccessMailTests.cs | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Core/Auth/Models/Data/EmergencyAccessDetails.cs b/src/Core/Auth/Models/Data/EmergencyAccessDetails.cs index b179f67af5..86c1e6953f 100644 --- a/src/Core/Auth/Models/Data/EmergencyAccessDetails.cs +++ b/src/Core/Auth/Models/Data/EmergencyAccessDetails.cs @@ -8,6 +8,9 @@ public class EmergencyAccessDetails : EmergencyAccess public string? GranteeEmail { get; set; } public string? GranteeAvatarColor { get; set; } public string? GrantorName { get; set; } + /// + /// Grantor email is assumed not null because in order to create an emergency access the grantor must be an existing user. + /// public required string GrantorEmail { get; set; } public string? GrantorAvatarColor { get; set; } } diff --git a/src/Core/Platform/Mail/HandlebarsMailService.cs b/src/Core/Platform/Mail/HandlebarsMailService.cs index d57ca400fd..66253a5acd 100644 --- a/src/Core/Platform/Mail/HandlebarsMailService.cs +++ b/src/Core/Platform/Mail/HandlebarsMailService.cs @@ -1,6 +1,4 @@ -#nullable enable - -using System.Diagnostics; +using System.Diagnostics; using System.Net; using System.Reflection; using System.Text.Json; @@ -13,6 +11,7 @@ using Bit.Core.Auth.Models.Mail; using Bit.Core.Billing.Enums; using Bit.Core.Billing.Models.Mail; using Bit.Core.Entities; +using Bit.Core.Exceptions; using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Mail; using Bit.Core.Models.Mail.Auth; @@ -1040,6 +1039,11 @@ public class HandlebarsMailService : IMailService public async Task SendEmergencyAccessInviteEmailAsync(EmergencyAccess emergencyAccess, string name, string token) { + if(string.IsNullOrEmpty(emergencyAccess.Email)) + { + throw new BadRequestException("Emergency Access not valid."); + } + var message = CreateDefaultMessage($"Emergency Access Contact Invite", emergencyAccess.Email); var model = new EmergencyAccessInvitedViewModel { diff --git a/test/Api.Test/KeyManagement/Validators/EmergencyAccessRotationValidatorTests.cs b/test/Api.Test/KeyManagement/Validators/EmergencyAccessRotationValidatorTests.cs index e00129fd89..767d735660 100644 --- a/test/Api.Test/KeyManagement/Validators/EmergencyAccessRotationValidatorTests.cs +++ b/test/Api.Test/KeyManagement/Validators/EmergencyAccessRotationValidatorTests.cs @@ -30,7 +30,7 @@ public class EmergencyAccessRotationValidatorTests KeyEncrypted = e.KeyEncrypted, Type = e.Type }).ToList(); - userEmergencyAccess.Add(new EmergencyAccessDetails { Id = Guid.NewGuid(), KeyEncrypted = "TestKey" }); + userEmergencyAccess.Add(new EmergencyAccessDetails { Id = Guid.NewGuid(), GrantorEmail="grantor@example.com", KeyEncrypted = "TestKey" }); sutProvider.GetDependency().GetManyDetailsByGrantorIdAsync(user.Id) .Returns(userEmergencyAccess); diff --git a/test/Core.Test/Auth/UserFeatures/EmergencyAccess/EmergencyAccessMailTests.cs b/test/Core.Test/Auth/UserFeatures/EmergencyAccess/EmergencyAccessMailTests.cs index cee2f64fc4..60c3644dae 100644 --- a/test/Core.Test/Auth/UserFeatures/EmergencyAccess/EmergencyAccessMailTests.cs +++ b/test/Core.Test/Auth/UserFeatures/EmergencyAccess/EmergencyAccessMailTests.cs @@ -148,6 +148,6 @@ public class EmergencyAccessMailTests Assert.NotNull(mail); Assert.NotNull(mail.View); Assert.Equal(_emergencyAccessMailSubject, mail.Subject); - Assert.Equal(_emergencyAccessHelpUrl, mail.View.EmergencyAccessHelpPageUrl); + Assert.Equal(_emergencyAccessHelpUrl, EmergencyAccessRemoveGranteesMailView.EmergencyAccessHelpPageUrl); } }