Skip to content

Commit 726c65d

Browse files
fix(refactor): [PM-34246] Rename Set Password to Finalize Onboarding - Initial set of renames.
1 parent 89f6e43 commit 726c65d

11 files changed

Lines changed: 76 additions & 73 deletions

File tree

src/Api/Auth/Controllers/AccountsController.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public class AccountsController : Controller
3838
private readonly IProviderUserRepository _providerUserRepository;
3939
private readonly IUserService _userService;
4040
private readonly IPolicyService _policyService;
41-
private readonly ISetInitialMasterPasswordCommandV1 _setInitialMasterPasswordCommandV1;
42-
private readonly ISetInitialMasterPasswordCommand _setInitialMasterPasswordCommand;
41+
private readonly ISetInitialMasterPasswordCommandV1 _finalizeOrgUserOnboardingV1;
42+
private readonly IFinalizeOrgUserOnboardingAsync _finalizeOrgUserOnboarding;
4343
private readonly ITdeSetPasswordCommand _tdeSetPasswordCommand;
4444
private readonly ITdeOffboardingPasswordCommand _tdeOffboardingPasswordCommand;
4545
private readonly ITwoFactorIsEnabledQuery _twoFactorIsEnabledQuery;
@@ -55,8 +55,8 @@ public AccountsController(
5555
IProviderUserRepository providerUserRepository,
5656
IUserService userService,
5757
IPolicyService policyService,
58-
ISetInitialMasterPasswordCommand setInitialMasterPasswordCommand,
59-
ISetInitialMasterPasswordCommandV1 setInitialMasterPasswordCommandV1,
58+
IFinalizeOrgUserOnboardingAsync finalizeOrgUserOnboarding,
59+
ISetInitialMasterPasswordCommandV1 finalizeOrgUserOnboardingV1,
6060
ITdeSetPasswordCommand tdeSetPasswordCommand,
6161
ITdeOffboardingPasswordCommand tdeOffboardingPasswordCommand,
6262
ITwoFactorIsEnabledQuery twoFactorIsEnabledQuery,
@@ -72,8 +72,8 @@ IUserRepository userRepository
7272
_providerUserRepository = providerUserRepository;
7373
_userService = userService;
7474
_policyService = policyService;
75-
_setInitialMasterPasswordCommand = setInitialMasterPasswordCommand;
76-
_setInitialMasterPasswordCommandV1 = setInitialMasterPasswordCommandV1;
75+
_finalizeOrgUserOnboarding = finalizeOrgUserOnboarding;
76+
_finalizeOrgUserOnboardingV1 = finalizeOrgUserOnboardingV1;
7777
_tdeSetPasswordCommand = tdeSetPasswordCommand;
7878
_tdeOffboardingPasswordCommand = tdeOffboardingPasswordCommand;
7979
_twoFactorIsEnabledQuery = twoFactorIsEnabledQuery;
@@ -214,6 +214,7 @@ public async Task PostPassword([FromBody] PasswordRequestModel model)
214214
}
215215

216216
[HttpPost("set-password")]
217+
[HttpPost("finalize-org-user-onboarding")]
217218
public async Task PostSetPasswordAsync([FromBody] SetInitialPasswordRequestModel model)
218219
{
219220
var user = await _userService.GetUserByPrincipalAsync(User);
@@ -230,7 +231,7 @@ public async Task PostSetPasswordAsync([FromBody] SetInitialPasswordRequestModel
230231
}
231232
else
232233
{
233-
await _setInitialMasterPasswordCommand.SetInitialMasterPasswordAsync(user, model.ToData());
234+
await _finalizeOrgUserOnboarding.FinalizeOrgUserOnboardingAsync(user, model.ToData());
234235
}
235236
}
236237
else
@@ -246,7 +247,7 @@ public async Task PostSetPasswordAsync([FromBody] SetInitialPasswordRequestModel
246247
throw new BadRequestException(ModelState);
247248
}
248249

