internal static async Task ExtractAsync(string inputFile, string destinationDir, TextWriter output, TextWriter error) { try { if (File.Exists(inputFile)) { if (destinationDir == ".") { destinationDir = System.Environment.CurrentDirectory; } Fs.EnsureFolder(destinationDir); output.WriteCommandHeader($"Extracting {inputFile} to {destinationDir}..."); await TemplatePackage.ExtractAsync(inputFile, destinationDir, true).ConfigureAwait(false); } else { error.WriteCommandText($"{inputFile} is not a valid folder to create a Templates Package."); } } catch (Exception ex) { error.WriteException(ex, "Unexpected exception extracting templates package."); } }
private async Task <bool> ExtractAsync(TemplatesPackageInfo packageInfo, string finalDest, CancellationToken ct = default(CancellationToken)) { try { _version = packageInfo.Version; if (!string.IsNullOrEmpty(packageInfo.LocalPath)) { var finalDestinationTemp = string.Concat(finalDest, _tmpExtension); await _templatePackage.ExtractAsync(packageInfo.LocalPath, finalDestinationTemp, ReportExtractionProgress, ct); Fs.SafeRenameDirectory(finalDestinationTemp, finalDest); AppHealth.Current.Verbose.TrackAsync($"{StringRes.TemplatesContentExtractedToString} {finalDest}.").FireAndForget(); return(true); } else { AppHealth.Current.Error.TrackAsync(StringRes.TemplatesSourceLocalPathEmptyMessage).FireAndForget(); return(false); } } catch (Exception ex) when(ex.GetType() != typeof(OperationCanceledException)) { AppHealth.Current.Exception.TrackAsync(ex, StringRes.TemplatesSourceExtractContentMessage).FireAndForget(); throw; } }
public async Task Pack_FolderAsync() { int filesInCurrentFolder = new DirectoryInfo(Environment.CurrentDirectory).GetFiles("*", SearchOption.AllDirectories).Count(); var inFolder = Environment.CurrentDirectory; var outDir = @"C:\Temp\PackTests"; var outFile = Path.Combine(outDir, "JustPacked.mstx"); var extractDir = Path.Combine(outDir, "Extraction"); await _templatePackage.PackAsync(inFolder, outFile, MediaTypeNames.Text.Plain); await _templatePackage.ExtractAsync(outFile, extractDir, null, CancellationToken.None); int filesInExtractionFolder = new DirectoryInfo(extractDir).GetFiles("*", SearchOption.AllDirectories).Count(); Assert.Equal(filesInCurrentFolder, filesInExtractionFolder); Directory.Delete(outDir, true); }
public async Task ExtractConcurrentReadAsync() { var inFile = @"Packaging\MsSigned\Templates.mstx"; var outDir1 = @"C:\Temp\OutFolder\Concurrent1"; var outDir2 = @"C:\Temp\OutFolder\Concurrent2"; Task t1 = Task.Run(async() => await TemplatePackage.ExtractAsync(inFile, outDir1)); Task t2 = Task.Run(async() => await TemplatePackage.ExtractAsync(inFile, outDir2)); await Task.WhenAll(t1, t2); Directory.Delete(outDir1, true); Directory.Delete(outDir2, true); }
private async Task ExtractAsync(string mstxFilePath, string versionedFolder, bool verifyPackageSignatures = true, CancellationToken ct = default(CancellationToken)) { try { await TemplatePackage.ExtractAsync(mstxFilePath, versionedFolder, verifyPackageSignatures, ReportExtractionProgress, ct); AppHealth.Current.Verbose.TrackAsync($"{StringRes.TemplatesContentExtractedToString} {versionedFolder}.").FireAndForget(); } catch (Exception ex) when(ex.GetType() != typeof(OperationCanceledException)) { AppHealth.Current.Exception.TrackAsync(ex, StringRes.TemplatesSourceExtractContentMessage).FireAndForget(); throw; } }
public async Task ExtractFileCurrentDirAsync() { var certPass = GetTestCertPassword(); X509Certificate2 cert = TemplatePackage.LoadCert(@"Packaging\TestCert.pfx", certPass); var inFile = @"Packaging\SampleContent.txt"; var outFile = @"ToExtract.package"; var extractionDir = string.Empty; await TemplatePackage.PackAndSignAsync(inFile, outFile, cert, MediaTypeNames.Text.Plain); await TemplatePackage.ExtractAsync(outFile, extractionDir); Assert.True(File.Exists(outFile)); File.Delete(outFile); }
public async Task Pack_FolderWithDefaultNamingAsync() { int filesInCurrentFolder = new DirectoryInfo(Environment.CurrentDirectory).GetFiles("*", SearchOption.AllDirectories).Count(); var inFolder = Environment.CurrentDirectory; var outDir = @"C:\Temp\PackTests"; var extractDir = Path.Combine(outDir, "Extraction"); var outFile = await TemplatePackage.PackAsync(inFolder); await TemplatePackage.ExtractAsync(outFile, extractDir, false); int filesInExtractionFolder = new DirectoryInfo(extractDir).GetFiles("*", SearchOption.AllDirectories).Count(); Assert.Equal(filesInCurrentFolder, filesInExtractionFolder); File.Delete(outFile); Directory.Delete(outDir, true); }
public async Task ExtractFileAndPacksInCurrentDirAsync() { var certPass = GetTestCertPassword(); X509Certificate2 cert = TemplatePackage.LoadCert(@"Packaging\TestCert.pfx", certPass); File.Copy(@"Packaging\SampleContent.txt", Path.Combine(Environment.CurrentDirectory, "NewFile.txt"), true); var inFile = "NewFile.txt"; var outFile = @"ToExtract.package"; var extractionDir = Environment.CurrentDirectory; await TemplatePackage.PackAndSignAsync(inFile, outFile, cert, MediaTypeNames.Text.Plain); await TemplatePackage.ExtractAsync(outFile, extractionDir); Assert.True(Directory.Exists(extractionDir)); Assert.True(File.Exists(Path.Combine(extractionDir, Path.GetFileName(inFile)))); File.Delete(outFile); }
public async Task ExtractAbsoluteDirsAsync() { var certPass = GetTestCertPassword(); X509Certificate2 cert = TemplatePackage.LoadCert(@"Packaging\TestCert.pfx", certPass); var inFile = Path.Combine(Environment.CurrentDirectory, @"Packaging\SampleContent.txt"); var outFile = @"C:\Temp\MyPackage\ToExtract.package"; var extractionDir = @"C:\Temp\NewContent\Extracted"; await TemplatePackage.PackAndSignAsync(inFile, outFile, cert, MediaTypeNames.Text.Plain); await TemplatePackage.ExtractAsync(outFile, extractionDir); Assert.True(Directory.Exists(extractionDir)); Assert.True(File.Exists(Path.Combine(extractionDir, @"Packaging\SampleContent.txt"))); File.Delete(outFile); Directory.Delete(extractionDir, true); }
public async Task ExtractRelativeDirsAsync() { var certPass = GetTestCertPassword(); X509Certificate2 cert = TemplatePackage.LoadCert(@"Packaging\TestCert.pfx", certPass); var inFile = @"Packaging\SampleContent.txt"; var outFile = @"Packaging\ToExtract.package"; var extractionDir = "NewDirToExtract"; await TemplatePackage.PackAndSignAsync(inFile, outFile, cert, MediaTypeNames.Text.Plain); await TemplatePackage.ExtractAsync(outFile, extractionDir); Assert.True(Directory.Exists(extractionDir)); Assert.True(File.Exists(Path.Combine(extractionDir, inFile))); File.Delete(outFile); Directory.Delete(extractionDir, true); }
public async Task PackAndSign_FolderExtractToAbsoluteDirAsync() { var certPass = GetTestCertPassword(); X509Certificate2 cert = TemplatePackage.LoadCert(@"Packaging\TestCert.pfx", certPass); int filesInCurrentFolder = new DirectoryInfo(Environment.CurrentDirectory).GetFiles("*", SearchOption.AllDirectories).Count(); var inFolder = Environment.CurrentDirectory; var outDir = @"C:\Temp\OutFolder\Extraction"; string signedFile = await TemplatePackage.PackAndSignAsync(inFolder, cert); await TemplatePackage.ExtractAsync(signedFile, outDir); int filesInExtractionFolder = new DirectoryInfo(outDir).GetFiles("*", SearchOption.AllDirectories).Count(); Assert.Equal(filesInCurrentFolder, filesInExtractionFolder); File.Delete(signedFile); Directory.Delete(outDir, true); }
public async Task ExtractFileTamperedAsync() { var certPass = GetTestCertPassword(); X509Certificate2 cert = TemplatePackage.LoadCert(@"Packaging\TestCert.pfx", certPass); var inFile = @"Packaging\SampleContent.txt"; var outFile = @"Packaging\ToExtract.package"; var extractionDir = "SubDir"; await TemplatePackage.PackAndSignAsync(inFile, outFile, cert, MediaTypeNames.Text.Plain); ModifyContent(outFile, "SampleContent.txt"); InvalidSignatureException ex = await Assert.ThrowsAsync <InvalidSignatureException>(async() => { await TemplatePackage.ExtractAsync(outFile, extractionDir); }); File.Delete(outFile); Directory.Delete(extractionDir, true); }