public async Task CreatingVaultForAuthenticatedUserShouldSucceed() { var dbContext = MockServices.DbContextMock(); var authenticationService = MockServices.AuthenticationServiceMock().Object; var target = new VaultCreationService(authenticationService, MockServices.EntityRepositoryMock(dbContext), dbContext, MockServices.HashServiceMock().Object); var vaultCreateModel = new VaultCreateModel { MasterKey = "555", Name = "555" }; var vaultId = await target.CreateVaultForAuthenticatedUser(vaultCreateModel); var vault = dbContext.Vaults.Single(x => x.Id == vaultId); var vaultOwner = dbContext.VaultOwners.Single(x => x.VaultId == vaultId); var user = dbContext.Users.Single(x => x.OwnerId == vaultOwner.OwnerId); var vaultOwnerRightsCount = dbContext.VaultOwnerRights.Where(x => x.VaultOwnerId == vaultOwner.Id).Count(); Assert.AreEqual(authenticationService.UserId, user.Id); Assert.AreEqual(4, vaultOwnerRightsCount); Assert.AreEqual(vaultCreateModel.MasterKey, vault.MasterKey); Assert.AreEqual(vaultCreateModel.Name, vault.Name); }
public async Task <long> CreateVaultForAuthenticatedUser(VaultCreateModel vaultCreateModel) { if (!_authenticationService.IsAuthenticated) { throw new StatusCodeException(HttpStatusCode.Unauthorized); } var userId = _authenticationService.UserId; var user = await _entityRepository.GetEntity <User>(x => x.Id == userId); using var transaction = _dbContext.Database.BeginTransaction(); try { var vaultId = await CreateVault(vaultCreateModel, user.Id); var vaultOwnerId = await CreateVaultOwner(vaultId, user.OwnerId, user.Id); await CreateVaultOwnerRights(vaultOwnerId, user.Id, VaultOwnerRightType.CreateSecrets, VaultOwnerRightType.DeleteSecrets, VaultOwnerRightType.ReadSecrets, VaultOwnerRightType.UpdateSecrets); await transaction.CommitAsync(); return(vaultId); } catch { await transaction.RollbackAsync(); throw; } }
private async Task <long> CreateVault(VaultCreateModel vaultCreateModel, long createdByUserId) { var hashedMasterKey = _hashService.GetHash(vaultCreateModel.MasterKey); var vault = new Vault { MasterKey = hashedMasterKey.Hash, MasterKeySalt = hashedMasterKey.Salt, Name = vaultCreateModel.Name }; var createdVault = await _entityRepository.AddEntity(vault, createdByUserId); return(createdVault.Id); }
public async Task CreatingVaultForUnAuthenticatedUserShouldFail() { var dbContext = MockServices.DbContextMock(); var authenticationServiceMock = MockServices.AuthenticationServiceMock(); authenticationServiceMock.Setup(x => x.IsAuthenticated).Returns(false); var target = new VaultCreationService(authenticationServiceMock.Object, MockServices.EntityRepositoryMock(dbContext), dbContext, MockServices.HashServiceMock().Object); var vaultCreateModel = new VaultCreateModel { MasterKey = "555", Name = "555" }; await Assert.ThrowsExceptionAsync <StatusCodeException>(async() => await target.CreateVaultForAuthenticatedUser(vaultCreateModel)); }
public async Task <long> Create([FromBody] VaultCreateModel vaultCreateModel) { var vaultId = await _vaultService.CreateVaultForAuthenticatedUser(vaultCreateModel); return(vaultId); }