From 0cdd05a71c918c023222ea1c242fac06f61c1317 Mon Sep 17 00:00:00 2001 From: Andrej Tasevski Mestrovic Date: Sat, 10 Aug 2024 12:23:01 +0200 Subject: [PATCH] Refactored some code for later use --- .gitignore | 2 ++ .../File.Validator.Web.csproj | 1 + .../File.Validator/File.Validator.csproj | 1 + .../FileExtensions/FileExtension.cs | 19 +++++++++++++++ .../File.Validator/FileValidator.cs | 23 ++----------------- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 8a30d25..2ff69fb 100644 --- a/.gitignore +++ b/.gitignore @@ -396,3 +396,5 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +/File.Validator/File.Validator.MVC.Test +/File.Validator/File.Validator.Test diff --git a/File.Validator/File.Validator.Web/File.Validator.Web.csproj b/File.Validator/File.Validator.Web/File.Validator.Web.csproj index 2276469..eacc591 100644 --- a/File.Validator/File.Validator.Web/File.Validator.Web.csproj +++ b/File.Validator/File.Validator.Web/File.Validator.Web.csproj @@ -4,6 +4,7 @@ net8.0 enable enable + True diff --git a/File.Validator/File.Validator/File.Validator.csproj b/File.Validator/File.Validator/File.Validator.csproj index fa71b7a..263918f 100644 --- a/File.Validator/File.Validator/File.Validator.csproj +++ b/File.Validator/File.Validator/File.Validator.csproj @@ -4,6 +4,7 @@ net8.0 enable enable + True diff --git a/File.Validator/File.Validator/FileExtensions/FileExtension.cs b/File.Validator/File.Validator/FileExtensions/FileExtension.cs index 21ea37c..02f3043 100644 --- a/File.Validator/File.Validator/FileExtensions/FileExtension.cs +++ b/File.Validator/File.Validator/FileExtensions/FileExtension.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Text.RegularExpressions; namespace File.Validator.FileExtensions { @@ -9,5 +10,23 @@ public abstract class FileExtensionInfo public abstract string Name { get; } public abstract int Offset { get; } public abstract string[] Hex { get; } + + public virtual bool IsValid (BinaryReader reader) + { + // Postavi offset + reader.BaseStream.Seek(this.Offset, SeekOrigin.Begin); + + // Izvlaci broj bajtova u najduzem hex potpisu + string longestSignature = this.Hex.OrderByDescending(h => h.Length).First(); + int longestSignatureLen = Regex.Matches(longestSignature, "[a-zA-Z0-9][a-zA-Z0-9]").Count; + + // Procitaj N bajtova iz niza + byte[] data = reader.ReadBytes(longestSignatureLen); + string data_as_hex = BitConverter.ToString(data); + reader.Close(); + + // Proveriti da li data_as_hex poseduje neki do potpisa u nizu + return this.Hex.Any(h => data_as_hex.Contains(h)); + } } } diff --git a/File.Validator/File.Validator/FileValidator.cs b/File.Validator/File.Validator/FileValidator.cs index 48063ca..675cf36 100644 --- a/File.Validator/File.Validator/FileValidator.cs +++ b/File.Validator/File.Validator/FileValidator.cs @@ -1,11 +1,5 @@ -using File.Validator; -using File.Validator.FileExtensions; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; +using File.Validator.FileExtensions; using System.Reflection; -using System.Text.RegularExpressions; namespace File.Validator { @@ -43,20 +37,7 @@ public static bool isValidExtension(Stream stream, string expectedExtension) if (fileExtensionInfo == null) return false; - // Postavi offset - reader.BaseStream.Seek(fileExtensionInfo.Offset, SeekOrigin.Begin); - - // Izvlaci broj bajtova u najduzem hex potpisu - string longestSignature = fileExtensionInfo.Hex.OrderByDescending(h => h.Length).First(); - int longestSignatureLen = Regex.Matches(longestSignature, "[a-zA-Z0-9][a-zA-Z0-9]").Count; - - // Procitaj N bajtova iz niza - byte[] data = reader.ReadBytes(longestSignatureLen); - string data_as_hex = BitConverter.ToString(data); - reader.Close(); - - // Proveriti da li data_as_hex poseduje neki do potpisa u nizu - return fileExtensionInfo.Hex.Any(h => data_as_hex.Contains(h)); + return fileExtensionInfo.IsValid(reader); } ///