validate-cdn-conf.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const psl = require('psl');
  2. const picocolors = require('picocolors');
  3. const fs = require('fs');
  4. const path = require('path');
  5. (async () => {
  6. const domainSetContent = await fs.promises.readFile(
  7. path.resolve(__dirname, '../List/domainset/cdn.conf'),
  8. { encoding: 'utf-8' }
  9. );
  10. const domainSetLines = domainSetContent.split('\n');
  11. for (let i = 0, len = domainSetLines.length; i < len; i++) {
  12. const line = domainSetLines[i];
  13. // starts with #
  14. if (line.charCodeAt(0) === 35) {
  15. continue;
  16. }
  17. if (line.trim().length === 0) {
  18. continue;
  19. }
  20. const domain = line.charCodeAt(0) === 46 ? line.slice(1) : line;
  21. const parsed = psl.parse(domain);
  22. if (parsed.listed && parsed.input === parsed.tld) {
  23. console.error('Domain', picocolors.yellow(domain), picocolors.red('is in public suffix list!'));
  24. }
  25. }
  26. const rulesetContent = await fs.promises.readFile(
  27. path.resolve(__dirname, '../List/non_ip/cdn.conf'),
  28. { encoding: 'utf-8' }
  29. );
  30. const rulesetLines = rulesetContent.split('\n');
  31. for (let i = 0, len = rulesetLines.length; i < len; i++) {
  32. const line = rulesetLines[i];
  33. // starts with #
  34. if (line.charCodeAt(0) === 35) {
  35. continue;
  36. }
  37. if (line.trim().length === 0) {
  38. continue;
  39. }
  40. if (line.startsWith('DOMAIN-SUFFIX')) {
  41. const domain = line.slice(14);
  42. const parsed = psl.parse(domain);
  43. if (parsed.input !== parsed.tld) {
  44. console.error('Domain', picocolors.yellow(domain), picocolors.green('is not in public suffix list!'));
  45. }
  46. }
  47. }
  48. })();