diff --git a/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs b/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs
index 2a80ef6cf..6f61670a5 100644
--- a/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs
+++ b/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs
@@ -18,4 +18,28 @@ public static string ReadToEnd(this IFileInfo fileInfo)
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
+
+ /// Validates is in a subdirectory of
+ public static bool IsSubPathOf(this IFileInfo file, IDirectoryInfo parentDirectory)
+ {
+ var parent = file.Directory;
+ return parent is not null && parent.IsSubPathOf(parentDirectory);
+ }
+}
+
+public static class IDirectoryInfoExtensions
+{
+ /// Validates is subdirectory of
+ public static bool IsSubPathOf(this IDirectoryInfo directory, IDirectoryInfo parentDirectory)
+ {
+ var parent = directory;
+ do
+ {
+ if (parent.FullName == parentDirectory.FullName)
+ return true;
+ parent = parent.Parent;
+ } while (parent != null);
+
+ return false;
+ }
}