Update server/index.js
Browse files- server/index.js +13 -3
server/index.js
CHANGED
|
@@ -145,6 +145,18 @@ function respondTextUploadTooLarge(res) {
|
|
| 145 |
}
|
| 146 |
|
| 147 |
async function verifyTurnstileToken(token, remoteIp) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
const secret = process.env.TURNSTILE_SECRET_KEY;
|
| 149 |
if (!token || !secret) throw new Error('Missing token or server not configured');
|
| 150 |
|
|
@@ -154,7 +166,7 @@ async function verifyTurnstileToken(token, remoteIp) {
|
|
| 154 |
if (remoteIp) params.append('remoteip', remoteIp);
|
| 155 |
|
| 156 |
const controller = new AbortController();
|
| 157 |
-
const timeout = setTimeout(() => controller.abort(), 30000);
|
| 158 |
|
| 159 |
try {
|
| 160 |
const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
|
|
@@ -169,8 +181,6 @@ async function verifyTurnstileToken(token, remoteIp) {
|
|
| 169 |
}
|
| 170 |
}
|
| 171 |
|
| 172 |
-
|
| 173 |
-
|
| 174 |
function loadStoredSHA() {
|
| 175 |
try {
|
| 176 |
if (!fs.existsSync(DATA_DIR)) fs.mkdirSync(DATA_DIR, { recursive: true });
|
|
|
|
| 145 |
}
|
| 146 |
|
| 147 |
async function verifyTurnstileToken(token, remoteIp) {
|
| 148 |
+
for (let attempt = 1; attempt <= 2; attempt++) {
|
| 149 |
+
try {
|
| 150 |
+
return await verifyOnce(token, remoteIp);
|
| 151 |
+
} catch (e) {
|
| 152 |
+
const isTimeout = e?.name === 'AbortError' || e?.cause?.code === 'UND_ERR_CONNECT_TIMEOUT';
|
| 153 |
+
if (!isTimeout || attempt === 2) throw e;
|
| 154 |
+
await new Promise(r => setTimeout(r, 500 * attempt));
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
async function verifyOnce(token, remoteIp) {
|
| 160 |
const secret = process.env.TURNSTILE_SECRET_KEY;
|
| 161 |
if (!token || !secret) throw new Error('Missing token or server not configured');
|
| 162 |
|
|
|
|
| 166 |
if (remoteIp) params.append('remoteip', remoteIp);
|
| 167 |
|
| 168 |
const controller = new AbortController();
|
| 169 |
+
const timeout = setTimeout(() => controller.abort(), 30000);
|
| 170 |
|
| 171 |
try {
|
| 172 |
const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
|
|
|
|
| 181 |
}
|
| 182 |
}
|
| 183 |
|
|
|
|
|
|
|
| 184 |
function loadStoredSHA() {
|
| 185 |
try {
|
| 186 |
if (!fs.existsSync(DATA_DIR)) fs.mkdirSync(DATA_DIR, { recursive: true });
|