fixed possibility of duplicate entries
This commit is contained in:
+34
-5
@@ -105,11 +105,40 @@ cache_log /var/log/squid/cache.log
|
||||
}
|
||||
|
||||
function generateVpnDomains(s) {
|
||||
return (
|
||||
s.domains
|
||||
.map((d) => (d.startsWith("*.") ? "." + d.slice(2) : d))
|
||||
.join("\n") + "\n"
|
||||
);
|
||||
// Wildcards: '*.foo.bar' -> covers 'foo.bar' und alle Subdomains in squid
|
||||
let wildcardBases = s.domains
|
||||
.filter((d) => d.startsWith("*."))
|
||||
.map((d) => d.slice(2));
|
||||
|
||||
// Dedupe: wenn '*.bar' und '*.foo.bar' beide drin sind, '*.foo.bar' droppen
|
||||
wildcardBases = wildcardBases.filter((base) => {
|
||||
return !wildcardBases.some(
|
||||
(other) => other !== base && base.endsWith("." + other)
|
||||
);
|
||||
});
|
||||
|
||||
const isCoveredByWildcard = (d) =>
|
||||
wildcardBases.some((base) => d === base || d.endsWith("." + base));
|
||||
|
||||
const seen = new Set();
|
||||
const out = [];
|
||||
|
||||
for (const base of wildcardBases) {
|
||||
const dotted = "." + base;
|
||||
if (!seen.has(dotted)) {
|
||||
out.push(dotted);
|
||||
seen.add(dotted);
|
||||
}
|
||||
}
|
||||
|
||||
for (const d of s.domains) {
|
||||
if (d.startsWith("*.")) continue;
|
||||
if (isCoveredByWildcard(d) || seen.has(d)) continue;
|
||||
out.push(d);
|
||||
seen.add(d);
|
||||
}
|
||||
|
||||
return out.join("\n") + "\n";
|
||||
}
|
||||
|
||||
function generateWpadDat(s) {
|
||||
|
||||
Reference in New Issue
Block a user