Skip to content

Commit 2cf3256

Browse files
Merge branch 'main' into billing/pm-30908/correct-premium-subscription-status-handling
2 parents 072e809 + c15c418 commit 2cf3256

File tree

9 files changed

+124
-156
lines changed

9 files changed

+124
-156
lines changed

src/Api/Tools/Models/Request/SendRequestModel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
using System.ComponentModel.DataAnnotations;
55
using System.Text.Json;
6-
using Bit.Api.Tools.Utilities;
76
using Bit.Core.Exceptions;
87
using Bit.Core.Tools.Entities;
98
using Bit.Core.Tools.Enums;
@@ -264,8 +263,9 @@ private Send ToSendBase(Send existingSend, ISendAuthorizationService authorizati
264263
}
265264
else
266265
{
267-
// Neither Password nor Emails provided - preserve existing values and infer AuthType
268-
existingSend.AuthType = SendUtilities.InferAuthType(existingSend);
266+
existingSend.Emails = null;
267+
existingSend.Password = null;
268+
existingSend.AuthType = Core.Tools.Enums.AuthType.None;
269269
}
270270

271271
existingSend.Disabled = Disabled.GetValueOrDefault();

src/Core/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/BlockClaimedDomainAccountCreationPolicyValidator.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,17 @@
55
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationDomains.Interfaces;
66
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.Models;
77
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyUpdateEvents.Interfaces;
8-
using Bit.Core.Services;
98

109
namespace Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyValidators;
1110

1211
public class BlockClaimedDomainAccountCreationPolicyValidator : IPolicyValidator, IPolicyValidationEvent
1312
{
1413
private readonly IOrganizationHasVerifiedDomainsQuery _organizationHasVerifiedDomainsQuery;
15-
private readonly IFeatureService _featureService;
1614

1715
public BlockClaimedDomainAccountCreationPolicyValidator(
18-
IOrganizationHasVerifiedDomainsQuery organizationHasVerifiedDomainsQuery,
19-
IFeatureService featureService)
16+
IOrganizationHasVerifiedDomainsQuery organizationHasVerifiedDomainsQuery)
2017
{
2118
_organizationHasVerifiedDomainsQuery = organizationHasVerifiedDomainsQuery;
22-
_featureService = featureService;
2319
}
2420

