|
1 | | -using Bit.Core.AdminConsole.Repositories; |
| 1 | +using Bit.Core; |
| 2 | +using Bit.Core.AdminConsole.Repositories; |
2 | 3 | using Bit.Core.Entities; |
3 | 4 | using Bit.Core.Enums; |
4 | 5 | using Bit.Core.Models.Data; |
5 | 6 | using Bit.Core.Repositories; |
6 | 7 | using Bit.Infrastructure.IntegrationTest.AdminConsole; |
| 8 | +using Microsoft.Data.SqlClient; |
7 | 9 | using Xunit; |
8 | 10 |
|
9 | 11 | namespace Bit.Infrastructure.IntegrationTest.Repositories; |
@@ -179,4 +181,54 @@ public async Task DeleteManyAsync_WhenUsersHaveDefaultUserCollections_MigratesTo |
179 | 181 | Assert.Equal(CollectionType.SharedCollection, updatedCollection2.Type); |
180 | 182 | Assert.Equal(user2.Email, updatedCollection2.DefaultUserCollectionEmail); |
181 | 183 | } |
| 184 | + |
| 185 | + [Theory, DatabaseData] |
| 186 | + public async Task SetKeyConnectorUserKey_UpdatesUserKey(IUserRepository userRepository, Database database) |
| 187 | + { |
| 188 | + var user = await userRepository.CreateTestUserAsync(); |
| 189 | + |
| 190 | + const string keyConnectorWrappedKey = "key-connector-wrapped-user-key"; |
| 191 | + |
| 192 | + var setKeyConnectorUserKeyDelegate = userRepository.SetKeyConnectorUserKey(user.Id, keyConnectorWrappedKey); |
| 193 | + |
| 194 | + await RunUpdateUserDataAsync(setKeyConnectorUserKeyDelegate, database); |
| 195 | + |
| 196 | + var updatedUser = await userRepository.GetByIdAsync(user.Id); |
| 197 | + |
| 198 | + Assert.NotNull(updatedUser); |
| 199 | + Assert.Equal(keyConnectorWrappedKey, updatedUser.Key); |
| 200 | + Assert.True(updatedUser.UsesKeyConnector); |
| 201 | + Assert.Equal(KdfType.Argon2id, updatedUser.Kdf); |
| 202 | + Assert.Equal(AuthConstants.ARGON2_ITERATIONS.Default, updatedUser.KdfIterations); |
| 203 | + Assert.Equal(AuthConstants.ARGON2_MEMORY.Default, updatedUser.KdfMemory); |
| 204 | + Assert.Equal(AuthConstants.ARGON2_PARALLELISM.Default, updatedUser.KdfParallelism); |
| 205 | + Assert.Equal(DateTime.UtcNow, updatedUser.RevisionDate, TimeSpan.FromMinutes(1)); |
| 206 | + Assert.Equal(DateTime.UtcNow, updatedUser.AccountRevisionDate, TimeSpan.FromMinutes(1)); |
| 207 | + } |
| 208 | + |
| 209 | + private static async Task RunUpdateUserDataAsync(UpdateUserData task, Database database) |
| 210 | + { |
| 211 | + if (database.Type == SupportedDatabaseProviders.SqlServer && !database.UseEf) |
| 212 | + { |
| 213 | + await using var connection = new SqlConnection(database.ConnectionString); |
| 214 | + connection.Open(); |
| 215 | + |
| 216 | + await using var transaction = connection.BeginTransaction(); |
| 217 | + try |
| 218 | + { |
| 219 | + await task(connection, transaction); |
| 220 | + |
| 221 | + transaction.Commit(); |
| 222 | + } |
| 223 | + catch |
| 224 | + { |
| 225 | + transaction.Rollback(); |
| 226 | + throw; |
| 227 | + } |
| 228 | + } |
| 229 | + else |
| 230 | + { |
| 231 | + await task(); |
| 232 | + } |
| 233 | + } |
182 | 234 | } |
0 commit comments