1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
<%
function date() {
return "" + new Date().getFullYear() + (new Date().getMonth() + 1) + new Date().getDate() + new Date().getHours() + new Date().getMinutes();
}
function date2() {
return "" + new Date().getFullYear() + (new Date().getMonth() + 1);
}
if (typeof get["q"] !== "undefined") {
query = get["q"].toLowerCase().substr(0, 200).replace(/[^A-Za-z0-9 +\-_/*]/, '').replace(/[\.]/, ' ').trim();
} else {
res.writeHead(301, {"Location": "/" + slang});
res.end();
}
if (query === "") {
res.writeHead(301, {"Location": "/" + slang});
res.end();
}
cacheOnly = false;
rl = {
local: -1,
global: -1,
blocked: false
}
rlroot = wwwdata + "/../../data/ratelimiting";
cache = wwwdata + "/../../data/cache";
afile = rlroot + "/" + address;
gfile = rlroot + "/_global";
mfile = rlroot + "_month";
if (!fs.existsSync(rlroot)) fs.mkdirSync(rlroot);
if (!fs.existsSync(afile)) {
fs.writeFileSync(afile, "1|" + date());
} else {
requests = fs.readFileSync(afile).toString().split("|")[0] - 1 + 1;
vdate = fs.readFileSync(afile).toString().split("|")[1];
if (vdate === date()) {
requests++;
if (requests > 3) {
cacheOnly = true;
rl.blocked = true;
}
fs.writeFileSync(afile, requests + "|" + date());
} else {
fs.writeFileSync(afile, "1|" + date());
}
rl.local = requests;
}
if (!fs.existsSync(gfile)) {
fs.writeFileSync(gfile, "1|" + date());
} else {
requests = fs.readFileSync(gfile).toString().split("|")[0] - 1 + 1;
vdate = fs.readFileSync(gfile).toString().split("|")[1];
if (vdate === date()) {
requests++;
if (requests >= 20) {
cacheOnly = true;
rl.blocked = true;
}
fs.writeFileSync(gfile, requests + "|" + date());
} else {
fs.writeFileSync(gfile, "1|" + date());
}
rl.global = requests;
}
if (!fs.existsSync(mfile)) {
fs.writeFileSync(mfile, "1|" + date2());
} else {
requests = fs.readFileSync(mfile).toString().split("|")[0] - 1 + 1;
vdate = fs.readFileSync(mfile).toString().split("|")[1];
if (vdate === date2()) {
requests++;
if (requests >= 1990) {
cacheOnly = true;
rl.blocked = true;
}
fs.writeFileSync(mfile, requests + "|" + date2());
} else {
fs.writeFileSync(mfile, "1|" + date2());
}
rl.global = requests;
}
res.writeHead(200, { "Content-Type": "text/plain" });
text = encodeURI(query);
if (!fs.existsSync(cache)) fs.mkdirSync(cache);
ansfile = cache + "/answer_" + query.replaceAll(" ", "_").replaceAll("/", "_");
if (fs.existsSync(ansfile)) {
ds = "local";
data = fs.readFileSync(ansfile);
} else {
if (cacheOnly) {
res.end();
} else {
ds = "online";
try {
data = (await axios.get("https://api.wolframalpha.com/v1/result?appid=" + fs.readFileSync(wwwdata + "/../../data/wolfram.txt").toString() + "&i=" + text + "&units=metric&timeout=10")).data;
fs.writeFileSync(ansfile, data);
} catch (e) {
data = "";
}
}
}
%><%= data %>
|