public FileInfo GetFile(string bundleId, string dumpId, string filename) { // make sure filename is not some relative ".." if (filename.Contains("..")) { throw new UnauthorizedAccessException(); } string dir = pathHelper.GetDumpDirectory(bundleId, dumpId); var file = new FileInfo(Path.Combine(dir, filename)); // make sure file really is inside of the dumps-directory if (!file.FullName.ToLower().Contains(dir.ToLower())) { throw new UnauthorizedAccessException(); } var dumpInfo = ReadMetainfoFile(bundleId, dumpId); SDFileEntry fileEntry = GetSDFileEntry(dumpInfo, file); if (fileEntry.Type == SDFileType.PrimaryDump && !settings.Value.DumpDownloadable) { throw new UnauthorizedAccessException(); } if (file.Exists) { return(file); } else { return(null); } }
private SDFileEntry GetSDFileEntry(DumpMetainfo dumpInfo, FileInfo fileInfo) { // the file should be registered in dumpInfo SDFileEntry fileEntry = dumpInfo.Files.Where(x => x.FileName == fileInfo.Name).SingleOrDefault(); if (fileEntry != null) { return(fileEntry); } // but if it's not registered, do some heuristic to figure out which type of file it is. fileEntry = new SDFileEntry() { FileName = fileInfo.Name }; if (Path.GetFileName(pathHelper.GetJsonPath(dumpInfo.BundleId, dumpInfo.DumpId)) == fileInfo.Name) { fileEntry.Type = SDFileType.SuperDumpData; return(fileEntry); } if (Path.GetFileName(pathHelper.GetDumpMetadataPath(dumpInfo.BundleId, dumpInfo.DumpId)) == fileInfo.Name) { fileEntry.Type = SDFileType.SuperDumpData; return(fileEntry); } if ("windbg.log" == fileInfo.Name) { fileEntry.Type = SDFileType.WinDbg; return(fileEntry); } if (fileInfo.Extension == ".log") { fileEntry.Type = SDFileType.SuperDumpLogfile; return(fileEntry); } if (fileInfo.Extension == ".json") { fileEntry.Type = SDFileType.SuperDumpData; return(fileEntry); } if (fileInfo.Extension == ".dmp") { fileEntry.Type = SDFileType.PrimaryDump; return(fileEntry); } if (fileInfo.Name.EndsWith(".core.gz", StringComparison.OrdinalIgnoreCase)) { fileEntry.Type = SDFileType.PrimaryDump; return(fileEntry); } if (fileInfo.Name.EndsWith(".libs.tar.gz", StringComparison.OrdinalIgnoreCase)) { fileEntry.Type = SDFileType.LinuxLibraries; return(fileEntry); } // can't figure out filetype fileEntry.Type = SDFileType.Other; return(fileEntry); }
private async Task <string> ReadCustomTextResult(DumpMetainfo dumpInfo) { SDFileEntry customResultFile = dumpInfo.Files.FirstOrDefault(x => x.Type == SDFileType.CustomTextResult); if (customResultFile == null) { return(null); } FileInfo file = dumpStorage.GetFile(dumpInfo.BundleId, dumpInfo.DumpId, customResultFile.FileName); if (file == null || !file.Exists) { return(null); } return(await System.IO.File.ReadAllTextAsync(file.FullName)); }
private string ReadCustomTextResult(DumpMetainfo dumpInfo) { SDFileEntry customResultFile = dumpInfo.Files.SingleOrDefault(x => x.Type == SDFileType.CustomTextResult); if (customResultFile == null) { return(null); } FileInfo file = dumpStorage.GetFile(dumpInfo.BundleId, dumpInfo.DumpId, customResultFile.FileName); if (!file.Exists) { return(null); } return(System.IO.File.ReadAllText(file.FullName)); }
public IEnumerable <SDFileInfo> GetSDFileInfos(DumpMetainfo dumpInfo) { foreach (var filePath in Directory.EnumerateFiles(pathHelper.GetDumpDirectory(dumpInfo.Id))) { // in case the requested file has a "special" entry in FileEntry list, add that information FileInfo fileInfo = new FileInfo(filePath); SDFileEntry fileEntry = GetSDFileEntry(dumpInfo, fileInfo); yield return(new SDFileInfo() { FileInfo = fileInfo, FileEntry = fileEntry, SizeInBytes = fileInfo.Length, Downloadable = fileEntry.Type != SDFileType.PrimaryDump || settings.Value.DumpDownloadable }); } }