private async Task ConfirmAndDeleteFile(YubiCryptFile file) { if (await CheckUSBToken()) { try { var msgResult = await this.ShowMessageAsync(string.Empty, string.Format("{0} will be deleted.\nContinue?", file.FileName), MessageDialogStyle.AffirmativeAndNegative); if (msgResult == MessageDialogResult.Affirmative) { await DeleteFile(file.InternalName); await LoadFiles(); } } catch (Exception e) { ToggleProgressOverlay(false); this.ShowMessageAsync("Houston, we've had a problem.", e.Message); } } }
private async Task SelectAndDownloadFile(YubiCryptFile file) { if (await CheckUSBToken()) { var tempFilePath = Path.GetTempFileName(); SaveFileDialog dlg = new SaveFileDialog(); dlg.FileName = file.FileName; dlg.OverwritePrompt = true; Nullable <bool> result = dlg.ShowDialog(); if (result == true) { try { var password = await this.ShowInputAsync("Passphrase needed", "Please enter the passphrase used to protect this file:"); ToggleProgressOverlay(true); SetProgressMessage(string.Format("Downloading {0} from your YubiCrypt account...", file.FileName)); using (var encryptedFileStream = File.Open(tempFilePath, FileMode.Open, FileAccess.ReadWrite)) { await DownloadFile(file.InternalName, encryptedFileStream); SetProgressMessage("Decrypting your file.\nMake sure your YubiKey token is plugged in."); encryptedFileStream.Seek(0, SeekOrigin.Begin); using (var plaintextFileStream = File.Open(dlg.FileName + ".tmp", FileMode.Create)) { DecryptFile(encryptedFileStream, plaintextFileStream, password); } if (File.Exists(dlg.FileName)) { File.Delete(dlg.FileName); } File.Move(dlg.FileName + ".tmp", dlg.FileName); ToggleProgressOverlay(false); } File.Delete(tempFilePath); } catch (YubiCryptEngineException e) { ToggleProgressOverlay(false); this.ShowMessageAsync("Houston, we've had a problem.", e.Message); } catch (Exception e) { ToggleProgressOverlay(false); this.ShowMessageAsync("Houston, we've had a problem.", e.Message); } finally { if (File.Exists(dlg.FileName + ".tmp")) { File.Delete(dlg.FileName + ".tmp"); } if (File.Exists(tempFilePath)) { File.Delete(tempFilePath); } } } } }