Skip to content

Commit ff71608

Browse files
author
lich2king
committed
blacklist jsons
1 parent f089c99 commit ff71608

4 files changed

Lines changed: 282 additions & 11 deletions

File tree

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,4 +317,5 @@ function shutdown() {
317317

318318
server.listen({
319319
port,
320-
});
320+
host: '0.0.0.0',
321+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
"porn",
3+
"sex",
4+
"xxx",
5+
"hentai"
6+
]

public/assets/blacklist.json

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
[
2+
"*.pornhub.com",
3+
"pornhub.com",
4+
"*.xvideos.com",
5+
"xvideos.com",
6+
"*.xnxx.com",
7+
"xnxx.com",
8+
"*.xhamster.com",
9+
"xhamster.com",
10+
"*.redtube.com",
11+
"redtube.com",
12+
"*.youporn.com",
13+
"youporn.com",
14+
"*.brazzers.com",
15+
"brazzers.com",
16+
"*.spankbang.com",
17+
"spankbang.com",
18+
"*.hclips.com",
19+
"hclips.com",
20+
"*.fux.com",
21+
"fux.com",
22+
"*.efukt.com",
23+
"efukt.com",
24+
"*.rule34.xxx",
25+
"rule34.xxx",
26+
"*.tnaflix.com",
27+
"tnaflix.com",
28+
"*.hqporner.com",
29+
"hqporner.com",
30+
"*.motherless.com",
31+
"motherless.com",
32+
"*.slutload.com",
33+
"slutload.com",
34+
"*.xtube.com",
35+
"xtube.com",
36+
"*.camwhores.tv",
37+
"camwhores.tv",
38+
"*.porndig.com",
39+
"porndig.com",
40+
"*.nudogram.com",
41+
"nudogram.com",
42+
"*.leak.xxx",
43+
"leak.xxx",
44+
"*.teamskeet.com",
45+
"teamskeet.com",
46+
"*.thothub.tv",
47+
"thothub.tv",
48+
"*.faphouse.com",
49+
"faphouse.com",
50+
"*.e621.net",
51+
"e621.net",
52+
"*.cam4.com",
53+
"cam4.com",
54+
"*.chaturbate.com",
55+
"chaturbate.com",
56+
"*.bongacams.com",
57+
"bongacams.com",
58+
"*.myfreecams.com",
59+
"myfreecams.com",
60+
"*.livejasmin.com",
61+
"livejasmin.com",
62+
"*.stripchat.com",
63+
"stripchat.com",
64+
"*.onlyfans.com",
65+
"onlyfans.com",
66+
"*.manyvids.com",
67+
"manyvids.com",
68+
"*.tubegalore.com",
69+
"tubegalore.com",
70+
"*.pornerbros.com",
71+
"pornerbros.com",
72+
"*.beeg.com",
73+
"beeg.com",
74+
"*.drtuber.com",
75+
"drtuber.com",
76+
"*.bigboobsalert.com",
77+
"bigboobsalert.com",
78+
"*.heavy-r.com",
79+
"heavy-r.com",
80+
"*.xrares.com",
81+
"xrares.com",
82+
"*.javhd.com",
83+
"javhd.com",
84+
"*.tokyomotion.net",
85+
"tokyomotion.net",
86+
"*.asiantubehd.com",
87+
"asiantubehd.com",
88+
"*.tubepornclassic.com",
89+
"tubepornclassic.com",
90+
"*.vrbangers.com",
91+
"vrbangers.com",
92+
"*.vrporn.com",
93+
"vrporn.com",
94+
"*.sexlikereal.com",
95+
"sexlikereal.com",
96+
"*.metart.com",
97+
"metart.com",
98+
"*.playboy.com",
99+
"playboy.com",
100+
"*.hustler.com",
101+
"hustler.com",
102+
"*.naughtyamerica.com",
103+
"naughtyamerica.com",
104+
"*.realitykings.com",
105+
"realitykings.com",
106+
"*.bangbros.com",
107+
"bangbros.com",
108+
"*.digitalplayground.com",
109+
"digitalplayground.com",
110+
"*.penthouse.com",
111+
"penthouse.com",
112+
"*.girlsway.com",
113+
"girlsway.com",
114+
"*.passion-hd.com",
115+
"passion-hd.com",
116+
"*.nubiles.net",
117+
"nubiles.net",
118+
"*.nubilefilms.com",
119+
"nubilefilms.com",
120+
"*.sex.com",
121+
"sex.com",
122+
"*.hentaihaven.xxx",
123+
"hentaihaven.xxx",
124+
"*.nhentai.net",
125+
"nhentai.net",
126+
"*.hentaifox.com",
127+
"hentaifox.com",
128+
"*.hanime.tv",
129+
"hanime.tv",
130+
"*.simply-hentai.com",
131+
"simply-hentai.com",
132+
"*.multporn.net",
133+
"multporn.net",
134+
"*.lewd.sx",
135+
"lewd.sx",
136+
"*.fakku.net",
137+
"fakku.net",
138+
"*.3dxchat.com",
139+
"3dxchat.com",
140+
"*.watchmygf.me",
141+
"watchmygf.me",
142+
"*.gfrevenge.com",
143+
"gfrevenge.com",
144+
"*.voyeurhit.com",
145+
"voyeurhit.com",
146+
"*.erome.com",
147+
"erome.com",
148+
"*.shadbase.com",
149+
"shadbase.com",
150+
"*.rule34.us",
151+
"rule34.us",
152+
"*.paheal.net",
153+
"paheal.net",
154+
"*.booru.org",
155+
"booru.org",
156+
"*.hypnohub.net",
157+
"hypnohub.net",
158+
"*.gelbooru.com",
159+
"gelbooru.com",
160+
"*.sankakucomplex.com",
161+
"sankakucomplex.com",
162+
"*.danbooru.donmai.us",
163+
"danbooru.donmai.us",
164+
"*.newgrounds.com",
165+
"newgrounds.com",
166+
"*.e-hentai.org",
167+
"e-hentai.org",
168+
"*.exhentai.org",
169+
"exhentai.org",
170+
"*.8muses.com",
171+
"8muses.com",
172+
"*.theporndude.com",
173+
"theporndude.com",
174+
"*.nsfw.xxx",
175+
"nsfw.xxx",
176+
"*.desiremovies.skin",
177+
"desiremovies.skin",
178+
"*.lustery.com",
179+
"lustery.com"
180+
]

