|
1179 | 1179 | } |
1180 | 1180 | if (url.pathname.includes('/sub')) { |
1181 | 1181 | const pathParts = url.pathname.split('/'); |
1182 | | - // 允许通过URL参数自定义UUID和Host |
1183 | | - if (url.searchParams.has('uuid') && url.searchParams.has('host')) { |
1184 | | - return await handleSubscriptionRequest(request, url.searchParams.get('uuid'), url); |
1185 | | - } |
1186 | | - |
1187 | 1182 | if (pathParts.length === 2 && pathParts[1] === 'sub') { |
1188 | 1183 | const user = pathParts[0].substring(1); |
1189 | 1184 | if (isValidFormat(user)) { |
|
1220 | 1215 | async function handleSubscriptionRequest(request, user, url = null) { |
1221 | 1216 | if (!url) url = new URL(request.url); |
1222 | 1217 |
|
1223 | | - // 优先使用URL参数中的值 |
1224 | | - if (url.searchParams.has('uuid')) { |
1225 | | - user = url.searchParams.get('uuid'); |
1226 | | - } |
1227 | | - |
1228 | 1218 | const finalLinks = []; |
1229 | | - const workerDomain = url.searchParams.get('host') || url.hostname; |
| 1219 | + const workerDomain = url.hostname; |
1230 | 1220 | const target = url.searchParams.get('target') || 'base64'; |
1231 | 1221 |
|
1232 | 1222 | async function addNodesFromList(list) { |
|
1877 | 1867 | } |
1878 | 1868 |
|
1879 | 1869 | async function handleSubscriptionPage(request, user = null) { |
1880 | | - const url = new URL(request.url); |
1881 | | - // 如果 URL 包含 host 参数,优先使用 URL 参数中的 UUID |
1882 | | - if (url.searchParams.has('host') && url.searchParams.has('uuid')) { |
1883 | | - user = url.searchParams.get('uuid'); |
1884 | | - } else if (!user) { |
1885 | | - user = at; |
1886 | | - } |
| 1870 | + if (!user) user = at; |
1887 | 1871 |
|
| 1872 | + const url = new URL(request.url); |
1888 | 1873 | // 优先检查Cookie中的语言设置 |
1889 | 1874 | const cookieHeader = request.headers.get('Cookie') || ''; |
1890 | 1875 | let langFromCookie = null; |
|
1993 | 1978 | KR: '🇰🇷 韩国', DE: '🇩🇪 德国', SE: '🇸🇪 瑞典', NL: '🇳🇱 荷兰', |
1994 | 1979 | FI: '🇫🇮 芬兰', GB: '🇬🇧 英国' |
1995 | 1980 | }, |
1996 | | - terminal: '终端 v2.7', |
| 1981 | + terminal: '终端 v2.6', |
1997 | 1982 | githubProject: 'GitHub 项目', |
1998 | 1983 | autoDetectClient: '自动识别', |
1999 | 1984 | selectionLogicText: '同地区 → 邻近地区 → 其他地区', |
|
2100 | 2085 | KR: '🇰🇷 کره جنوبی', DE: '🇩🇪 آلمان', SE: '🇸🇪 سوئد', NL: '🇳🇱 هلند', |
2101 | 2086 | FI: '🇫🇮 فنلاند', GB: '🇬🇧 بریتانیا' |
2102 | 2087 | }, |
2103 | | - terminal: 'ترمینال v2.7', |
| 2088 | + terminal: 'ترمینال v2.5.0', |
2104 | 2089 | githubProject: 'پروژه GitHub', |
2105 | 2090 | autoDetectClient: 'تشخیص خودکار', |
2106 | 2091 | selectionLogicText: 'هممنطقه → منطقه مجاور → سایر مناطق', |
|
2393 | 2378 | <div id="selectionLogic" style="margin: 8px 0; color: #00aa00; font-family: 'Courier New', monospace; font-size: 0.9rem; text-shadow: 0 0 3px #00aa00;">${t.selectionLogic}${t.selectionLogicText}</div> |
2394 | 2379 | </div> |
2395 | 2380 | </div> |
2396 | | - |
2397 | | - <div class="card"> |
2398 | | - <h2 class="card-title">${t.customSubscription}</h2> |
2399 | | - <div style="margin-bottom: 15px;"> |
2400 | | - <p style="color: #00aa00; margin-bottom: 10px; font-size: 0.9rem;">${t.customSubscriptionHint}</p> |
2401 | | - <label style="color: #00ff00; display: block; margin-bottom: 8px; font-weight: bold; text-shadow: 0 0 3px #00ff00;">${t.customUUID}</label> |
2402 | | - <div style="display: flex; gap: 10px;"> |
2403 | | - <input type="text" id="custom-uuid" style="flex: 1; padding: 12px; background: rgba(0, 0, 0, 0.8); border: 2px solid #00ff00; color: #00ff00; font-family: 'Courier New', monospace; font-size: 14px;" placeholder="UUID"> |
2404 | | - <button onclick="generateUUID()" style="background: rgba(0, 255, 0, 0.15); border: 2px solid #00ff00; padding: 12px 20px; color: #00ff00; cursor: pointer; font-weight: bold;">${t.randomUUID}</button> |
2405 | | - </div> |
2406 | | - <small style="color: #00aa00; font-size: 0.85rem;">${t.customUUIDHint}</small> |
2407 | | - </div> |
2408 | | - <div style="margin-bottom: 15px;"> |
2409 | | - <label style="color: #00ff00; display: block; margin-bottom: 8px; font-weight: bold; text-shadow: 0 0 3px #00ff00;">${t.customHost}</label> |
2410 | | - <input type="text" id="custom-host" style="width: 100%; padding: 12px; background: rgba(0, 0, 0, 0.8); border: 2px solid #00ff00; color: #00ff00; font-family: 'Courier New', monospace; font-size: 14px;" placeholder="${t.customHostPlaceholder}"> |
2411 | | - <small style="color: #00aa00; font-size: 0.85rem;">${t.customHostHint}</small> |
2412 | | - </div> |
2413 | | - <button onclick="generateSubLink()" style="width: 100%; background: rgba(0, 255, 0, 0.15); border: 2px solid #00ff00; padding: 12px; color: #00ff00; font-family: 'Courier New', monospace; font-weight: bold; cursor: pointer; margin-bottom: 10px; text-shadow: 0 0 8px #00ff00; transition: all 0.4s ease;">${t.generateLink}</button> |
2414 | | - <p style="color: #00aa00; font-size: 0.85rem; text-align: center;">${t.accessNewPanel}</p> |
2415 | | - </div> |
2416 | | - </div> |
2417 | 2381 | <div class="card" id="configCard" style="display: none;"> |
2418 | 2382 | <h2 class="card-title">${t.configManagement}</h2> |
2419 | 2383 | <div id="kvStatus" style="margin-bottom: 20px; padding: 10px; background: rgba(0, 20, 0, 0.8); border: 1px solid #00ff00; color: #00ff00;"> |
|
3189 | 3153 | kvCheckFailed: '⚠️ KV存储检测失败', |
3190 | 3154 | kvCheckFailedFormat: 'KV存储检测失败: 响应格式错误', |
3191 | 3155 | kvCheckFailedStatus: 'KV存储检测失败 - 状态码: ', |
3192 | | - kvCheckFailedError: 'KV存储检测失败 - 错误: ', |
3193 | | - customSubscription: '自选优选订阅', |
3194 | | - customUUID: '自定义UUID:', |
3195 | | - randomUUID: '随机生成', |
3196 | | - customHost: '优选域名 (Host):', |
3197 | | - customHostPlaceholder: '例如: cdn.example.com', |
3198 | | - generateLink: '访问新订阅面板', |
3199 | | - fillRequired: '请填写 UUID 和 域名', |
3200 | | - customSubscriptionHint: '生成临时订阅链接,用于访问包含特定优选域名的订阅面板。', |
3201 | | - customUUIDHint: 'UUID:您的用户ID,用于验证身份。', |
3202 | | - customHostHint: '优选域名 (Host):您的 Cloudflare 优选域名/IP。', |
3203 | | - accessNewPanel: '点击访问后,将跳转到带有新参数的面板,您可以直接在其中使用一键导入功能。' |
| 3156 | + kvCheckFailedError: 'KV存储检测失败 - 错误: ' |
3204 | 3157 | }, |
3205 | 3158 | fa: { |
3206 | 3159 | kvDisabled: '⚠️ ذخیرهسازی KV فعال نیست یا پیکربندی نشده است', |
|
3210 | 3163 | kvCheckFailed: '⚠️ بررسی ذخیرهسازی KV ناموفق', |
3211 | 3164 | kvCheckFailedFormat: 'بررسی ذخیرهسازی KV ناموفق: خطای فرمت پاسخ', |
3212 | 3165 | kvCheckFailedStatus: 'بررسی ذخیرهسازی KV ناموفق - کد وضعیت: ', |
3213 | | - kvCheckFailedError: 'بررسی ذخیرهسازی KV ناموفق - خطا: ', |
3214 | | - customSubscription: 'اشتراک سفارشی', |
3215 | | - customUUID: 'UUID سفارشی:', |
3216 | | - randomUUID: 'تولید تصادفی', |
3217 | | - customHost: 'دامنه ترجیحی (Host):', |
3218 | | - customHostPlaceholder: 'مثال: cdn.example.com', |
3219 | | - generateLink: 'دسترسی به پنل اشتراک جدید', |
3220 | | - fillRequired: 'لطفا UUID و دامنه را پر کنید', |
3221 | | - customSubscriptionHint: 'ایجاد لینک اشتراک موقت برای دسترسی به پنل اشتراک با دامنه ترجیحی خاص.', |
3222 | | - customUUIDHint: 'UUID: شناسه کاربری شما برای احراز هویت.', |
3223 | | - customHostHint: 'دامنه ترجیحی (Host): دامنه/IP ترجیحی Cloudflare شما.', |
3224 | | - accessNewPanel: 'پس از کلیک برای دسترسی، به پنل با پارامترهای جدید هدایت خواهید شد، جایی که میتوانید مستقیماً از ویژگی وارد کردن با یک کلیک استفاده کنید.' |
| 3166 | + kvCheckFailedError: 'بررسی ذخیرهسازی KV ناموفق - خطا: ' |
3225 | 3167 | } |
3226 | 3168 | }; |
3227 | 3169 |
|
|
3540 | 3482 | } |
3541 | 3483 | } |
3542 | 3484 | } |
3543 | | - |
3544 | | - function generateUUID() { |
3545 | | - var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { |
3546 | | - var r = Math.random() * 16 | 0; |
3547 | | - var v = c == 'x' ? r : (r & 0x3 | 0x8); |
3548 | | - return v.toString(16); |
3549 | | - }); |
3550 | | - document.getElementById('custom-uuid').value = uuid; |
3551 | | - } |
3552 | | - |
3553 | | - function generateSubLink() { |
3554 | | - var uuid = document.getElementById('custom-uuid').value.trim(); |
3555 | | - var host = document.getElementById('custom-host').value.trim(); |
3556 | | - |
3557 | | - if (!uuid || !host) { |
3558 | | - alert(t.fillRequired); |
3559 | | - return; |
3560 | | - } |
3561 | | - |
3562 | | - var currentPath = window.location.pathname; |
3563 | | - var currentUrl = window.location.origin; |
3564 | | - var newPanelUrl = new URL(currentUrl + currentPath); |
3565 | | - newPanelUrl.searchParams.set('uuid', uuid); |
3566 | | - newPanelUrl.searchParams.set('host', host); |
3567 | | - |
3568 | | - // 跳转到带有新参数的面板页面 |
3569 | | - window.location.href = newPanelUrl.toString(); |
3570 | | - } |
3571 | | - |
3572 | 3485 |
|
3573 | 3486 | document.addEventListener('DOMContentLoaded', function() { |
3574 | 3487 | createMatrixRain(); |
|
0 commit comments