Skip to content

Commit 2091d32

Browse files
authored
修复登录bug
1 parent d169040 commit 2091d32

File tree

1 file changed

+76
-22
lines changed

1 file changed

+76
-22
lines changed

_worker.js

Lines changed: 76 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,14 @@ export default {
4949
const kvCheckResponse = await check_kv(env);
5050
let kvData = {};
5151
if (!kvCheckResponse) {
52-
const kvData = await get_kv(env) || {};
53-
log(`[fetch]--> kv_id = ${kvData.kv_id}, kv_pDomain = ${kvData.kv_pDomain}, kv_p64Domain = ${kvData.kv_p64Domain}`);
52+
kvData = await get_kv(env) || {};
53+
log(`[fetch]--> kv_id = ${kvData.kv_id}, kv_pDomain = ${JSON.stringify(kvData.pDomain)}, kv_p64Domain = ${JSON.stringify(kvData.kv_p64Domain)}`);
5454
}
5555

5656
const url = new URL(request.url);
5757
enableLog = url.searchParams.get('ENABLE_LOG') || ENABLE_LOG || enableLog;
5858
id = (kvData.kv_id || ID || id).toLowerCase();
59+
log(`[fetch]--> id = ${id}`);
5960

6061
paddr = url.searchParams.get('PADDR') || PADDR || paddr;
6162
if (paddr) {
@@ -64,10 +65,12 @@ export default {
6465
pnum = port || pnum;
6566
}
6667
pDomain = kvData.kv_pDomain || pDomain;
68+
log(`[fetch]--> pDomain = ${JSON.stringify(pDomain)}`);
6769

6870
p64 = url.searchParams.get('P64') || P64 || p64;
6971
p64Prefix = url.searchParams.get('P64PREFIX') || P64PREFIX || p64Prefix;
7072
p64Domain = kvData.kv_p64Domain || p64Domain;
73+
log(`[fetch]--> p64Domain = ${JSON.stringify(p64Domain)}`);
7174

7275
s5 = url.searchParams.get('S5') || S5 || s5;
7376
parsedS5 = await requestParserFromUrl(s5, url);
@@ -237,31 +240,83 @@ function xorDe(b64, key) {
237240
return decoder.decode(out);
238241
}
239242

240-
async function getDomainToRouteX(addressRemote, portRemote, s5Enable, p64Flag = false) {
241-
log(`[getDomainToRouteX]--> paddr = ${paddr}, p64Prefix = ${p64Prefix}, addressRemote = ${addressRemote}, p64 = ${p64}`);
243+
async function getDomainToRouteX(addressRemote, portRemote, s5Enable, p64Flag = false, pDomain, p64Domain) {
242244
let finalTargetHost = addressRemote;
243245
let finalTargetPort = portRemote;
244-
if (s5Enable) {
245-
finalTargetHost = addressRemote;
246-
finalTargetPort = portRemote;
247-
} else if (pDomain.some(domain => matchesDomainPattern(addressRemote, domain))) {
248-
finalTargetHost = paddr;
249-
finalTargetPort = pnum || portRemote;
250-
} else if (p64Domain.some(domain => matchesDomainPattern(addressRemote, domain)) || (p64Flag && p64)) {
251-
try {
252-
finalTargetHost = await resolveDomainToRouteX(addressRemote);
246+
try {
247+
log(`[getDomainToRouteX]--> paddr=${paddr}, p64Prefix=${p64Prefix}, addressRemote=${addressRemote}, p64=${p64}`);
248+
log(`[getDomainToRouteX]--> pDomain=${JSON.stringify(pDomain)}, p64Domain=${JSON.stringify(p64Domain)}`);
249+
250+
const safeMatch = (domains, target) => {
251+
try {
252+
return Array.isArray(domains) && domains.some(domain => matchesDomainPattern(target, domain));
253+
} catch (e) {
254+
log(`[error]--> matchesDomainPattern failed: ${e.message}`);
255+
return false;
256+
}
257+
};
258+
259+
const resultDomain = safeMatch(pDomain, addressRemote);
260+
const result64Domain = safeMatch(p64Domain, addressRemote);
261+
log(`[getDomainToRouteX]--> match pDomain=${resultDomain}, match p64Domain=${result64Domain}, p64Flag=${p64Flag}`);
262+
263+
if (s5Enable) {
264+
log(`[getDomainToRouteX]--> s5Enable=true, use remote directly`);
265+
} else if (resultDomain) {
266+
finalTargetHost = paddr;
267+
finalTargetPort = pnum || portRemote;
268+
log(`[getDomainToRouteX]--> Matched pDomain, use paddr=${finalTargetHost}, port=${finalTargetPort}`);
269+
} else if (result64Domain || (p64Flag && p64)) {
270+
try {
271+
finalTargetHost = await resolveDomainToRouteX(addressRemote);
272+
finalTargetPort = portRemote;
273+
log(`[getDomainToRouteX]--> Resolved p64Domain via resolveDomainToRouteX: ${finalTargetHost}`);
274+
} catch (err) {
275+
log(`[retry]--> resolveDomainToRouteX failed: ${err.message}`);
276+
finalTargetHost = paddr || addressRemote;
277+
finalTargetPort = pnum || portRemote;
278+
}
279+
} else if (p64Flag) {
280+
finalTargetHost = paddr || addressRemote;
253281
finalTargetPort = portRemote;
254-
} catch (err) {
255-
log(`[retry]--> resolveDomainToRouteX failed: ${err.message}`);
282+
log(`[getDomainToRouteX]--> fallback by p64Flag, host=${finalTargetHost}, port=${finalTargetPort}`);
283+
}
284+
285+
log(`[getDomainToRouteX]--> Final target: ${finalTargetHost}:${finalTargetPort}`);
286+
return { finalTargetHost, finalTargetPort };
287+
} catch (err) {
288+
log(`[fatal]--> getDomainToRouteX failed: ${err.message}`);
289+
if (p64Flag) {
256290
finalTargetHost = paddr || addressRemote;
257-
finalTargetPort = pnum || portRemote;
291+
finalTargetPort = portRemote;
292+
log(`[fatal-fallback]--> fallback by p64Flag, host=${finalTargetHost}, port=${finalTargetPort}`);
258293
}
259-
} else if (p64Flag) {
260-
finalTargetHost = paddr || addressRemote;
261-
finalTargetPort = portRemote;
294+
return { finalTargetHost, finalTargetPort };
262295
}
263-
log(`[getDomainToRouteX]--> Using finalTargetHost: ${finalTargetHost}, finalTargetPort: ${finalTargetPort}`);
264-
return { finalTargetHost, finalTargetPort };
296+
}
297+
298+
function matchesDomainPattern(hostname, pattern) {
299+
if (!hostname || !pattern) return false;
300+
301+
hostname = hostname.toLowerCase();
302+
pattern = pattern.toLowerCase();
303+
const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
304+
const ipv6Regex = /^\[?([a-f0-9:]+)\]?$/i;
305+
if (ipv4Regex.test(hostname) || ipv6Regex.test(hostname)) {
306+
return false;
307+
}
308+
309+
const hostParts = hostname.split('.');
310+
const patternParts = pattern.split('.');
311+
312+
if (hostParts.length < patternParts.length) return false;
313+
314+
for (let i = 1; i <= patternParts.length; i++) {
315+
if (hostParts[hostParts.length - i] !== patternParts[patternParts.length - i]) {
316+
return false;
317+
}
318+
}
319+
return true;
265320
}
266321

267322
async function resolveDomainToRouteX(domain) {
@@ -1702,4 +1757,3 @@ function renderPage({ base64Title, suffix = '', heading, bodyContent }) {
17021757
</body>
17031758
</html>`;
17041759
}
1705-

0 commit comments

Comments
 (0)