public/uv/sw.js

Lines changed: 94 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,101 @@ importScripts('../epoxy/index.js');
22
importScripts('uv.bundle.js');
33
importScripts('uv.config.js');
44
importScripts(__uv$config.sw || 'uv.sw.js');
5-
//importScripts('uv.sw.js');
65

76
const uv = new UVServiceWorker();
87

9-
self.addEventListener('fetch', event => {
10-
event.respondWith(
11-
(async ()=>{
12-
if(uv.route(event)) {
13-
return await uv.fetch(event);
14-
}
15-
return await fetch(event.request);
16-
})()
17-
);
8+
const blacklist = {};
9+
let blacklistReady = loadBlacklist(); // Start loading immediately
10+
11+
let keywordBlacklist = [];
12+
let keywordBlacklistReady = loadKeywordBlacklist();
13+
14+
async function loadBlacklist() {
15+
try {
16+
const response = await fetch('/assets/blacklist.json');
17+
if (!response.ok) throw new Error(`Failed to fetch: ${response.status}`);
18+
19+
const domains = await response.json();
20+
21+
for (const domain of domains) {
22+
const tldMatch = domain.match(/\.\w+$/);
23+
if (!tldMatch) continue;
24+
25+
const domainTld = tldMatch[0];
26+
if (!blacklist[domainTld]) {
27+
blacklist[domainTld] = [];
28+
}
29+
30+
const baseDomain = domain.slice(0, -domainTld.length);
31+
const escapedDomain = encodeURIComponent(baseDomain)
32+
.replace(/[()]/g, '\\$&')
33+
.replace(/(\*\.)|\./g, (match, wildcard) =>
34+
wildcard ? '(?:.+\\.)?' : '\\.'
35+
);
36+
37+
blacklist[domainTld].push(escapedDomain);
38+
}
39+
40+
for (const tld in blacklist) {
41+
blacklist[tld] = new RegExp(`^(?:${blacklist[tld].join('|')})$`);
42+
}
43+
44+
Object.freeze(blacklist);
45+
console.log('[SW] Blacklist loaded successfully');
46+
} catch (err) {
47+
console.warn('[SW] Blacklist failed to load:', err);
48+
}
49+
}
50+
51+
async function loadKeywordBlacklist() {
52+
try {
53+
const response = await fetch('/assets/blacklist-keywords.json');
54+
keywordBlacklist = (await response.json()).map(k => k.toLowerCase());
55+
Object.freeze(keywordBlacklist);
56+
console.log('[SW] Keyword blacklist loaded');
57+
} catch (err) {
58+
console.warn('[SW] Keyword blacklist failed:', err);
59+
}
60+
}
61+
62+
self.addEventListener('fetch', (event) => {
63+
event.respondWith(
64+
(async () => {
65+
try {
66+
if (uv.route(event)) {
67+
// ✅ Wait for blacklist to finish loading (or fail)
68+
await blacklistReady;
69+
//await loadBlacklist();
70+
71+
await keywordBlacklistReady;
72+
73+
const decodedUrl = uv.config.decodeUrl(
74+
new URL(event.request.url).pathname.replace(uv.config.prefix, '')
75+
);
76+
const domain = new URL(decodedUrl).hostname;
77+
const domainTld = domain.replace(/.+(?=\.\w)/, '');
78+
79+
if (
80+
Object.keys(blacklist).length > 0 &&
81+
blacklist[domainTld] instanceof RegExp &&
82+
blacklist[domainTld].test(domain.slice(0, -domainTld.length))
83+
) {
84+
return new Response(new Blob(), { status: 406 });
85+
}
86+
87+
const domainLower = domain.toLowerCase();
88+
if (keywordBlacklist.some(keyword => domainLower.includes(keyword))) {
89+
return new Response(new Blob(), { status: 406 });
90+
}
91+
92+
return await uv.fetch(event);
93+
}
94+
95+
return await fetch(event.request);
96+
} catch (err) {
97+
console.error('[SW] Fetch handler error:', err);
98+
return new Response('Internal Service Worker Error', { status: 500 });
99+
}
100+
})()
101+
);
18102
});

0 commit comments

Comments
 (0)