/// <summary>
        /// Generates a new API key and Secret Key pair
        /// </summary>
        /// <returns></returns>
        public Tuple <ApiKey, SecretKey, DateTime> CreateSystemGeneratedKey(int userId)
        {
            SecurityKeysPair keysPair = SecurityKeysPairFactory.SystemGeneratedSecurityKeyPair(userId, _securityKeysGenerationService);

            _persistRepository.SaveUpdate(keysPair);
            return(new Tuple <ApiKey, SecretKey, DateTime>(new ApiKey(keysPair.ApiKey), new SecretKey(keysPair.SecretKey), keysPair.CreationDateTime));
        }
        public void CreateSystemGeneratedSecurityKeysPair_IfUserNameIsProvided_TheSecurityPairShouldHaveBeenCreated()
        {
            SecurityKeysPair pair = SecurityKeysPairFactory.SystemGeneratedSecurityKeyPair(1, this);

            Assert.NotNull(pair);
            Assert.AreEqual(pair.UserId, 1);
            Assert.AreEqual(pair.SystemGenerated, true);
            Assert.IsNotNullOrEmpty(pair.ApiKey);
            Assert.IsNotNullOrEmpty(pair.SecretKey);
            Assert.IsNotNullOrEmpty(pair.KeyDescription);
            Assert.IsNotNullOrEmpty(pair.CreationDateTime.ToString());
        }
 /// <summary>
 /// create new key pair user generated
 /// </summary>
 /// <param name="command"></param>
 /// <param name="apiKey"></param>
 /// <returns></returns>
 public SecurityKeyPair CreateUserGeneratedKey(CreateUserGeneratedSecurityKeyPair command, string apiKey)
 {
     if (command.Validate())
     {
         //get security key pair for user name
         var getSecurityKeyPair = _securityKeysRepository.GetByApiKey(apiKey);
         if (getSecurityKeyPair == null)
         {
             throw new ArgumentException("Invalid api key");
         }
         var keys = _securityKeysGenerationService.GenerateNewSecurityKeys();
         List <SecurityKeysPermission>          permissions = new List <SecurityKeysPermission>();
         SecurityKeyPermissionsRepresentation[] securityKeyPermissionsRepresentations = this.GetPermissions();
         foreach (SecurityKeyPermissionsRepresentation securityKeyPermissionsRepresentation in securityKeyPermissionsRepresentations)
         {
             // Check which permissions have been sent from the frontend that must be included with this User Generated Key
             if (command.SecurityKeyPermissions.Contains(securityKeyPermissionsRepresentation.Permission.PermissionId))
             {
                 securityKeyPermissionsRepresentation.Allowed = true;
             }
         }
         for (int i = 0; i < securityKeyPermissionsRepresentations.Length; i++)
         {
             permissions.Add(new SecurityKeysPermission(keys.Item1, securityKeyPermissionsRepresentations[i].Permission,
                                                        securityKeyPermissionsRepresentations[i].Allowed));
         }
         var keysPair = SecurityKeysPairFactory.UserGeneratedSecurityPair(getSecurityKeyPair.UserId,
                                                                          command.KeyDescription,
                                                                          keys.Item1, keys.Item2, command.EnableExpirationDate, command.ExpirationDateTime,
                                                                          command.EnableStartDate, command.StartDateTime, command.EnableEndDate, command.EndDateTime,
                                                                          permissions,
                                                                          _securityKeysRepository);
         _persistRepository.SaveUpdate(keysPair);
         return(new SecurityKeyPair(keys.Item1, keys.Item2));
     }
     throw new InvalidOperationException("Please assign atleast one permission.");
 }