add UseAnyURLPrefix setting

This commit is contained in:
Robert Paciorek 2024-03-16 19:40:16 +00:00
parent 9d89a6b6da
commit 9e934c3925
3 changed files with 25 additions and 3 deletions

View File

@ -4,6 +4,7 @@ public class AssetServerConfig {
public string ListenIP { get; set; } = string.Empty;
public int Port { get; set; } = 5001;
public string URLPrefix { get; set; } = string.Empty;
public bool UseAnyURLPrefix { get; set; } = true;
public AssetServerMode Mode { get; set; }
public string ProviderURL { get; set; } = string.Empty;
public string AutoEncryptRegexp { get; set; } = string.Empty;

View File

@ -34,12 +34,27 @@ public class AssetMiddleware
{
string path = context.Request.Path;
if (path is null || !string.IsNullOrEmpty(config.Value.URLPrefix) && !path.StartsWith("/" + config.Value.URLPrefix) || config.Value.Mode == AssetServerMode.None) {
if (path is null || config.Value.Mode == AssetServerMode.None) {
context.Response.StatusCode = 400;
return;
}
string assetPath = path.Remove(0, config.Value.URLPrefix.Length + 1);
string assetPath;
if (config.Value.UseAnyURLPrefix) {
int firstSlash = path.IndexOf('/', 1);
if (firstSlash < 0) {
context.Response.StatusCode = 400;
return;
}
assetPath = path.Remove(0, firstSlash + 1);
} else {
if (!string.IsNullOrEmpty(config.Value.URLPrefix) && !path.StartsWith("/" + config.Value.URLPrefix)) {
context.Response.StatusCode = 400;
return;
}
assetPath = path.Remove(0, config.Value.URLPrefix.Length + 1);
}
string localPath = GetLocalPath("assets/" + assetPath);
if (localPath == string.Empty && config.Value.Mode == AssetServerMode.Partial && config.Value.UseCache)

View File

@ -17,9 +17,15 @@
"// Port": "Listening port number for the asset server. Should be different than for the server API",
"Port": 5001,
"// URLPrefix": "Extra prefix in the URL; omitted while retrieving the path from the requested URL. For example, if set to '.com', then a request to http://localhost/.com/abc will return the 'abc' file from the assets folder",
"// URLPrefix (1)": "Extra prefix in the URL; omitted while retrieving the path from the requested URL. See also: UseAnyURLPrefix setting.",
"// URLPrefix (2)": "For example, if set to '.com', then a request to 'http://localhost/.com/abc' will return the 'abc' file from the assets folder.",
"URLPrefix": ".com",
"// UseAnyURLPrefix (1)": "Extended version of URLPrefix (if set to true, then URLPrefix setting will be ignored).",
"// UseAnyURLPrefix (2)": "When true requires that requested URL contained extra prefix (one directory at path start), that will be omitted while retrieving the path from the requested URL.",
"// UseAnyURLPrefix (3)": "If set to true, then (for example) a request to 'http://localhost/any.com/abc' will return the 'abc' file from the assets folder ('any.com' will be omitted).",
"UseAnyURLPrefix": true,
"// Mode": "Two modes: full - everything is local, partial - downloads assets from ProviderURL if not found locally",
"Mode": "partial",