Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
QuiteAFancyEmerald
GitHub Repository: QuiteAFancyEmerald/Holy-Unblocker
Path: blob/master/src/templates.mjs
5156 views
1
import { existsSync, readFileSync } from 'node:fs';
2
import { config, text404 } from './routes.mjs';
3
import paintSource from './source-rewrites.mjs';
4
export { loadTemplates, tryReadFile, preloaded404 };
5
6
const __dirname = '../views/pages/misc/deobf',
7
getLineHeads = /^/gm,
8
regExpEscape2 = /[-[\]{}()*+?.,\\^$|#\s]/g,
9
isImage = /\.(?:ico|png|jpg|jpeg)$/,
10
templateNames = [
11
'anti-exfil',
12
'head-content',
13
'header',
14
'footer',
15
'docs',
16
'faq',
17
'tos',
18
'settings',
19
'proxnav-settings',
20
],
21
readTemplate = (identifier) =>
22
readFileSync(
23
new URL(__dirname + `/${identifier}.html`, import.meta.url),
24
'utf8'
25
),
26
locateTemplate = (key) =>
27
new RegExp(
28
`([^\\S\\n\\r]*)<!--(${key.replace(regExpEscape2, '\\$&')})-->`,
29
'gm'
30
),
31
preserveIndentation = (template) => (line, leadingSpaces) =>
32
template.replace(getLineHeads, leadingSpaces),
33
templates = templateNames.map((name) => [
34
locateTemplate(name.toUpperCase()),
35
preserveIndentation(readTemplate(name).replace(/\s+$/, '')),
36
]),
37
loadTemplates = (str) =>
38
templates.reduce(
39
(updatedStr, [key, template]) => updatedStr.replace(key, template),
40
str
41
),
42
preformatted404 = paintSource(loadTemplates(text404)),
43
preloaded404 = config.disguiseFiles
44
? Buffer.from(
45
await new Response(
46
new Blob([preformatted404])
47
.stream()
48
.pipeThrough(new CompressionStream('gzip'))
49
).arrayBuffer()
50
)
51
: preformatted404,
52
// Grab the text content of a file. Use the root directory if no base is supplied.
53
tryReadFile = (
54
file,
55
baseUrl = new URL('../', import.meta.url),
56
isBuffer = config.disguiseFiles
57
) => {
58
file = new URL(file, baseUrl);
59
return existsSync(file)
60
? readFileSync(file, isImage.test(file) || isBuffer ? undefined : 'utf8')
61
: preloaded404;
62
};
63
64