diff --git a/src/Core/AdminConsole/Repositories/IOrganizationUserRepository.cs b/src/Core/AdminConsole/Repositories/IOrganizationUserRepository.cs index 41622c24b7..eef621e01c 100644 --- a/src/Core/AdminConsole/Repositories/IOrganizationUserRepository.cs +++ b/src/Core/AdminConsole/Repositories/IOrganizationUserRepository.cs @@ -6,6 +6,7 @@ using Bit.Core.Enums; using Bit.Core.KeyManagement.UserKey; using Bit.Core.Models.Data; using Bit.Core.Models.Data.Organizations.OrganizationUsers; +using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces; #nullable enable @@ -108,4 +109,11 @@ public interface IOrganizationUserRepository : IRepository Task GetDetailsByOrganizationIdUserIdAsync(Guid organizationId, Guid userId); + + /// + /// Builds an action that confirms an organization user (sets status to Confirmed, links to user, sets key). + /// + /// The organization user entity with updated properties + /// An action that can be executed within a transaction + OrganizationInitializationUpdateAction BuildConfirmOrganizationUserAction(OrganizationUser organizationUser); } diff --git a/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs b/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs index bd670347a9..6f587ace41 100644 --- a/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs +++ b/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs @@ -10,6 +10,7 @@ using Bit.Core.Enums; using Bit.Core.KeyManagement.UserKey; using Bit.Core.Models.Data; using Bit.Core.Models.Data.Organizations.OrganizationUsers; +using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces; using Bit.Core.Repositories; using Bit.Core.Settings; using Dapper; @@ -709,4 +710,16 @@ public class OrganizationUserRepository : Repository, IO return result; } } + + public OrganizationInitializationUpdateAction BuildConfirmOrganizationUserAction(OrganizationUser organizationUser) + { + return async (SqlConnection? connection, SqlTransaction? transaction, object? context) => + { + await connection!.ExecuteAsync( + "[dbo].[OrganizationUser_Update]", + organizationUser, + commandType: CommandType.StoredProcedure, + transaction: transaction); + }; + } } diff --git a/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs b/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs index ae55099775..0e65eac64b 100644 --- a/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs +++ b/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs @@ -10,10 +10,12 @@ using Bit.Core.Exceptions; using Bit.Core.KeyManagement.UserKey; using Bit.Core.Models.Data; using Bit.Core.Models.Data.Organizations.OrganizationUsers; +using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces; using Bit.Core.Repositories; using Bit.Infrastructure.EntityFramework.Models; using Bit.Infrastructure.EntityFramework.Repositories; using Bit.Infrastructure.EntityFramework.Repositories.Queries; +using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -978,6 +980,25 @@ public class OrganizationUserRepository : Repository + { + var dbContext = (DatabaseContext)context!; + + var efOrganizationUser = await dbContext.OrganizationUsers.FindAsync(organizationUser.Id); + if (efOrganizationUser != null) + { + efOrganizationUser.Status = organizationUser.Status; + efOrganizationUser.UserId = organizationUser.UserId; + efOrganizationUser.Key = organizationUser.Key; + efOrganizationUser.Email = organizationUser.Email; + + await dbContext.SaveChangesAsync(); + } + }; + } #nullable disable