mirror of
https://github.com/bitwarden/server.git
synced 2024-12-22 16:57:36 +01:00
fix bumping AccountRevisionDate
when creating and updating ciphers (#2634)
When the user is not part of an organization, `UserBumpAccountRevisionDateByCipherIdQuery` doesn't work. In that case we have to use `UserBumpAccountRevisionDateAsync` instead. This was already done by most parts of the code but a few more were missing. Fixes #2615
This commit is contained in:
parent
28a3d4ad92
commit
e019f0191d
@ -29,7 +29,7 @@ public class CipherRepository : Repository<Core.Entities.Cipher, Cipher, Guid>,
|
|||||||
var dbContext = GetDatabaseContext(scope);
|
var dbContext = GetDatabaseContext(scope);
|
||||||
if (cipher.OrganizationId.HasValue)
|
if (cipher.OrganizationId.HasValue)
|
||||||
{
|
{
|
||||||
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId);
|
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.Value);
|
||||||
}
|
}
|
||||||
else if (cipher.UserId.HasValue)
|
else if (cipher.UserId.HasValue)
|
||||||
{
|
{
|
||||||
@ -59,7 +59,7 @@ public class CipherRepository : Repository<Core.Entities.Cipher, Cipher, Guid>,
|
|||||||
await OrganizationUpdateStorage(cipherInfo.OrganizationId.Value);
|
await OrganizationUpdateStorage(cipherInfo.OrganizationId.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipherInfo.OrganizationId);
|
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipherInfo.OrganizationId.Value);
|
||||||
}
|
}
|
||||||
else if (cipherInfo?.UserId != null)
|
else if (cipherInfo?.UserId != null)
|
||||||
{
|
{
|
||||||
@ -107,7 +107,16 @@ public class CipherRepository : Repository<Core.Entities.Cipher, Cipher, Guid>,
|
|||||||
null;
|
null;
|
||||||
var entity = Mapper.Map<Cipher>((Core.Entities.Cipher)cipher);
|
var entity = Mapper.Map<Cipher>((Core.Entities.Cipher)cipher);
|
||||||
await dbContext.AddAsync(entity);
|
await dbContext.AddAsync(entity);
|
||||||
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.GetValueOrDefault());
|
|
||||||
|
if (cipher.OrganizationId.HasValue)
|
||||||
|
{
|
||||||
|
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.Value);
|
||||||
|
}
|
||||||
|
else if (cipher.UserId.HasValue)
|
||||||
|
{
|
||||||
|
await dbContext.UserBumpAccountRevisionDateAsync(cipher.UserId.Value);
|
||||||
|
}
|
||||||
|
|
||||||
await dbContext.SaveChangesAsync();
|
await dbContext.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
return cipher;
|
return cipher;
|
||||||
@ -458,7 +467,16 @@ public class CipherRepository : Repository<Core.Entities.Cipher, Cipher, Guid>,
|
|||||||
}
|
}
|
||||||
var mappedEntity = Mapper.Map<Cipher>((Core.Entities.Cipher)cipher);
|
var mappedEntity = Mapper.Map<Cipher>((Core.Entities.Cipher)cipher);
|
||||||
dbContext.Entry(entity).CurrentValues.SetValues(mappedEntity);
|
dbContext.Entry(entity).CurrentValues.SetValues(mappedEntity);
|
||||||
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.GetValueOrDefault());
|
|
||||||
|
if (cipher.OrganizationId.HasValue)
|
||||||
|
{
|
||||||
|
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.Value);
|
||||||
|
}
|
||||||
|
else if (cipher.UserId.HasValue)
|
||||||
|
{
|
||||||
|
await dbContext.UserBumpAccountRevisionDateAsync(cipher.UserId.Value);
|
||||||
|
}
|
||||||
|
|
||||||
await dbContext.SaveChangesAsync();
|
await dbContext.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -566,7 +584,15 @@ public class CipherRepository : Repository<Core.Entities.Cipher, Cipher, Guid>,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.GetValueOrDefault());
|
if (cipher.OrganizationId.HasValue)
|
||||||
|
{
|
||||||
|
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.Value);
|
||||||
|
}
|
||||||
|
else if (cipher.UserId.HasValue)
|
||||||
|
{
|
||||||
|
await dbContext.UserBumpAccountRevisionDateAsync(cipher.UserId.Value);
|
||||||
|
}
|
||||||
|
|
||||||
await dbContext.SaveChangesAsync();
|
await dbContext.SaveChangesAsync();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -677,7 +703,7 @@ public class CipherRepository : Repository<Core.Entities.Cipher, Cipher, Guid>,
|
|||||||
if (attachment.OrganizationId.HasValue)
|
if (attachment.OrganizationId.HasValue)
|
||||||
{
|
{
|
||||||
await OrganizationUpdateStorage(cipher.OrganizationId.Value);
|
await OrganizationUpdateStorage(cipher.OrganizationId.Value);
|
||||||
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId);
|
await dbContext.UserBumpAccountRevisionDateByCipherIdAsync(cipher.Id, cipher.OrganizationId.Value);
|
||||||
}
|
}
|
||||||
else if (attachment.UserId.HasValue)
|
else if (attachment.UserId.HasValue)
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@ public static class DatabaseContextExtensions
|
|||||||
UpdateUserRevisionDate(users);
|
UpdateUserRevisionDate(users);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task UserBumpAccountRevisionDateByCipherIdAsync(this DatabaseContext context, Guid cipherId, Guid? organizationId)
|
public static async Task UserBumpAccountRevisionDateByCipherIdAsync(this DatabaseContext context, Guid cipherId, Guid organizationId)
|
||||||
{
|
{
|
||||||
var query = new UserBumpAccountRevisionDateByCipherIdQuery(cipherId, organizationId);
|
var query = new UserBumpAccountRevisionDateByCipherIdQuery(cipherId, organizationId);
|
||||||
var users = await query.Run(context).ToListAsync();
|
var users = await query.Run(context).ToListAsync();
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using Bit.Core.Entities;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Enums;
|
|
||||||
using User = Bit.Infrastructure.EntityFramework.Models.User;
|
using User = Bit.Infrastructure.EntityFramework.Models.User;
|
||||||
|
|
||||||
namespace Bit.Infrastructure.EntityFramework.Repositories.Queries;
|
namespace Bit.Infrastructure.EntityFramework.Repositories.Queries;
|
||||||
@ -7,15 +6,9 @@ namespace Bit.Infrastructure.EntityFramework.Repositories.Queries;
|
|||||||
public class UserBumpAccountRevisionDateByCipherIdQuery : IQuery<User>
|
public class UserBumpAccountRevisionDateByCipherIdQuery : IQuery<User>
|
||||||
{
|
{
|
||||||
private readonly Guid _cipherId;
|
private readonly Guid _cipherId;
|
||||||
private readonly Guid? _organizationId;
|
private readonly Guid _organizationId;
|
||||||
|
|
||||||
public UserBumpAccountRevisionDateByCipherIdQuery(Cipher cipher)
|
public UserBumpAccountRevisionDateByCipherIdQuery(Guid cipherId, Guid organizationId)
|
||||||
{
|
|
||||||
_cipherId = cipher.Id;
|
|
||||||
_organizationId = cipher.OrganizationId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UserBumpAccountRevisionDateByCipherIdQuery(Guid cipherId, Guid? organizationId)
|
|
||||||
{
|
{
|
||||||
_cipherId = cipherId;
|
_cipherId = cipherId;
|
||||||
_organizationId = organizationId;
|
_organizationId = organizationId;
|
||||||
|
@ -159,7 +159,7 @@ public class CipherRepositoryTests
|
|||||||
var postEfCipher = await sut.CreateAsync(cipher);
|
var postEfCipher = await sut.CreateAsync(cipher);
|
||||||
sut.ClearChangeTracking();
|
sut.ClearChangeTracking();
|
||||||
|
|
||||||
var query = new UserBumpAccountRevisionDateByCipherIdQuery(cipher);
|
var query = new UserBumpAccountRevisionDateByCipherIdQuery(cipher, cipher.OrganizationId.Value);
|
||||||
var modifiedUsers = await sut.Run(query).ToListAsync();
|
var modifiedUsers = await sut.Run(query).ToListAsync();
|
||||||
Assert.True(modifiedUsers
|
Assert.True(modifiedUsers
|
||||||
.All(u => u.AccountRevisionDate.ToShortDateString() ==
|
.All(u => u.AccountRevisionDate.ToShortDateString() ==
|
||||||
|
Loading…
Reference in New Issue
Block a user