public async Task <IActionResult> UploadKey(UploadKeyViewModel uploadKeyViewModel)
        {
            // Google Recaptcha Verification
            var googleRecaptcha = await _recaptchaService.ReceiveVerificationAsync(uploadKeyViewModel.Token);

            // If verification failed, sign out user.
            if (!googleRecaptcha.Success)
            {
                await signInManager.SignOutAsync();

                return(RedirectToAction("login", "account"));
            }
            if (ModelState.IsValid)
            {
                // temporarily store the key in the www/temp-keys folder
                var key = await StoreKeyAtTempLocationAsync(uploadKeyViewModel.KeyFile, User.Identity.Name);

                // call a script to delete the existing key if exists, and store the new key.
                var result = await keyStorageService.StorePublicKeyAsync(key.Keyname, User.Identity.Name);

                if (!result.IsSuccessful)
                {
                    // log the error
                    _logger.LogError(result.ErrorMessage);
                    ModelState.AddModelError(string.Empty, "Something went wrong...");
                    return(View(uploadKeyViewModel));
                }
                // after file copied to the users .ssh folder in authorized_keys, delete key from temp folder
                if (System.IO.File.Exists(key.Keypath))
                {
                    System.IO.File.Delete(key.Keypath);
                }

                return(RedirectToAction("Index"));
            }
            return(View());
        }