2521
public PolicyType Type => PolicyType.BlockClaimedDomainAccountCreation;
@@ -34,12 +30,6 @@ public async Task<string> ValidateAsync(SavePolicyModel policyRequest, Policy? c
3430

3531
public async Task<string> ValidateAsync(PolicyUpdate policyUpdate, Policy? currentPolicy)
3632
{
37-
// Check if feature is enabled
38-
if (!_featureService.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation))
39-
{
40-
return "This feature is not enabled";
41-
}
42-
4333
// Only validate when trying to ENABLE the policy
4434
if (policyUpdate is { Enabled: true })
4535
{

src/Core/Auth/UserFeatures/Registration/Implementations/RegisterUserCommand.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ public RegisterUserCommand(
8181
_emergencyAccessInviteTokenDataFactory = emergencyAccessInviteTokenDataFactory;
8282

8383
_providerServiceDataProtector = dataProtectionProvider.CreateProtector("ProviderServiceDataProtector");
84-
_featureService = featureService;
8584
}
8685

8786
public async Task<IdentityResult> RegisterUser(User user)
@@ -413,12 +412,6 @@ private RegistrationEmailVerificationTokenable ValidateRegistrationEmailVerifica
413412

414413
private async Task ValidateEmailDomainNotBlockedAsync(string email, Guid? excludeOrganizationId = null)
415414
{
416-
// Only check if feature flag is enabled
417-
if (!_featureService.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation))
418-
{
419-
return;
420-
}
421-
422415
var emailDomain = EmailValidation.GetDomain(email);
423416

424417
var isDomainBlocked = await _organizationDomainRepository.HasVerifiedDomainWithBlockClaimedDomainPolicyAsync(

src/Core/Auth/UserFeatures/Registration/Implementations/SendVerificationEmailForRegistrationCommand.cs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public class SendVerificationEmailForRegistrationCommand : ISendVerificationEmai
2222
private readonly GlobalSettings _globalSettings;
2323
private readonly IMailService _mailService;
2424
private readonly IDataProtectorTokenFactory<RegistrationEmailVerificationTokenable> _tokenDataFactory;
25-
private readonly IFeatureService _featureService;
2625
private readonly IOrganizationDomainRepository _organizationDomainRepository;
2726

2827
public SendVerificationEmailForRegistrationCommand(
@@ -31,15 +30,13 @@ public SendVerificationEmailForRegistrationCommand(
3130
GlobalSettings globalSettings,
3231
IMailService mailService,
3332
IDataProtectorTokenFactory<RegistrationEmailVerificationTokenable> tokenDataFactory,
34-
IFeatureService featureService,
3533
IOrganizationDomainRepository organizationDomainRepository)
3634
{
3735
_logger = logger;
3836
_userRepository = userRepository;
3937
_globalSettings = globalSettings;
4038
_mailService = mailService;
4139
_tokenDataFactory = tokenDataFactory;
42-
_featureService = featureService;
4340
_organizationDomainRepository = organizationDomainRepository;
4441

4542
}
@@ -57,17 +54,14 @@ public SendVerificationEmailForRegistrationCommand(
5754
}
5855

5956
// Check if the email domain is blocked by an organization policy
60-
if (_featureService.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation))
61-
{
62-
var emailDomain = EmailValidation.GetDomain(email);
57+
var emailDomain = EmailValidation.GetDomain(email);
6358

64-
if (await _organizationDomainRepository.HasVerifiedDomainWithBlockClaimedDomainPolicyAsync(emailDomain))
65-
{
66-
_logger.LogInformation(
67-
"User registration email verification blocked by domain claim policy. Domain: {Domain}",
68-
emailDomain);
69-
throw new BadRequestException("This email address is claimed by an organization using Bitwarden.");
70-
}
59+
if (await _organizationDomainRepository.HasVerifiedDomainWithBlockClaimedDomainPolicyAsync(emailDomain))
60+
{
61+
_logger.LogInformation(
62+
"User registration email verification blocked by domain claim policy. Domain: {Domain}",
63+
emailDomain);
64+
throw new BadRequestException("This email address is claimed by an organization using Bitwarden.");
7165
}
7266

7367
// Check to see if the user already exists

src/Core/Constants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ public static class FeatureFlagKeys
140140
public const string CreateDefaultLocation = "pm-19467-create-default-location";
141141
public const string AutomaticConfirmUsers = "pm-19934-auto-confirm-organization-users";
142142
public const string PM23845_VNextApplicationCache = "pm-24957-refactor-memory-application-cache";
143-
public const string BlockClaimedDomainAccountCreation = "pm-28297-block-uninvited-claimed-domain-registration";
144143
public const string DefaultUserCollectionRestore = "pm-30883-my-items-restored-users";
145144
public const string PremiumAccessQuery = "pm-29495-refactor-premium-interface";
146145
public const string RefactorMembersComponent = "pm-29503-refactor-members-inheritance";
@@ -256,6 +255,7 @@ public static class FeatureFlagKeys
256255
public const string PM27632_CipherCrudOperationsToSdk = "pm-27632-cipher-crud-operations-to-sdk";
257256
public const string PM30521_AutofillButtonViewLoginScreen = "pm-30521-autofill-button-view-login-screen";
258257
public const string PM29438_WelcomeDialogWithExtensionPrompt = "pm-29438-welcome-dialog-with-extension-prompt";
258+
public const string PM31039_ItemActionInExtension = "pm-31039-item-action-in-extension";
259259

260260
/* Innovation Team */
261261
public const string ArchiveVaultItems = "pm-19148-innovation-archive";

test/Api.Test/Tools/Controllers/SendsControllerTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ await _nonAnonymousSendCommand.Received(1).SaveSendAsync(Arg.Is<Send>(s =>
657657
}
658658

659659
[Theory, AutoData]
660-
public async Task Put_WithoutPasswordOrEmails_PreservesExistingPassword(Guid userId, Guid sendId)
660+
public async Task Put_WithoutPasswordOrEmails_ClearsExistingPassword(Guid userId, Guid sendId)
661661
{
662662
_userService.GetProperUserId(Arg.Any<ClaimsPrincipal>()).Returns(userId);
663663
var existingSend = new Send
@@ -685,13 +685,13 @@ public async Task Put_WithoutPasswordOrEmails_PreservesExistingPassword(Guid use
685685
Assert.Equal(sendId, result.Id);
686686
await _nonAnonymousSendCommand.Received(1).SaveSendAsync(Arg.Is<Send>(s =>
687687
s.Id == sendId &&
688-
s.AuthType == AuthType.Password &&
689-
s.Password == "hashed-password" &&
688+
s.AuthType == AuthType.None &&
689+
s.Password == null &&
690690
s.Emails == null));
691691
}
692692

693693
[Theory, AutoData]
694-
public async Task Put_WithoutPasswordOrEmails_PreservesExistingEmails(Guid userId, Guid sendId)
694+
public async Task Put_WithoutPasswordOrEmails_ClearsExistingEmails(Guid userId, Guid sendId)
695695
{
696696
_userService.GetProperUserId(Arg.Any<ClaimsPrincipal>()).Returns(userId);
697697
var existingSend = new Send
@@ -719,9 +719,9 @@ public async Task Put_WithoutPasswordOrEmails_PreservesExistingEmails(Guid userI
719719
Assert.Equal(sendId, result.Id);
720720
await _nonAnonymousSendCommand.Received(1).SaveSendAsync(Arg.Is<Send>(s =>
721721
s.Id == sendId &&
722-
s.AuthType == AuthType.Email &&
723-
s.Emails == "[email protected]" &&
724-
s.Password == null));
722+
s.AuthType == AuthType.None &&
723+
s.Password == null &&
724+
s.Emails == null));
725725
}
726726

727727
[Theory, AutoData]

test/Core.Test/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/BlockClaimedDomainAccountCreationPolicyValidatorTests.cs

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationDomains.Interfaces;
55
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.Models;
66
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyValidators;
7-
using Bit.Core.Services;
87
using Bit.Core.Test.AdminConsole.AutoFixture;
98
using Bit.Test.Common.AutoFixture;
109
using Bit.Test.Common.AutoFixture.Attributes;
@@ -20,10 +19,6 @@ public async Task ValidateAsync_EnablingPolicy_NoVerifiedDomains_ValidationError
2019
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
2120
{
2221
// Arrange
23-
sutProvider.GetDependency<IFeatureService>()
24-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
25-
.Returns(true);
26-
2722
sutProvider.GetDependency<IOrganizationHasVerifiedDomainsQuery>()
2823
.HasVerifiedDomainsAsync(policyUpdate.OrganizationId)
2924
.Returns(false);
@@ -41,10 +36,6 @@ public async Task ValidateAsync_EnablingPolicy_HasVerifiedDomains_Success(
4136
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
4237
{
4338
// Arrange
44-
sutProvider.GetDependency<IFeatureService>()
45-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
46-
.Returns(true);
47-
4839
sutProvider.GetDependency<IOrganizationHasVerifiedDomainsQuery>()
4940
.HasVerifiedDomainsAsync(policyUpdate.OrganizationId)
5041
.Returns(true);
@@ -61,11 +52,6 @@ public async Task ValidateAsync_DisablingPolicy_NoValidation(
6152
[PolicyUpdate(PolicyType.BlockClaimedDomainAccountCreation, false)] PolicyUpdate policyUpdate,
6253
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
6354
{
64-
// Arrange
65-
sutProvider.GetDependency<IFeatureService>()
66-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
67-
.Returns(true);
68-
6955
// Act
7056
var result = await sutProvider.Sut.ValidateAsync(policyUpdate, null);
7157

@@ -82,10 +68,6 @@ public async Task ValidateAsync_WithSavePolicyModel_EnablingPolicy_NoVerifiedDom
8268
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
8369
{
8470
// Arrange
85-
sutProvider.GetDependency<IFeatureService>()
86-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
87-
.Returns(true);
88-
8971
sutProvider.GetDependency<IOrganizationHasVerifiedDomainsQuery>()
9072
.HasVerifiedDomainsAsync(policyUpdate.OrganizationId)
9173
.Returns(false);
@@ -105,10 +87,6 @@ public async Task ValidateAsync_WithSavePolicyModel_EnablingPolicy_HasVerifiedDo
10587
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
10688
{
10789
// Arrange
108-
sutProvider.GetDependency<IFeatureService>()
109-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
110-
.Returns(true);
111-
11290
sutProvider.GetDependency<IOrganizationHasVerifiedDomainsQuery>()
11391
.HasVerifiedDomainsAsync(policyUpdate.OrganizationId)
11492
.Returns(true);
@@ -128,10 +106,6 @@ public async Task ValidateAsync_WithSavePolicyModel_DisablingPolicy_NoValidation
128106
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
129107
{
130108
// Arrange
131-
sutProvider.GetDependency<IFeatureService>()
132-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
133-
.Returns(true);
134-
135109
var savePolicyModel = new SavePolicyModel(policyUpdate, null, new EmptyMetadataModel());
136110

137111
// Act
@@ -144,31 +118,11 @@ await sutProvider.GetDependency<IOrganizationHasVerifiedDomainsQuery>()
144118
.HasVerifiedDomainsAsync(Arg.Any<Guid>());
145119
}
146120

147-
[Theory, BitAutoData]
148-
public async Task ValidateAsync_FeatureFlagDisabled_ReturnsError(
149-
[PolicyUpdate(PolicyType.BlockClaimedDomainAccountCreation, true)] PolicyUpdate policyUpdate,
150-
SutProvider<BlockClaimedDomainAccountCreationPolicyValidator> sutProvider)
151-
{
152-
// Arrange
153-
sutProvider.GetDependency<IFeatureService>()
154-
.IsEnabled(FeatureFlagKeys.BlockClaimedDomainAccountCreation)
155-
.Returns(false);
156-
157-
// Act
158-
var result = await sutProvider.Sut.ValidateAsync(policyUpdate, null);
159-
160-
// Assert
161-
Assert.Equal("This feature is not enabled", result);
162-
await sutProvider.GetDependency<IOrganizationHasVerifiedDomainsQuery>()
163-
.DidNotReceive()
164-
.HasVerifiedDomainsAsync(Arg.Any<Guid>());
165-
}
166-
167121
[Fact]
168122
public void Type_ReturnsBlockClaimedDomainAccountCreation()
169123
{
170124
// Arrange
171-
var validator = new BlockClaimedDomainAccountCreationPolicyValidator(null, null);
125+
var validator = new BlockClaimedDomainAccountCreationPolicyValidator(null);
172126

173127
// Act & Assert
174128
Assert.Equal(PolicyType.BlockClaimedDomainAccountCreation, validator.Type);
@@ -178,7 +132,7 @@ public void Type_ReturnsBlockClaimedDomainAccountCreation()
178132
public void RequiredPolicies_ReturnsEmpty()
179133
{
180134
// Arrange
181-
var validator = new BlockClaimedDomainAccountCreationPolicyValidator(null, null);
135+
var validator = new BlockClaimedDomainAccountCreationPolicyValidator(null);
182136

183137
// Act
184138
var requiredPolicies = validator.RequiredPolicies.ToList();

0 commit comments

Comments
 (0)