From f5564613f6afff2b78e55fa272347199b1381114 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Wed, 7 Dec 2022 18:11:18 +0800 Subject: [PATCH] Replace validate:cdn-conf with validate:domainset --- ...date-cdn-conf.js => validate-domainset.js} | 47 +++++++++++++------ List/non_ip/telegram.conf | 20 ++++---- package.json | 11 +++-- 3 files changed, 50 insertions(+), 28 deletions(-) rename Build/{validate-cdn-conf.js => validate-domainset.js} (54%) diff --git a/Build/validate-cdn-conf.js b/Build/validate-domainset.js similarity index 54% rename from Build/validate-cdn-conf.js rename to Build/validate-domainset.js index 9d60945d..7844f303 100644 --- a/Build/validate-cdn-conf.js +++ b/Build/validate-domainset.js @@ -1,8 +1,10 @@ +// Surge Domain Set can not include root domain from public suffix list. + const tldts = require('tldts'); const picocolors = require('picocolors'); - const fs = require('fs'); const path = require('path'); +const listDir = require('@sukka/listdir'); const SPECIAL_SUFFIXES = new Set([ 'linodeobjects.com', // only *.linodeobjects.com are public suffix @@ -10,12 +12,11 @@ const SPECIAL_SUFFIXES = new Set([ 'dweb.link' // only *.dweb.link are public suffix ]); -(async () => { +const validateDomainSet = async (filePath) => { const domainSetContent = await fs.promises.readFile( - path.resolve(__dirname, '../List/domainset/cdn.conf'), + path.resolve(__dirname, '../List/domainset', filePath), { encoding: 'utf-8' } ); - const domainSetLines = domainSetContent.split('\n'); for (let i = 0, len = domainSetLines.length; i < len; i++) { const line = domainSetLines[i]; @@ -36,16 +37,20 @@ const SPECIAL_SUFFIXES = new Set([ || parsed.isIcann ) && domain === parsed.publicSuffix ) { - console.error('Domain', picocolors.yellow(domain), picocolors.red('is in public suffix list!')); + console.error(`[${filePath}]`, picocolors.yellow(domain), picocolors.red('is in public suffix list!')); } } +}; +const validateRuleset = async (filePath) => { const rulesetContent = await fs.promises.readFile( - path.resolve(__dirname, '../List/non_ip/cdn.conf'), + path.resolve(__dirname, '../List/non_ip', filePath), { encoding: 'utf-8' } ); const rulesetLines = rulesetContent.split('\n'); + console.log(`[${filePath}]`); + for (let i = 0, len = rulesetLines.length; i < len; i++) { const line = rulesetLines[i]; // starts with # @@ -55,16 +60,30 @@ const SPECIAL_SUFFIXES = new Set([ if (line.trim().length === 0) { continue; } + if (!line.startsWith('DOMAIN-SUFFIX,')) { + continue; + } + const domain = line.slice(14); + const parsed = tldts.parse(domain, { allowPrivateDomains: true, detectIp: false }); - if (line.startsWith('DOMAIN-SUFFIX')) { - const domain = line.slice(14); - const parsed = tldts.parse(domain, { allowPrivateDomains: true, detectIp: false }); - - if (domain !== parsed.publicSuffix) { - if (!SPECIAL_SUFFIXES.has(domain)) { - console.error('Domain', picocolors.yellow(domain), picocolors.green('is not in public suffix list!')); - } + if (domain !== parsed.publicSuffix) { + if (!SPECIAL_SUFFIXES.has(domain)) { + console.warn(picocolors.yellow(domain), picocolors.green('is not in public suffix list!')); } } } +} + +(async () => { + const [domainsetFiles, rulesetFiles] = await Promise.all([ + listDir(path.resolve(__dirname, '../List/domainset')), + listDir(path.resolve(__dirname, '../List/non_ip')) + ]); + await Promise.all( + domainsetFiles.map(file => validateDomainSet(file)) + ); + // await Promise.all( + // rulesetFiles.map(file => validateRuleset(file)) + // ); })(); + diff --git a/List/non_ip/telegram.conf b/List/non_ip/telegram.conf index 537e6a66..98154b93 100644 --- a/List/non_ip/telegram.conf +++ b/List/non_ip/telegram.conf @@ -1,10 +1,10 @@ -# > Telegram -DOMAIN-SUFFIX,t.me -DOMAIN-SUFFIX,tx.me -DOMAIN-SUFFIX,tdesktop.com -DOMAIN-SUFFIX,telegra.ph -DOMAIN-SUFFIX,telegram.me -DOMAIN-SUFFIX,telegram.org -DOMAIN-SUFFIX,graph.org -DOMAIN-SUFFIX,legra.ph -DOMAIN-SUFFIX,telesco.pe +# > Telegram +DOMAIN-SUFFIX,t.me +DOMAIN-SUFFIX,tx.me +DOMAIN-SUFFIX,tdesktop.com +DOMAIN-SUFFIX,telegra.ph +DOMAIN-SUFFIX,telegram.me +DOMAIN-SUFFIX,telegram.org +DOMAIN-SUFFIX,graph.org +DOMAIN-SUFFIX,legra.ph +DOMAIN-SUFFIX,telesco.pe diff --git a/package.json b/package.json index 6f774441..c573c890 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "build:phishing-domainset": "wireit", "build:telegram-cidr": "wireit", "build:chn-cidr": "wireit", - "validate:cdn-conf": "wireit" + "validate:domainset": "wireit" }, "wireit": { "build:anti-bogus-domain": { @@ -50,9 +50,12 @@ "build:telegram-cidr" ] }, - "validate:cdn-conf": { - "command": "node ./Build/validate-cdn-conf.js", + "validate:domainset": { + "command": "node ./Build/validate-domainset.js", "dependencies": [ + "build:apple-cdn", + "build:phishing-domainset", + "build:reject-domainset", "build:cdn-conf" ] }, @@ -65,7 +68,7 @@ "build:telegram-cidr", "build:chn-cidr", "build:public", - "validate:cdn-conf" + "validate:domainset" ] } },