public static FileData Create( Uri uri, OptionallyEmittedData dataToInsert = OptionallyEmittedData.None, string mimeType = null, Encoding encoding = null, IFileSystem fileSystem = null) { if (uri == null) { throw new ArgumentNullException(nameof(uri)); } mimeType = mimeType ?? SarifWriters.MimeType.DetermineFromFileExtension(uri); fileSystem = fileSystem ?? new FileSystem(); var fileData = new FileData() { Encoding = encoding?.WebName, MimeType = mimeType }; // Attempt to persist file contents and/or compute file hash and persist // this information to the log file. In the event that there is some issue // accessing the file, for example, due to ACLs applied to a directory, // we currently swallow these exceptions without populating any requested // data or putting a notification in the log file that a problem // occurred. Something to discuss moving forward. try { if (!uri.IsAbsoluteUri || !uri.IsFile || !fileSystem.FileExists(uri.LocalPath)) { return(fileData); } string filePath = uri.LocalPath; if (dataToInsert.Includes(OptionallyEmittedData.BinaryFiles) && SarifWriters.MimeType.IsBinaryMimeType(mimeType)) { fileData.Contents = GetEncodedFileContents(fileSystem, filePath, mimeType, encoding); } if (dataToInsert.Includes(OptionallyEmittedData.TextFiles) && SarifWriters.MimeType.IsTextualMimeType(mimeType)) { fileData.Contents = GetEncodedFileContents(fileSystem, filePath, mimeType, encoding); } if (dataToInsert.Includes(OptionallyEmittedData.Hashes)) { HashData hashes = HashUtilities.ComputeHashes(filePath); fileData.Hashes = new List <Hash> { new Hash() { Value = hashes.MD5, Algorithm = "md5", }, new Hash() { Value = hashes.Sha1, Algorithm = "sha-1", }, new Hash() { Value = hashes.Sha256, Algorithm = "sha-256", }, }; } } catch (Exception e) when(e is IOException || e is UnauthorizedAccessException) { } return(fileData); }
public static Artifact Create( Uri uri, OptionallyEmittedData dataToInsert = OptionallyEmittedData.None, Encoding encoding = null, HashData hashData = null, IFileSystem fileSystem = null) { if (uri == null) { throw new ArgumentNullException(nameof(uri)); } fileSystem ??= FileSystem.Instance; var artifact = new Artifact() { Encoding = encoding?.WebName, }; string mimeType = SarifWriters.MimeType.DetermineFromFileExtension(uri); // Attempt to persist file contents and/or compute file hash and persist // this information to the log file. In the event that there is some issue // accessing the file, for example, due to ACLs applied to a directory, // we currently swallow these exceptions without populating any requested // data or putting a notification in the log file that a problem // occurred. Something to discuss moving forward. try { bool workTodo = dataToInsert.HasFlag(OptionallyEmittedData.Hashes) || dataToInsert.HasFlag(OptionallyEmittedData.TextFiles) || dataToInsert.HasFlag(OptionallyEmittedData.BinaryFiles); if (!workTodo || !uri.IsAbsoluteUri || !uri.IsFile || !fileSystem.FileExists(uri.LocalPath)) { return(artifact); } string filePath = uri.LocalPath; if (dataToInsert.HasFlag(OptionallyEmittedData.BinaryFiles) && SarifWriters.MimeType.IsBinaryMimeType(mimeType)) { artifact.Contents = GetEncodedFileContents(fileSystem, filePath, mimeType, encoding); } if (dataToInsert.HasFlag(OptionallyEmittedData.TextFiles) && SarifWriters.MimeType.IsTextualMimeType(mimeType)) { artifact.Contents = GetEncodedFileContents(fileSystem, filePath, mimeType, encoding); } if (dataToInsert.HasFlag(OptionallyEmittedData.Hashes)) { HashData hashes = hashData ?? HashUtilities.ComputeHashes(filePath); artifact.Hashes = new Dictionary <string, string> { { "md5", hashes.MD5 }, { "sha-1", hashes.Sha1 }, { "sha-256", hashes.Sha256 }, }; } } catch (Exception e) when(e is IOException || e is UnauthorizedAccessException) { } return(artifact); }
public static FileData Create( Uri uri, SarifWriters.LoggingOptions loggingOptions, string mimeType = null, Encoding encoding = null, IFileSystem fileSystem = null) { if (uri == null) { throw new ArgumentNullException(nameof(uri)); } mimeType = mimeType ?? SarifWriters.MimeType.DetermineFromFileExtension(uri); fileSystem = fileSystem ?? new FileSystem(); encoding = encoding ?? Encoding.UTF8; var fileData = new FileData() { MimeType = mimeType }; // Attempt to persist file contents and/or compute file hash and persist // this information to the log file. In the event that there is some issue // accessing the file, for example, due to ACLs applied to a directory, // we currently swallow these exceptions without populating any requested // data or putting a notification in the log file that a problem // occurred. Something to discuss moving forward. try { if (!uri.IsAbsoluteUri || !uri.IsFile || !fileSystem.FileExists(uri.LocalPath)) { return(fileData); } string filePath = uri.LocalPath; bool encodeAsUtf8 = (fileData.MimeType != SarifWriters.MimeType.Binary); if (loggingOptions.Includes(Writers.LoggingOptions.PersistFileContents)) { fileData.Contents = EncodeFileContents(fileSystem, filePath, mimeType, encoding); } if (loggingOptions.Includes(Writers.LoggingOptions.ComputeFileHashes)) { HashData hashes = HashUtilities.ComputeHashes(filePath); fileData.Hashes = new List <Hash> { new Hash() { Value = hashes.MD5, Algorithm = AlgorithmKind.MD5, }, new Hash() { Value = hashes.Sha1, Algorithm = AlgorithmKind.Sha1, }, new Hash() { Value = hashes.Sha256, Algorithm = AlgorithmKind.Sha256, }, }; } } catch (Exception e) when(e is IOException || e is UnauthorizedAccessException) { } return(fileData); }