public void CreateUserGeneratedSecurityPair_ReadAndDeleteIt_SecurityPairShouldGetDeleted()
        {
            ISecurityKeysApplicationService registrationService =
                (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];
            var                systemGeneratedKey     = registrationService.CreateSystemGeneratedKey(1);
            List <string>      securityKeyPermissions = new List <string>();
            IList <Permission> permissions            = _permissionRepository.GetAllPermissions();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            CreateUserGeneratedSecurityKeyPair command =
                new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions,
                                                       DateTime.Today.AddDays(1).ToString(), DateTime.Today.AddDays(-2).ToString(),
                                                       DateTime.Today.AddDays(-1).ToString(), true, true, true, "123");
            var keys = registrationService.CreateUserGeneratedKey(command, systemGeneratedKey.Item1.Value);

            registrationService.DeleteSecurityKeyPair("123", systemGeneratedKey.Item1.Value);
            var getKeyPair = _securityKeysRepository.GetByKeyDescriptionAndUserId("123", 1);

            Assert.Null(getKeyPair);
            var getKeyPair1 = _securityKeysRepository.GetByApiKey(keys.ApiKey);

            Assert.Null(getKeyPair1);
        }
        public void SecurityKeyGenerationService_TestsIfTheSecurityKeysAreGenerated_VerifiesThroughTheReturnedValues()
        {
            ISecurityKeysApplicationService registrationService =
                (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];

            Tuple <ApiKey, SecretKey, DateTime> securityKeys = registrationService.CreateSystemGeneratedKey(1);

            Assert.IsNotNull(securityKeys);
            Assert.IsNotNull(securityKeys.Item1);
            Assert.IsNotNull(securityKeys.Item2);
            Assert.IsNotNull(securityKeys.Item3);
        }
 public void CreateUserGeneratedSecurityPair_IfNoPermissionIsAssigned_ArgumentNullExceptionShouldBeRaised()
 {
     ISecurityKeysApplicationService registrationService =
         (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];
     var           systemGeneratedKey           = registrationService.CreateSystemGeneratedKey(1);
     List <string> securityKeyPermissions       = new List <string>();
     CreateUserGeneratedSecurityKeyPair command =
         new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions,
                                                DateTime.Today.AddDays(1).ToString(), DateTime.Today.AddDays(-2).ToString(),
                                                DateTime.Today.AddDays(-1).ToString(), true, true, true, "123");
     var keys = registrationService.CreateUserGeneratedKey(command, systemGeneratedKey.Item1.Value);
 }
        /// <summary>
        /// Login call by the user, logs user in if username and password are correct
        /// </summary>
        /// <returns></returns>
        public UserValidationEssentials Login(LoginCommand loginCommand)
        {
            if (loginCommand != null &&
                !string.IsNullOrEmpty(loginCommand.Username) &&
                !string.IsNullOrEmpty(loginCommand.Password))
            {
                User user = _userRepository.GetUserByUserName(loginCommand.Username);
                if (user != null)
                {
                    if (!user.IsActivationKeyUsed.Value)
                    {
                        throw new InvalidOperationException(
                                  "This account is not yet activated. Please activate the account before trying to login.");
                    }
                    if (_passwordEncryptionService.VerifyPassword(loginCommand.Password, user.Password))
                    {
                        Tuple <bool, string> mfaAccessResponse =
                            _mfaAuthorizationService.AuthorizeAccess(user.Id, MfaConstants.Login, loginCommand.MfaCode);

                        // Check if the user has susbcribed for mfa authorization. If yes, check the Mfa Code
                        if (mfaAccessResponse.Item1)
                        {
                            Tuple <ApiKey, SecretKey, DateTime> securityKeys =
                                _securityKeysApplicationService.CreateSystemGeneratedKey(user.Id);
                            user.LastLogin = DateTime.Now;
                            _persistenceRepository.SaveUpdate(user);
                            return(new UserValidationEssentials(mfaAccessResponse.Item1, mfaAccessResponse.Item2,
                                                                securityKeys.Item1.Value, securityKeys.Item2.Value, user.AutoLogout, user.LastLogin));
                        }
                        // If MFA authorization passes successfuly, return the user with the security keys
                        else
                        {
                            return(new UserValidationEssentials(mfaAccessResponse.Item1, mfaAccessResponse.Item2,
                                                                null, null, user.AutoLogout, user.LastLogin));
                        }
                    }
                    else
                    {
                        throw new InvalidCredentialException(string.Format("Incorrect password for username: {0}",
                                                                           loginCommand.Username));
                    }
                }
                else
                {
                    throw new InvalidCredentialException(string.Format("Invalid username: {0}", loginCommand.Username));
                }
            }
            else
            {
                throw new InvalidCredentialException("Invalid Username and/or Password.");
            }
        }
        public void UpdateUserGeneratedSecurityPair_UpdatePermissionsAndSomeDescription_VerifyKeyPairIsReturnedAndPersistedSuccessfully()
        {
            ISecurityKeysApplicationService registrationService =
                (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];
            var                systemGeneratedKey     = registrationService.CreateSystemGeneratedKey(1);
            List <string>      securityKeyPermissions = new List <string>();
            IList <Permission> permissions            = _permissionRepository.GetAllPermissions();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            CreateUserGeneratedSecurityKeyPair command =
                new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions,
                                                       DateTime.Today.AddDays(1).ToString(), DateTime.Today.AddDays(-2).ToString(),
                                                       DateTime.Today.AddDays(-1).ToString(), true, true, true, "123");
            var keys = registrationService.CreateUserGeneratedKey(command, systemGeneratedKey.Item1.Value);

            List <SecurityKeyPermissionsRepresentation> securityKeyPermissions2 = new List <SecurityKeyPermissionsRepresentation>();

            for (int i = 0; i < permissions.Count; i++)
            {
                if (i % 2 == 0)
                {
                    securityKeyPermissions2.Add(new SecurityKeyPermissionsRepresentation(false, permissions[i]));
                }
                else
                {
                    securityKeyPermissions2.Add(new SecurityKeyPermissionsRepresentation(true, permissions[i]));
                }
            }

            UpdateUserGeneratedSecurityKeyPair update = new UpdateUserGeneratedSecurityKeyPair(keys.ApiKey, "456", false, false, true, "", "", securityKeyPermissions2.ToArray(), DateTime.Today.AddDays(3).ToString());

            registrationService.UpdateSecurityKeyPair(update, keys.ApiKey);
            Assert.NotNull(keys);
            Assert.IsNotNullOrEmpty(keys.ApiKey);
            Assert.IsNotNullOrEmpty(keys.SecretKey);
            SecurityKeysPair persistedKeysPair = _securityKeysRepository.GetByApiKey(keys.ApiKey);

            Assert.NotNull(persistedKeysPair);
            Assert.AreEqual(persistedKeysPair.UserId, 1);
            Assert.AreEqual(persistedKeysPair.SystemGenerated, false);
            Assert.AreEqual(persistedKeysPair.ApiKey, keys.ApiKey);
            Assert.AreEqual(persistedKeysPair.SecretKey, keys.SecretKey);
            Assert.AreEqual(persistedKeysPair.KeyDescription, "456");
            Assert.IsNotNullOrEmpty(persistedKeysPair.CreationDateTime.ToString());
            Assert.AreEqual(persistedKeysPair.EnableStartDate, false);
            Assert.AreEqual(persistedKeysPair.EnableEndDate, false);
            Assert.AreEqual(persistedKeysPair.EnableExpirationDate, true);
            Assert.AreEqual(persistedKeysPair.ExpirationDate, DateTime.Today.AddDays(3));
        }
        public void CreateSystemGeneratedSecurityPair_IfUserNameIsProvided_VerifyKeyPairIsReturnedAndPersistedSuccessfully()
        {
            ISecurityKeysApplicationService registrationService =
                (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];
            var keys = registrationService.CreateSystemGeneratedKey(1);

            Assert.NotNull(keys);
            Assert.IsNotNullOrEmpty(keys.Item1.Value);
            Assert.IsNotNullOrEmpty(keys.Item2.Value);
            SecurityKeysPair persistedKeysPair = _securityKeysRepository.GetByApiKey(keys.Item1.Value);

            Assert.NotNull(persistedKeysPair);
            Assert.AreEqual(persistedKeysPair.UserId, 1);
            Assert.AreEqual(persistedKeysPair.SystemGenerated, true);
            Assert.AreEqual(persistedKeysPair.ApiKey, keys.Item1.Value);
            Assert.AreEqual(persistedKeysPair.SecretKey, keys.Item2.Value);
            Assert.IsNotNullOrEmpty(persistedKeysPair.KeyDescription);
            Assert.IsNotNullOrEmpty(persistedKeysPair.CreationDateTime.ToString());
        }
        public void CreateUserGeneratedSecurityPair_IfAllRequiredParametersAreProvided_VerifyKeyPairIsReturnedAndPersistedSuccessfully()
        {
            ISecurityKeysApplicationService registrationService =
                (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];
            var                systemGeneratedKey     = registrationService.CreateSystemGeneratedKey(1);
            List <string>      securityKeyPermissions = new List <string>();
            IList <Permission> permissions            = _permissionRepository.GetAllPermissions();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            CreateUserGeneratedSecurityKeyPair command =
                new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions,
                                                       DateTime.Today.AddDays(1).ToString(), DateTime.Today.AddDays(-2).ToString(),
                                                       DateTime.Today.AddDays(-1).ToString(), true, true, true, "123");
            var keys = registrationService.CreateUserGeneratedKey(command, systemGeneratedKey.Item1.Value);

            Assert.NotNull(keys);
            Assert.IsNotNullOrEmpty(keys.ApiKey);
            Assert.IsNotNullOrEmpty(keys.SecretKey);
            SecurityKeysPair persistedKeysPair = _securityKeysRepository.GetByApiKey(keys.ApiKey);

            Assert.NotNull(persistedKeysPair);
            Assert.AreEqual(persistedKeysPair.UserId, 1);
            Assert.AreEqual(persistedKeysPair.SystemGenerated, false);
            Assert.AreEqual(persistedKeysPair.ApiKey, keys.ApiKey);
            Assert.AreEqual(persistedKeysPair.SecretKey, keys.SecretKey);
            Assert.IsNotNullOrEmpty(persistedKeysPair.KeyDescription);
            Assert.IsNotNullOrEmpty(persistedKeysPair.CreationDateTime.ToString());
            Assert.AreEqual(persistedKeysPair.EnableStartDate, true);
            Assert.AreEqual(persistedKeysPair.EnableEndDate, true);
            Assert.AreEqual(persistedKeysPair.EnableExpirationDate, true);
            Assert.AreEqual(persistedKeysPair.ExpirationDate, DateTime.Today.AddDays(1));
            Assert.AreEqual(persistedKeysPair.StartDate, DateTime.Today.AddDays(-2));
            Assert.AreEqual(persistedKeysPair.EndDate, DateTime.Today.AddDays(-1));
            ValidatePermissions(persistedKeysPair, securityKeyPermissions);
        }
        public void CreateUserGeneratedSecurityPair_IfKeyDescriptionAlreadyExists_ArgumentExceptionShouldBeRaised()
        {
            ISecurityKeysApplicationService registrationService =
                (ISecurityKeysApplicationService)_applicationContext["SecurityKeysApplicationService"];
            var                systemGeneratedKey     = registrationService.CreateSystemGeneratedKey(1);
            List <string>      securityKeyPermissions = new List <string>();
            IList <Permission> permissions            = _permissionRepository.GetAllPermissions();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            CreateUserGeneratedSecurityKeyPair command =
                new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions,
                                                       DateTime.Today.AddDays(1).ToString(), DateTime.Today.AddDays(-2).ToString(),
                                                       DateTime.Today.AddDays(-1).ToString(), true, true, true, "123");
            var keys = registrationService.CreateUserGeneratedKey(command, systemGeneratedKey.Item1.Value);

            command =
                new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions,
                                                       DateTime.Today.AddDays(1).ToString(), DateTime.Today.AddDays(-2).ToString(),
                                                       DateTime.Today.AddDays(-1).ToString(), true, true, true, "123");
            var keys1 = registrationService.CreateUserGeneratedKey(command, systemGeneratedKey.Item1.Value);
        }