/// <summary> /// Signs a number of <see cref="Feed"/>s with a single <see cref="OpenPgpSecretKey"/>. /// </summary> /// <param name="secretKey">The private key to use for signing the files.</param> /// <param name="passphrase">The passphrase to use to unlock the key.</param> /// <exception cref="IOException">The feed file could not be read or written.</exception> /// <exception cref="UnauthorizedAccessException">Read or write access to the feed file is not permitted.</exception> private void SignFiles(OpenPgpSecretKey?secretKey, string passphrase) { var task = ForEachTask.Create(Resources.SigningFeeds, _files, file => { SignedFeed signedFeed; try { signedFeed = SignedFeed.Load(file.FullName); } #region Error handling catch (Exception ex) when(ex is UnauthorizedAccessException or InvalidDataException) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message, ex); } #endregion signedFeed.SecretKey = secretKey; try { signedFeed.Save(file.FullName, passphrase); } #region Error handling catch (Exception ex) when(ex is UnauthorizedAccessException or KeyNotFoundException or WrongPassphraseException) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message, ex); } #endregion });
/// <summary> /// Signs a number of <see cref="Feed"/>s with a single <see cref="OpenPgpSecretKey"/>. /// </summary> /// <param name="secretKey">The private key to use for signing the files.</param> /// <param name="passphrase">The passphrase to use to unlock the key.</param> /// <exception cref="IOException">The feed file could not be read or written.</exception> /// <exception cref="UnauthorizedAccessException">Read or write access to the feed file is not permitted.</exception> private void SignFiles(OpenPgpSecretKey secretKey, string passphrase) { var task = ForEachTask.Create("Signing feeds", _files, file => { SignedFeed signedFeed; try { signedFeed = SignedFeed.Load(file.FullName); } #region Error handling catch (UnauthorizedAccessException ex) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message, ex); } catch (InvalidDataException ex) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message + (ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message), ex); } #endregion signedFeed.SecretKey = secretKey; try { signedFeed.Save(file.FullName, passphrase); } #region Error handling catch (UnauthorizedAccessException ex) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message, ex); } catch (KeyNotFoundException ex) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message, ex); } catch (WrongPassphraseException ex) { // Wrap exception since only certain exception types are allowed throw new IOException(ex.Message, ex); } #endregion }); using (var handler = new DialogTaskHandler(this)) handler.RunTask(task); Msg.Inform(this, "Successfully signed files.", MsgSeverity.Info); }