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);
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 5
0
        public async Task <long> Create([FromBody] VaultCreateModel vaultCreateModel)
        {
            var vaultId = await _vaultService.CreateVaultForAuthenticatedUser(vaultCreateModel);

            return(vaultId);
        }