summary refs log tree commit diff
path: root/ReferenceClientProxyImplementation/Helpers/Resolvers.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ReferenceClientProxyImplementation/Helpers/Resolvers.cs')
-rw-r--r--ReferenceClientProxyImplementation/Helpers/Resolvers.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/ReferenceClientProxyImplementation/Helpers/Resolvers.cs b/ReferenceClientProxyImplementation/Helpers/Resolvers.cs
new file mode 100644

index 0000000..813ffcb --- /dev/null +++ b/ReferenceClientProxyImplementation/Helpers/Resolvers.cs
@@ -0,0 +1,80 @@ +using System.Diagnostics; +using Microsoft.AspNetCore.Mvc; + +namespace ReferenceClientProxyImplementation.Helpers; + +public static class Resolvers { + private static readonly string Navbar = File.Exists("Resources/Parts/Navbar.html") ? File.ReadAllText("Resources/Parts/Navbar.html") : "Navbar not found!"; + + public static object ReturnFile(string path) { + if (!File.Exists(path)) return new NotFoundObjectResult("File doesn't exist!"); + var ext = path.Split(".").Last(); + var contentType = ext switch { + //text types + "html" => "text/html", + "js" => "text/javascript", + "css" => "text/css", + "txt" => "text/plain", + "csv" => "text/csv", + //image types + "apng" => "image/apng", + "gif" => "image/gif", + "jpg" => "image/jpeg", + "png" => "image/png", + "svg" => "image/svg+xml", + "webp" => "image/webp", + "ico" => "image/x-icon", + _ => "application/octet-stream" + }; + switch (ext) { + case "html": + return new ContentResult { + ContentType = contentType, + Content = File.ReadAllText(path) + }; + case "js": + case "css": + case "txt": + case "csv": + case "svg": + return new ContentResult { + ContentType = contentType, + Content = File.ReadAllText(path) + }; + case "png": + case "webp": + case "jpg": + case "gif": + case "apng": + case "7z": + case "gz": + case "tar": + case "rar": + case "zip": + case "webm": + case "woff": + case "jar": + case "mp3": + case "mp4": + return new PhysicalFileResult(Path.GetFullPath(path), contentType); + default: + Console.WriteLine($"Unsupported filetype: {ext} ({path})"); + return new PhysicalFileResult(Path.GetFullPath(path), "application/octet-stream"); + } + } + + public static object ReturnFileWithVars(string path, Dictionary<string, object>? customVars = null) { + if (!File.Exists(path)) return new NotFoundObjectResult(Debugger.IsAttached ? $"File {path} doesn't exist!" : "File doesn't exist!"); + var result = ReturnFile(path); + if (result.GetType() != typeof(ContentResult)) return result; + var contentResult = (ContentResult)result; + contentResult.Content = contentResult.Content?.Replace("$NAVBAR", Navbar); + if (customVars != null) + foreach (var (key, value) in customVars) + contentResult.Content = contentResult.Content?.Replace(key, value.ToString()); + + result = contentResult; + + return result; + } +} \ No newline at end of file