in CachingProxy/src/Prefixes.cs [12:41]
public RemoteServers(IEnumerable<string> prefixes, ICollection<string> contentTypeValidationPrefixes)
{
var trimmedPrefixes = new HashSet<string>();
// Order by length here to handle longer prefixes first
// This will help to handle overlapping prefixes like:
// /aprefix
// /aprefix/too
foreach (var prefix in prefixes.OrderByDescending(x => x.Length))
{
var trimmed = prefix.Trim('/');
if (trimmed.Length == 0) throw new ArgumentException("Prefix is empty: " + prefix);
var index = trimmed.IndexOf('=');
var trimmedPrefix = index < 0 ? $"/{trimmed}" : $"/{trimmed[..index]}";
trimmedPrefixes.Add(trimmedPrefix);
var validateContentType = contentTypeValidationPrefixes.Contains(trimmedPrefix);
myServers.Add(index < 0
? new RemoteServer(new PathString(trimmedPrefix), new Uri("https://" + trimmed + "/"), validateContentType)
: new RemoteServer(new PathString(trimmedPrefix), new Uri(trimmed[(index + 1)..].TrimEnd('/')), validateContentType));
}
foreach (var contentTypeValidationPrefix in contentTypeValidationPrefixes)
{
if (!trimmedPrefixes.Contains(contentTypeValidationPrefix))
throw new ArgumentException(
$"ContentTypeValidation prefix '{contentTypeValidationPrefix}' must be present in Prefixes list");
}
}