mirror of
https://github.com/kwsch/pkNX.git
synced 2026-03-21 17:54:12 -05:00
Cumulative changes from the team. Co-Authored-By: Matt <17801814+sora10pls@users.noreply.github.com> Co-Authored-By: SciresM <8676005+SciresM@users.noreply.github.com> Co-Authored-By: Lusamine <30205550+Lusamine@users.noreply.github.com>
64 lines
1.8 KiB
C#
64 lines
1.8 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace pkNX.Containers;
|
|
|
|
/// <summary>
|
|
/// Man in the middle redirection of file r/w requests
|
|
/// </summary>
|
|
public static class FileMitm
|
|
{
|
|
public static bool Enabled { get; private set; }
|
|
|
|
public static void EnableIfSetup() => Enabled = PathOriginal != null;
|
|
public static void Disable() => Enabled = false;
|
|
|
|
private static string? PathOriginal;
|
|
private static string? PathRedirect;
|
|
|
|
public static byte[] ReadAllBytes(string path)
|
|
{
|
|
path = GetRedirectedReadPath(path);
|
|
return File.ReadAllBytes(path);
|
|
}
|
|
|
|
public static void WriteAllBytes(string path, ReadOnlySpan<byte> data)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(path))
|
|
throw new FileNotFoundException("Invalid filename.");
|
|
path = GetRedirectedWritePath(path);
|
|
File.WriteAllBytes(path, data);
|
|
}
|
|
|
|
public static string GetRedirectedReadPath(string path)
|
|
{
|
|
if (!Enabled)
|
|
return path;
|
|
if (PathOriginal is null)
|
|
throw new ArgumentException("No original path specified.");
|
|
var newDest = path.Replace(PathOriginal, PathRedirect);
|
|
if (!File.Exists(newDest))
|
|
return path;
|
|
return newDest;
|
|
}
|
|
|
|
public static string GetRedirectedWritePath(string path)
|
|
{
|
|
if (!Enabled)
|
|
return path;
|
|
if (PathOriginal is null)
|
|
throw new ArgumentException("No original path specified.");
|
|
var newDest = path.Replace(PathOriginal, PathRedirect);
|
|
var parent = Path.GetDirectoryName(newDest) ?? throw new ArgumentException("Invalid path specified.");
|
|
Directory.CreateDirectory(parent);
|
|
return newDest;
|
|
}
|
|
|
|
public static void SetRedirect(string original, string dest)
|
|
{
|
|
PathOriginal = original;
|
|
PathRedirect = dest;
|
|
Enabled = true;
|
|
}
|
|
}
|