public Credential CreateAgentCredential(AgentCredentialViewModel request)
        {
            if (!String.IsNullOrEmpty(request.PasswordSecret))
            {
                var encryptionKey = GetEncryptionKey();

                //generate salt
                request.HashSalt = CredentialHasher.CreateSalt(32); //create 32 byte salt

                //generate hash
                request.PasswordHash = CredentialHasher.GenerateSaltedHash(request.PasswordSecret, request.HashSalt);

                // Encrypt and decrypt the sample text via the Aes256CbcEncrypter class.
                request.PasswordSecret = CredentialsEncrypter.Encrypt(request.PasswordSecret, encryptionKey);
            }

            Credential globalCredential = _repo.Find(null, a => a.Name == request.Name && a.AgentId == null).Items?.FirstOrDefault();
            Credential agentCredential  = request.Map(request);

            if (globalCredential == null)
            {
                throw new EntityDoesNotExistException("No global credential exists with the given name");
            }

            CredentialNameAvailability(agentCredential);

            if (!ValidateStartAndEndDates(agentCredential))
            {
                throw new EntityOperationException("Start and End Date are not valid");
            }

            agentCredential.Provider = globalCredential.Provider;
            return(agentCredential);
        }
        public async Task <IActionResult> AddAgentCredential([FromBody] AgentCredentialViewModel request)
        {
            try
            {
                Credential credential = _credentialManager.CreateAgentCredential(request);

                var result = await base.PostEntity(credential);

                await _webhookPublisher.PublishAsync("Credentials.NewCredentialCreated", credential.Id.ToString(), credential.Name).ConfigureAwait(false);

                return(result);
            }
            catch (Exception ex)
            {
                return(ex.GetActionResult());
            }
        }