public Credential CreateGlobalCredential(GlobalCredentialViewModel request)
        {
            if (!String.IsNullOrEmpty(request.PasswordSecret))
            {
                //get encryption key
                var orgId = _organizationManager.GetDefaultOrganization().Id;
                _organizationSettingRepository.ForceIgnoreSecurity();

                var organizationKey = _organizationSettingRepository.Find(null, o => o.OrganizationId == orgId).Items.FirstOrDefault().EncryptionKey;
                var applicationKey  = _configuration.GetSection("ApplicationEncryption:Key").Value;
                var encryptionKey   = applicationKey + organizationKey;

                //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 credential = new Credential();

            credential = request.Map(request);

            CredentialNameAvailability(credential);

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

            return(credential);
        }
        public async Task <IActionResult> Post([FromBody] GlobalCredentialViewModel request)
        {
            try
            {
                Credential credential = _credentialManager.CreateGlobalCredential(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());
            }
        }