FileTypes -> SupportedFileType

This commit is contained in:
Matt Nadareski
2022-12-08 21:46:22 -08:00
parent 4a589603e4
commit dcc8915dd2
4 changed files with 103 additions and 100 deletions

View File

@@ -1,6 +1,9 @@
namespace BurnOutSharp
{
public enum FileTypes
/// <summary>
/// Subset of file types that are supported by the library
/// </summary>
public enum SupportedFileType
{
/// <summary>
/// Unknown or unsupported

View File

@@ -32,7 +32,7 @@ namespace BurnOutSharp.FileType
byte[] magic = new byte[16];
stream.Read(magic, 0, 16);
if (Utilities.GetFileType(magic) == FileTypes.PLJ)
if (Utilities.GetFileType(magic) == SupportedFileType.PLJ)
{
Utilities.AppendToDictionary(protections, file, "PlayJ Audio File");
return protections;

View File

@@ -310,12 +310,12 @@ namespace BurnOutSharp
}
// Get the file type either from magic number or extension
FileTypes fileType = Utilities.GetFileType(magic);
if (fileType == FileTypes.UNKNOWN)
SupportedFileType fileType = Utilities.GetFileType(magic);
if (fileType == SupportedFileType.UNKNOWN)
fileType = Utilities.GetFileType(extension);
// If we still got unknown, just return null
if (fileType == FileTypes.UNKNOWN)
if (fileType == SupportedFileType.UNKNOWN)
return null;
// Create a scannable for the given file type

View File

@@ -185,23 +185,23 @@ namespace BurnOutSharp.Tools
/// Get the supported file type for a magic string
/// </summary>
/// <remarks>Recommend sending in 16 bytes to check</remarks>
public static FileTypes GetFileType(byte[] magic)
public static SupportedFileType GetFileType(byte[] magic)
{
// If we have an invalid magic byte array
if (magic == null || magic.Length == 0)
return FileTypes.UNKNOWN;
return SupportedFileType.UNKNOWN;
#region BFPK
if (magic.StartsWith(new byte?[] { 0x42, 0x46, 0x50, 0x4b }))
return FileTypes.BFPK;
return SupportedFileType.BFPK;
#endregion
#region BZip2
if (magic.StartsWith(new byte?[] { 0x42, 0x52, 0x68 }))
return FileTypes.BZip2;
return SupportedFileType.BZip2;
#endregion
@@ -209,7 +209,7 @@ namespace BurnOutSharp.Tools
// DOS MZ executable file format (and descendants)
if (magic.StartsWith(new byte?[] { 0x4d, 0x5a }))
return FileTypes.Executable;
return SupportedFileType.Executable;
/*
// None of the following are supported in scans yet
@@ -244,7 +244,7 @@ namespace BurnOutSharp.Tools
#region GZIP
if (magic.StartsWith(new byte?[] { 0x1f, 0x8b }))
return FileTypes.GZIP;
return SupportedFileType.GZIP;
#endregion
@@ -257,35 +257,35 @@ namespace BurnOutSharp.Tools
#region InstallShieldArchiveV3
if (magic.StartsWith(new byte?[] { 0x13, 0x5D, 0x65, 0x8C }))
return FileTypes.InstallShieldArchiveV3;
return SupportedFileType.InstallShieldArchiveV3;
#endregion
#region InstallShieldCAB
if (magic.StartsWith(new byte?[] { 0x49, 0x53, 0x63 }))
return FileTypes.InstallShieldCAB;
return SupportedFileType.InstallShieldCAB;
#endregion
#region MicrosoftCAB
if (magic.StartsWith(new byte?[] { 0x4d, 0x53, 0x43, 0x46 }))
return FileTypes.MicrosoftCAB;
return SupportedFileType.MicrosoftCAB;
#endregion
#region MPQ
if (magic.StartsWith(new byte?[] { 0x4d, 0x50, 0x51, 0x1a }))
return FileTypes.MPQ;
return SupportedFileType.MPQ;
#endregion
#region MSI
if (magic.StartsWith(new byte?[] { 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1 }))
return FileTypes.MSI;
return SupportedFileType.MSI;
#endregion
@@ -293,19 +293,19 @@ namespace BurnOutSharp.Tools
// PKZIP (Unknown)
if (magic.StartsWith(new byte?[] { 0x50, 0x4b, 0x00, 0x00 }))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// PKZIP
if (magic.StartsWith(new byte?[] { 0x50, 0x4b, 0x03, 0x04 }))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// PKZIP (Empty Archive)
if (magic.StartsWith(new byte?[] { 0x50, 0x4b, 0x05, 0x06 }))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// PKZIP (Spanned Archive)
if (magic.StartsWith(new byte?[] { 0x50, 0x4b, 0x07, 0x08 }))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
#endregion
@@ -313,7 +313,7 @@ namespace BurnOutSharp.Tools
// https://www.iana.org/assignments/media-types/audio/vnd.everad.plj
if (magic.StartsWith(new byte?[] { 0xFF, 0x9D, 0x53, 0x4B }))
return FileTypes.PLJ;
return SupportedFileType.PLJ;
#endregion
@@ -321,28 +321,28 @@ namespace BurnOutSharp.Tools
// RAR archive version 1.50 onwards
if (magic.StartsWith(new byte?[] { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00 }))
return FileTypes.RAR;
return SupportedFileType.RAR;
// RAR archive version 5.0 onwards
if (magic.StartsWith(new byte?[] { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00 }))
return FileTypes.RAR;
return SupportedFileType.RAR;
#endregion
#region SevenZip
if (magic.StartsWith(new byte?[] { 0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c }))
return FileTypes.SevenZip;
return SupportedFileType.SevenZip;
#endregion
#region TapeArchive
if (magic.StartsWith(new byte?[] { 0x75, 0x73, 0x74, 0x61, 0x72, 0x00, 0x30, 0x30 }))
return FileTypes.TapeArchive;
return SupportedFileType.TapeArchive;
if (magic.StartsWith(new byte?[] { 0x75, 0x73, 0x74, 0x61, 0x72, 0x20, 0x20, 0x00 }))
return FileTypes.TapeArchive;
return SupportedFileType.TapeArchive;
#endregion
@@ -352,57 +352,57 @@ namespace BurnOutSharp.Tools
// HTML
if (magic.StartsWith(new byte?[] { 0x3c, 0x68, 0x74, 0x6d, 0x6c }))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// HTML and XML
if (magic.StartsWith(new byte?[] { 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45 }))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// InstallShield Compiled Rules
if (magic.StartsWith(new byte?[] { 0x61, 0x4C, 0x75, 0x5A }))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Microsoft Office File (old)
if (magic.StartsWith(new byte?[] { 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1 }))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Rich Text File
if (magic.StartsWith(new byte?[] { 0x7b, 0x5c, 0x72, 0x74, 0x66, 0x31 }))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Windows Help File
if (magic.StartsWith(new byte?[] { 0x3F, 0x5F, 0x03, 0x00 }))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
#endregion
#region Valve
if (HLLib.Packages.Package.GetPackageType(magic) != HLLib.Packages.PackageType.HL_PACKAGE_NONE)
return FileTypes.Valve;
return SupportedFileType.Valve;
#endregion
#region XZ
if (magic.StartsWith(new byte?[] { 0xfd, 0x37, 0x7a, 0x58, 0x5a, 0x00 }))
return FileTypes.XZ;
return SupportedFileType.XZ;
#endregion
// We couldn't find a supported match
return FileTypes.UNKNOWN;
return SupportedFileType.UNKNOWN;
}
/// <summary>
/// Get the supported file type for an extension
/// </summary>
/// <remarks>This is less accurate than a magic string match</remarks>
public static FileTypes GetFileType(string extension)
public static SupportedFileType GetFileType(string extension)
{
// If we have an invalid extension
if (string.IsNullOrWhiteSpace(extension))
return FileTypes.UNKNOWN;
return SupportedFileType.UNKNOWN;
// Normalize the extension
extension = extension.TrimStart('.').Trim();
@@ -416,7 +416,7 @@ namespace BurnOutSharp.Tools
#region BZip2
if (extension.Equals("bz2", StringComparison.OrdinalIgnoreCase))
return FileTypes.BZip2;
return SupportedFileType.BZip2;
#endregion
@@ -424,32 +424,32 @@ namespace BurnOutSharp.Tools
// DOS MZ executable file format (and descendants)
if (extension.Equals("exe", StringComparison.OrdinalIgnoreCase))
return FileTypes.Executable;
return SupportedFileType.Executable;
// DOS MZ library file format (and descendants)
if (extension.Equals("dll", StringComparison.OrdinalIgnoreCase))
return FileTypes.Executable;
return SupportedFileType.Executable;
#endregion
#region GZIP
if (extension.Equals("gz", StringComparison.OrdinalIgnoreCase))
return FileTypes.GZIP;
return SupportedFileType.GZIP;
#endregion
#region IniFile
if (extension.Equals("ini", StringComparison.OrdinalIgnoreCase))
return FileTypes.IniFile;
return SupportedFileType.IniFile;
#endregion
#region InstallShieldArchiveV3
if (extension.Equals("z", StringComparison.OrdinalIgnoreCase))
return FileTypes.InstallShieldArchiveV3;
return SupportedFileType.InstallShieldArchiveV3;
#endregion
@@ -470,14 +470,14 @@ namespace BurnOutSharp.Tools
#region MPQ
if (extension.Equals("mpq", StringComparison.OrdinalIgnoreCase))
return FileTypes.MPQ;
return SupportedFileType.MPQ;
#endregion
#region MSI
if (extension.Equals("msi", StringComparison.OrdinalIgnoreCase))
return FileTypes.MSI;
return SupportedFileType.MSI;
#endregion
@@ -485,87 +485,87 @@ namespace BurnOutSharp.Tools
// PKZIP
if (extension.Equals("zip", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Android package
if (extension.Equals("apk", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Java archive
if (extension.Equals("jar", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Google Earth saved working session file
if (extension.Equals("kmz", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// KWord document
if (extension.Equals("kwd", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Microsoft Office Open XML Format (OOXML) Document
if (extension.Equals("docx", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Microsoft Office Open XML Format (OOXML) Presentation
if (extension.Equals("pptx", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Microsoft Office Open XML Format (OOXML) Spreadsheet
if (extension.Equals("xlsx", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenDocument text document
if (extension.Equals("odt", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenDocument presentation
if (extension.Equals("odp", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenDocument text document template
if (extension.Equals("ott", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Microsoft Open XML paper specification file
if (extension.Equals("oxps", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenOffice spreadsheet
if (extension.Equals("sxc", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenOffice drawing
if (extension.Equals("sxd", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenOffice presentation
if (extension.Equals("sxi", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// OpenOffice word processing
if (extension.Equals("sxw", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// StarOffice spreadsheet
if (extension.Equals("sxc", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Windows Media compressed skin file
if (extension.Equals("wmz", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// Mozilla Browser Archive
if (extension.Equals("xpi", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// XML paper specification file
if (extension.Equals("xps", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
// eXact Packager Models
if (extension.Equals("xpt", StringComparison.OrdinalIgnoreCase))
return FileTypes.PKZIP;
return SupportedFileType.PKZIP;
#endregion
@@ -573,28 +573,28 @@ namespace BurnOutSharp.Tools
// https://www.iana.org/assignments/media-types/audio/vnd.everad.plj
if (extension.Equals("plj", StringComparison.OrdinalIgnoreCase))
return FileTypes.PLJ;
return SupportedFileType.PLJ;
#endregion
#region RAR
if (extension.Equals("rar", StringComparison.OrdinalIgnoreCase))
return FileTypes.RAR;
return SupportedFileType.RAR;
#endregion
#region SevenZip
if (extension.Equals("7z", StringComparison.OrdinalIgnoreCase))
return FileTypes.SevenZip;
return SupportedFileType.SevenZip;
#endregion
#region TapeArchive
if (extension.Equals("tar", StringComparison.OrdinalIgnoreCase))
return FileTypes.SevenZip;
return SupportedFileType.SevenZip;
#endregion
@@ -602,41 +602,41 @@ namespace BurnOutSharp.Tools
// "Description in Zip"
if (extension.Equals("diz", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Generic textfile (no header)
if (extension.Equals("txt", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// HTML
if (extension.Equals("htm", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
if (extension.Equals("html", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// InstallShield Script
if (extension.Equals("ins", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Microsoft Office File (old)
if (extension.Equals("doc", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Rich Text File
if (extension.Equals("rtf", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Setup information
if (extension.Equals("inf", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// Windows Help File
if (extension.Equals("hlp", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
// XML
if (extension.Equals("xml", StringComparison.OrdinalIgnoreCase))
return FileTypes.Textfile;
return SupportedFileType.Textfile;
#endregion
@@ -649,39 +649,39 @@ namespace BurnOutSharp.Tools
#region XZ
if (extension.Equals("xz", StringComparison.OrdinalIgnoreCase))
return FileTypes.XZ;
return SupportedFileType.XZ;
#endregion
// We couldn't find a supported match
return FileTypes.UNKNOWN;
return SupportedFileType.UNKNOWN;
}
/// <summary>
/// Create an instance of a scannable based on file type
/// </summary>
public static IScannable CreateScannable(FileTypes fileType)
public static IScannable CreateScannable(SupportedFileType fileType)
{
switch (fileType)
{
case FileTypes.BFPK: return new FileType.BFPK();
case FileTypes.BZip2: return new FileType.BZip2();
case FileTypes.Executable: return new FileType.Executable();
case FileTypes.GZIP: return new FileType.GZIP();
case SupportedFileType.BFPK: return new FileType.BFPK();
case SupportedFileType.BZip2: return new FileType.BZip2();
case SupportedFileType.Executable: return new FileType.Executable();
case SupportedFileType.GZIP: return new FileType.GZIP();
//case FileTypes.IniFile: return new FileType.IniFile();
case FileTypes.InstallShieldArchiveV3: return new FileType.InstallShieldArchiveV3();
case FileTypes.InstallShieldCAB: return new FileType.InstallShieldCAB();
case FileTypes.MicrosoftCAB: return new FileType.MicrosoftCAB();
case FileTypes.MPQ: return new FileType.MPQ();
case FileTypes.MSI: return new FileType.MSI();
case FileTypes.PKZIP: return new FileType.PKZIP();
case FileTypes.PLJ: return new FileType.PLJ();
case FileTypes.RAR: return new FileType.RAR();
case FileTypes.SevenZip: return new FileType.SevenZip();
case FileTypes.TapeArchive: return new FileType.TapeArchive();
case FileTypes.Textfile: return new FileType.Textfile();
case FileTypes.Valve: return new FileType.Valve();
case FileTypes.XZ: return new FileType.XZ();
case SupportedFileType.InstallShieldArchiveV3: return new FileType.InstallShieldArchiveV3();
case SupportedFileType.InstallShieldCAB: return new FileType.InstallShieldCAB();
case SupportedFileType.MicrosoftCAB: return new FileType.MicrosoftCAB();
case SupportedFileType.MPQ: return new FileType.MPQ();
case SupportedFileType.MSI: return new FileType.MSI();
case SupportedFileType.PKZIP: return new FileType.PKZIP();
case SupportedFileType.PLJ: return new FileType.PLJ();
case SupportedFileType.RAR: return new FileType.RAR();
case SupportedFileType.SevenZip: return new FileType.SevenZip();
case SupportedFileType.TapeArchive: return new FileType.TapeArchive();
case SupportedFileType.Textfile: return new FileType.Textfile();
case SupportedFileType.Valve: return new FileType.Valve();
case SupportedFileType.XZ: return new FileType.XZ();
default: return null;
}
}