mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 07:36:14 -05:00
Fix user context on importing into individual vaults (#5465)
Pass in the current userId instead of trying to infer it from the folders or ciphers passed into the ImportCiphersCommand Kudos go to @MJebran who pointed this out on https://github.com/bitwarden/server/pull/4896 Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
This commit is contained in:

committed by
GitHub

parent
c589f9a330
commit
34358acf61
@ -56,7 +56,7 @@ public class ImportCiphersController : Controller
|
||||
var userId = _userService.GetProperUserId(User).Value;
|
||||
var folders = model.Folders.Select(f => f.ToFolder(userId)).ToList();
|
||||
var ciphers = model.Ciphers.Select(c => c.ToCipherDetails(userId, false)).ToList();
|
||||
await _importCiphersCommand.ImportIntoIndividualVaultAsync(folders, ciphers, model.FolderRelationships);
|
||||
await _importCiphersCommand.ImportIntoIndividualVaultAsync(folders, ciphers, model.FolderRelationships, userId);
|
||||
}
|
||||
|
||||
[HttpPost("import-organization")]
|
||||
|
@ -54,12 +54,11 @@ public class ImportCiphersCommand : IImportCiphersCommand
|
||||
public async Task ImportIntoIndividualVaultAsync(
|
||||
List<Folder> folders,
|
||||
List<CipherDetails> ciphers,
|
||||
IEnumerable<KeyValuePair<int, int>> folderRelationships)
|
||||
IEnumerable<KeyValuePair<int, int>> folderRelationships,
|
||||
Guid importingUserId)
|
||||
{
|
||||
var userId = folders.FirstOrDefault()?.UserId ?? ciphers.FirstOrDefault()?.UserId;
|
||||
|
||||
// Make sure the user can save new ciphers to their personal vault
|
||||
var anyPersonalOwnershipPolicies = await _policyService.AnyPoliciesApplicableToUserAsync(userId.Value, PolicyType.PersonalOwnership);
|
||||
var anyPersonalOwnershipPolicies = await _policyService.AnyPoliciesApplicableToUserAsync(importingUserId, PolicyType.PersonalOwnership);
|
||||
if (anyPersonalOwnershipPolicies)
|
||||
{
|
||||
throw new BadRequestException("You cannot import items into your personal vault because you are " +
|
||||
@ -76,7 +75,7 @@ public class ImportCiphersCommand : IImportCiphersCommand
|
||||
}
|
||||
}
|
||||
|
||||
var userfoldersIds = (await _folderRepository.GetManyByUserIdAsync(userId ?? Guid.Empty)).Select(f => f.Id).ToList();
|
||||
var userfoldersIds = (await _folderRepository.GetManyByUserIdAsync(importingUserId)).Select(f => f.Id).ToList();
|
||||
|
||||
//Assign id to the ones that don't exist in DB
|
||||
//Need to keep the list order to create the relationships
|
||||
@ -109,10 +108,7 @@ public class ImportCiphersCommand : IImportCiphersCommand
|
||||
await _cipherRepository.CreateAsync(ciphers, newFolders);
|
||||
|
||||
// push
|
||||
if (userId.HasValue)
|
||||
{
|
||||
await _pushService.PushSyncVaultAsync(userId.Value);
|
||||
}
|
||||
await _pushService.PushSyncVaultAsync(importingUserId);
|
||||
}
|
||||
|
||||
public async Task ImportIntoOrganizationalVaultAsync(
|
||||
|
@ -7,7 +7,7 @@ namespace Bit.Core.Tools.ImportFeatures.Interfaces;
|
||||
public interface IImportCiphersCommand
|
||||
{
|
||||
Task ImportIntoIndividualVaultAsync(List<Folder> folders, List<CipherDetails> ciphers,
|
||||
IEnumerable<KeyValuePair<int, int>> folderRelationships);
|
||||
IEnumerable<KeyValuePair<int, int>> folderRelationships, Guid importingUserId);
|
||||
|
||||
Task ImportIntoOrganizationalVaultAsync(List<Collection> collections, List<CipherDetails> ciphers,
|
||||
IEnumerable<KeyValuePair<int, int>> collectionRelationships, Guid importingUserId);
|
||||
|
Reference in New Issue
Block a user