249-
var result = await _setInitialMasterPasswordCommandV1.SetInitialMasterPasswordAsync(
250+
var result = await _finalizeOrgUserOnboardingV1.FinalizeOrgUserOnboardingAsync(
250251
user,
251252
model.MasterPasswordHash,
252253
model.Key,

src/Core/Auth/UserFeatures/UserMasterPassword/SetInitialMasterPasswordCommand.cs renamed to src/Core/Auth/UserFeatures/UserMasterPassword/FinalizeOrgUserOnboardingCommand.cs

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

1111
namespace Bit.Core.Auth.UserFeatures.UserMasterPassword;
1212

13-
public class SetInitialMasterPasswordCommand : ISetInitialMasterPasswordCommand
13+
public class FinalizeOrgUserOnboardingCommand : IFinalizeOrgUserOnboardingAsync
1414
{
1515
private readonly IUserService _userService;
1616
private readonly IUserRepository _userRepository;
@@ -20,7 +20,7 @@ public class SetInitialMasterPasswordCommand : ISetInitialMasterPasswordCommand
2020
private readonly IPasswordHasher<User> _passwordHasher;
2121
private readonly IEventService _eventService;
2222

23-
public SetInitialMasterPasswordCommand(IUserService userService, IUserRepository userRepository,
23+
public FinalizeOrgUserOnboardingCommand(IUserService userService, IUserRepository userRepository,
2424
IAcceptOrgUserCommand acceptOrgUserCommand, IOrganizationUserRepository organizationUserRepository,
2525
IOrganizationRepository organizationRepository, IPasswordHasher<User> passwordHasher,
2626
IEventService eventService)
@@ -34,7 +34,7 @@ public SetInitialMasterPasswordCommand(IUserService userService, IUserRepository
3434
_eventService = eventService;
3535
}
3636

37-
public async Task SetInitialMasterPasswordAsync(User user,
37+
public async Task FinalizeOrgUserOnboardingAsync(User user,
3838
SetInitialMasterPasswordDataModel masterPasswordDataModel)
3939
{
4040
if (user.Key != null)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Bit.Core.Auth.Models.Data;
2+
using Bit.Core.Entities;
3+
using Bit.Core.Exceptions;
4+
5+
namespace Bit.Core.Auth.UserFeatures.UserMasterPassword.Interfaces;
6+
7+
/// <summary>
8+
/// <para>Finalizes onboarding for an organization user by setting their initial master password and account keys,
9+
/// then accepting their organization membership.</para>
10+
/// <para>Applies to organizations configured with Single Sign-On (SSO) and master password decryption,
11+
/// where just-in-time (JIT) provisioned users are required to establish a master password upon first SSO login.</para>
12+
/// </summary>
13+
public interface IFinalizeOrgUserOnboardingAsync
14+
{
15+
/// <summary>
16+
/// Sets the initial master password and account keys for the specified user and accepts their pending
17+
/// organization membership.
18+
/// </summary>
19+
/// <param name="user">User to finalize onboarding for. Must not already have a master password set.</param>
20+
/// <param name="masterPasswordDataModel">Master password, account keys, and org SSO identifier</param>
21+
/// <returns>A task that completes when the operation succeeds</returns>
22+
/// <exception cref="BadRequestException">
23+
/// Thrown if the user's master password is already set, account keys are missing, the organization
24+
/// SSO identifier is invalid, or the user is not a member of the organization.
25+
/// </exception>
26+
public Task FinalizeOrgUserOnboardingAsync(User user, SetInitialMasterPasswordDataModel masterPasswordDataModel);
27+
}

src/Core/Auth/UserFeatures/UserMasterPassword/Interfaces/ISetInitialMasterPasswordCommand.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Core/Auth/UserFeatures/UserMasterPassword/Interfaces/ISetInitialMasterPasswordCommandV1.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ namespace Bit.Core.Auth.UserFeatures.UserMasterPassword.Interfaces;
1313
/// to ensure their ability to reset other users' accounts.</para>
1414
/// </summary>
1515
// TODO removed with https://bitwarden.atlassian.net/browse/PM-27327
16-
[Obsolete("Use ISetInitialMasterPasswordCommand instead")]
16+
[Obsolete("Use IFinalizeOrgUserOnboardingAsync instead")]
1717
public interface ISetInitialMasterPasswordCommandV1
1818
{
19-
public Task<IdentityResult> SetInitialMasterPasswordAsync(User user, string masterPassword, string key,
19+
public Task<IdentityResult> FinalizeOrgUserOnboardingAsync(User user, string masterPassword, string key,
2020
string orgSsoIdentifier);
2121
}

src/Core/Auth/UserFeatures/UserMasterPassword/SetInitialMasterPasswordCommandV1.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public SetInitialMasterPasswordCommandV1(
4242
_organizationRepository = organizationRepository;
4343
}
4444

45-
public async Task<IdentityResult> SetInitialMasterPasswordAsync(User user, string masterPassword, string key,
45+
public async Task<IdentityResult> FinalizeOrgUserOnboardingAsync(User user, string masterPassword, string key,
4646
string orgSsoIdentifier)
4747
{
4848
if (user == null)

src/Core/Auth/UserFeatures/UserServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static void AddUserKeyCommands(this IServiceCollection services, IGlobalS
5252

5353
private static void AddUserPasswordCommands(this IServiceCollection services)
5454
{
55-
services.AddScoped<ISetInitialMasterPasswordCommand, SetInitialMasterPasswordCommand>();
55+
services.AddScoped<IFinalizeOrgUserOnboardingAsync, FinalizeOrgUserOnboardingCommand>();
5656
services.AddScoped<ISetInitialMasterPasswordCommandV1, SetInitialMasterPasswordCommandV1>();
5757
services.AddScoped<ITdeSetPasswordCommand, TdeSetPasswordCommand>();
5858
}

test/Api.Test/Auth/Controllers/AccountsControllerTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class AccountsControllerTests : IDisposable
3434
private readonly IUserService _userService;
3535
private readonly IProviderUserRepository _providerUserRepository;
3636
private readonly IPolicyService _policyService;
37-
private readonly ISetInitialMasterPasswordCommand _setInitialMasterPasswordCommand;
37+
private readonly IFinalizeOrgUserOnboardingAsync _finalizeOrgUserOnboarding;
3838
private readonly ISetInitialMasterPasswordCommandV1 _setInitialMasterPasswordCommandV1;
3939
private readonly ITwoFactorIsEnabledQuery _twoFactorIsEnabledQuery;
4040
private readonly ITdeSetPasswordCommand _tdeSetPasswordCommand;
@@ -52,7 +52,7 @@ public AccountsControllerTests()
5252
_organizationUserRepository = Substitute.For<IOrganizationUserRepository>();
5353
_providerUserRepository = Substitute.For<IProviderUserRepository>();
5454
_policyService = Substitute.For<IPolicyService>();
55-
_setInitialMasterPasswordCommand = Substitute.For<ISetInitialMasterPasswordCommand>();
55+
_finalizeOrgUserOnboarding = Substitute.For<IFinalizeOrgUserOnboardingAsync>();
5656
_setInitialMasterPasswordCommandV1 = Substitute.For<ISetInitialMasterPasswordCommandV1>();
5757
_twoFactorIsEnabledQuery = Substitute.For<ITwoFactorIsEnabledQuery>();
5858
_tdeSetPasswordCommand = Substitute.For<ITdeSetPasswordCommand>();
@@ -69,7 +69,7 @@ public AccountsControllerTests()
6969
_providerUserRepository,
7070
_userService,
7171
_policyService,
72-
_setInitialMasterPasswordCommand,
72+
_finalizeOrgUserOnboarding,
7373
_setInitialMasterPasswordCommandV1,
7474
_tdeSetPasswordCommand,
7575
_tdeOffboardingPasswordCommand,
@@ -426,7 +426,7 @@ public async Task PostSetPasswordAsync_V1_WhenUserExistsAndSettingPasswordSuccee
426426
}
427427

428428
_userService.GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(Task.FromResult(user));
429-
_setInitialMasterPasswordCommandV1.SetInitialMasterPasswordAsync(
429+
_setInitialMasterPasswordCommandV1.FinalizeOrgUserOnboardingAsync(
430430
user,
431431
setInitialPasswordRequestModel.MasterPasswordHash,
432432
setInitialPasswordRequestModel.Key,
@@ -439,7 +439,7 @@ public async Task PostSetPasswordAsync_V1_WhenUserExistsAndSettingPasswordSuccee
439439
await _sut.PostSetPasswordAsync(setInitialPasswordRequestModel);
440440
// Assert
441441
await _setInitialMasterPasswordCommandV1.Received(1)
442-
.SetInitialMasterPasswordAsync(
442+
.FinalizeOrgUserOnboardingAsync(
443443
Arg.Is<User>(u => u == user),
444444
Arg.Is<string>(s => s == setInitialPasswordRequestModel.MasterPasswordHash),
445445
Arg.Is<string>(s => s == setInitialPasswordRequestModel.Key),
@@ -484,7 +484,7 @@ public async Task PostSetPasswordAsync_V1_WhenUserExistsAndHasKeysAndKeysAreUpda
484484
};
485485

486486
_userService.GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(Task.FromResult(user));
487-
_setInitialMasterPasswordCommandV1.SetInitialMasterPasswordAsync(
487+
_setInitialMasterPasswordCommandV1.FinalizeOrgUserOnboardingAsync(
488488
user,
489489
setInitialPasswordRequestModel.MasterPasswordHash,
490490
setInitialPasswordRequestModel.Key,
@@ -520,7 +520,7 @@ public async Task PostSetPasswordAsync_V1_WhenSettingPasswordFails_ShouldThrowBa
520520
model.Keys = null;
521521
// Arrange
522522
_userService.GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(Task.FromResult(user));
523-
_setInitialMasterPasswordCommandV1.SetInitialMasterPasswordAsync(Arg.Any<User>(), Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>())
523+
_setInitialMasterPasswordCommandV1.FinalizeOrgUserOnboardingAsync(Arg.Any<User>(), Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>())
524524
.Returns(Task.FromResult(IdentityResult.Failed(new IdentityError { Description = "Some Error" })));
525525

526526
// Act & Assert
@@ -870,15 +870,15 @@ public async Task PostSetPasswordAsync_V2_WhenUserExistsAndSettingPasswordSuccee
870870
// Arrange
871871
UpdateSetInitialPasswordRequestModelToV2(setInitialPasswordRequestModel);
872872
_userService.GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(Task.FromResult(user));
873-
_setInitialMasterPasswordCommand.SetInitialMasterPasswordAsync(user, Arg.Any<SetInitialMasterPasswordDataModel>())
873+
_finalizeOrgUserOnboarding.FinalizeOrgUserOnboardingAsync(user, Arg.Any<SetInitialMasterPasswordDataModel>())
874874
.Returns(Task.CompletedTask);
875875

876876
// Act
877877
await _sut.PostSetPasswordAsync(setInitialPasswordRequestModel);
878878

879879
// Assert
880-
await _setInitialMasterPasswordCommand.Received(1)
881-
.SetInitialMasterPasswordAsync(
880+
await _finalizeOrgUserOnboarding.Received(1)
881+
.FinalizeOrgUserOnboardingAsync(
882882
Arg.Is<User>(u => u == user),
883883
Arg.Is<SetInitialMasterPasswordDataModel>(d =>
884884
d.MasterPasswordAuthentication != null &&
@@ -935,7 +935,7 @@ public async Task PostSetPasswordAsync_V2_WhenSettingPasswordFails_ShouldThrowEx
935935
// Arrange
936936
UpdateSetInitialPasswordRequestModelToV2(setInitialPasswordRequestModel);
937937
_userService.GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(Task.FromResult(user));
938-
_setInitialMasterPasswordCommand.SetInitialMasterPasswordAsync(user, Arg.Any<SetInitialMasterPasswordDataModel>())
938+
_finalizeOrgUserOnboarding.FinalizeOrgUserOnboardingAsync(user, Arg.Any<SetInitialMasterPasswordDataModel>())
939939
.Returns(Task.FromException(new Exception("Setting password failed")));
940940

941941
// Act & Assert

0 commit comments

Comments
 (0)