namespace Cleanuparr.Api.Extensions;
public static class HttpRequestExtensions
{
///
/// Returns the request PathBase as a safe relative path.
/// Rejects absolute URLs (e.g. "://" or "//") to prevent open redirect attacks.
///
public static string GetSafeBasePath(this HttpRequest request)
{
var basePath = request.PathBase.Value?.TrimEnd('/') ?? "";
if (basePath.Contains("://") || basePath.StartsWith("//"))
{
return "";
}
return basePath;
}
///
/// Returns the external base URL (scheme + host + basePath).
/// TrustedForwardedHeadersMiddleware has already applied X-Forwarded-Proto and X-Forwarded-Host to / .
///
public static string GetExternalBaseUrl(this HttpContext context)
{
var request = context.Request;
var basePath = request.GetSafeBasePath();
return $"{request.Scheme}://{request.Host}{basePath}";
}
}