Skip to content

Commit 1f4bf07

Browse files
committed
feat: detect adult website from domain
1 parent b46fb1f commit 1f4bf07

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const { createHash } = require('crypto')
55
const { URL } = require('url')
66
const { join } = require('path')
77
const { tmpdir } = require('os')
8-
const { isCrawlable, puppeteerArgs, puppeteerViewport } = require('./utils')
8+
const { isCrawlable, puppeteerArgs, puppeteerViewport, isAdultContentDomain } = require('./utils')
99
const { hasVue, getVueMeta, getFramework, getPlugins, getUI, getNuxtMeta, getNuxtModules } = require('./detectors')
1010
const consola = require('consola')
1111

@@ -141,11 +141,15 @@ async function analyze (originalUrl, options = {}) {
141141
}
142142
infos.meta.siteName = await page.$eval('head > meta[property="og:site_name"]', element => element.content).catch(() => '')
143143

144-
const rtaLabel = await page.$eval('head > meta[name="RATING"]', element => element.content).catch(() => '')
145-
if (rtaLabel.trim() === 'RTA-5042-1996-1400-1577-RTA') {
144+
// Is adult website?
145+
const rtaLabel = await page.$eval('head > meta[name="rating"]', element => element.content).catch(() => '')
146+
if (['adult', 'RTA-5042-1996-1400-1577-RTA'].includes(rtaLabel.trim())) {
146147
infos.meta.isAdultContent = true
148+
} else {
149+
infos.meta.isAdultContent = await isAdultContentDomain(domain)
147150
}
148151

152+
149153
// Get page language
150154
const matches = html.match(new RegExp('<html[^>]*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"', 'i'));
151155
if (matches && matches.length) {

src/utils.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
const { Resolver } = require('dns').promises
2+
const fetch = require('node-fetch')
3+
const resolver = new Resolver()
4+
15
const asArray = (value) => value instanceof Array ? value : [value]
26
exports.asArray = asArray
37

@@ -112,3 +116,21 @@ exports.puppeteerViewport = {
112116
isMobile: false,
113117
width: 1920,
114118
}
119+
120+
const openDNSIPs = [/67\.215\.65.\d{3}/gi, /146\.112\.61\.\d{3}/gi]
121+
122+
function isOpenDNS(ip) {
123+
return openDNSIPs.some(function (regexp) {
124+
return regexp.test(ip)
125+
})
126+
}
127+
128+
exports.isAdultContentDomain = async function (domain) {
129+
resolver.setServers(['208.67.222.123'])
130+
const adultIPs = await resolver.resolve(domain, 'A')
131+
if (isOpenDNS(adultIPs[0])) {
132+
return true
133+
} else {
134+
return false
135+
}
136+
}

0 commit comments

Comments
 (0)