/// <summary> /// Re-apply password to zip contents(recursively) /// Remove temp files generated by original zip unpacking (and used by action processing) /// Note: We do NOT re-apply the zip files password here, ReEncryptAttachment() does it at higher level /// </summary> /// <param name="zipContainerAttachment"></param> /// <param name="ui"></param> /// <param name="cancelSend"></param> /// <returns></returns> private bool EncryptZipContents(Attachment zipContainerAttachment, IContentEncryptionUi ui, out bool cancelSend) { Logger.LogInfo("EncryptZipContents called for:" + zipContainerAttachment.FileName); cancelSend = false; using (var tempFileController = new TempFileController()) // Remember the temp files we generated. { for (int i = 0; i < zipContainerAttachment.File.Files.Count; i++) // So we can recreate FCS files on fly { IFile file = (IFile) zipContainerAttachment.File.Files[i]; Attachment tmpAttachment = new Attachment(file, "contenttype", file.ContentId, null, false); // This attachment may be itself a zip; so before we re-encrypt it, we need to re-encrypt its contents. if (!ProcessContainerContents(tmpAttachment, ui, false, out cancelSend)) { return false; } // Ignore the return value, this will fail if the attachment was not encrypted originally. ReEncryptAttachment(tmpAttachment); // Ensure the changes get copied back zipContainerAttachment.File.Files[i] = tmpAttachment.File; tempFileController.Add(file.FileName); } // Re-create the actual zip file with the now processed files if (!zipContainerAttachment.File.PackContainer(string.Empty)) // Don't specify a password at this point, allow ReEncryptAttachment() { LastErrorText = string.Format("Unable to repack [{0}]", zipContainerAttachment.File.FileName); Logger.LogError(LastErrorText); return false; } } return true; }