diff --git a/docs/index.html b/docs/index.html index 8ecebcc5..18fdf082 100644 --- a/docs/index.html +++ b/docs/index.html @@ -718,34 +718,7 @@ label{display:block;font-size:12px;color:var(--dim);margin-bottom:4px;font-weigh .app-card:hover .app-card-arrow{opacity:1;transform:translateX(4px)} /* ═══ PAGE: Bandwidth Sharing (带宽共享) ═══ */ -#pg-bandwidth .bw-hero{text-align:center;padding:28px 0 20px} -#pg-bandwidth .bw-hero h2{font-size:1.4em;background:linear-gradient(135deg,var(--accent),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent} -#pg-bandwidth .bw-hero p{color:var(--dim);font-size:.9em;margin-top:6px} -#pg-bandwidth .bw-stats{display:flex;justify-content:space-around;margin:16px 0;gap:12px} -#pg-bandwidth .bw-stat{text-align:center;flex:1} -#pg-bandwidth .bw-stat .num{font-size:1.5em;font-weight:700;color:var(--accent);font-family:var(--m)} -#pg-bandwidth .bw-stat .label{font-size:.75em;color:var(--dim);margin-top:4px} -#pg-bandwidth .bw-card{background:var(--bg1);border-radius:var(--r);padding:20px;margin:12px 0;border:1px solid var(--border)} -#pg-bandwidth .bw-card h3{font-size:1em;color:var(--accent);margin-bottom:14px} -#pg-bandwidth .bw-input{width:100%;padding:12px 14px;background:var(--bg2);border:2px solid var(--border);border-radius:var(--rs);color:var(--text);font-size:1em;outline:none;transition:border-color .3s;font-family:var(--f)} -#pg-bandwidth .bw-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(138,180,248,.15)} -#pg-bandwidth .bw-input::placeholder{color:var(--dim);font-size:.85em} -#pg-bandwidth .bw-code-input{text-align:center;letter-spacing:8px;font-size:1.3em;font-family:var(--m)} -#pg-bandwidth .bw-code-input::placeholder{letter-spacing:0;font-size:.6em} -#pg-bandwidth .bw-btn{width:100%;padding:14px;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff;border:none;border-radius:var(--rs);font-size:1em;font-weight:600;cursor:pointer;transition:opacity .3s,transform .15s;margin-top:8px;font-family:var(--f)} -#pg-bandwidth .bw-btn:hover{opacity:.9} -#pg-bandwidth .bw-btn:active{transform:scale(.98)} -#pg-bandwidth .bw-btn:disabled{opacity:.5;cursor:not-allowed;transform:none} -#pg-bandwidth .bw-btn-outline{background:transparent;border:1px solid var(--accent);color:var(--accent)} -#pg-bandwidth .bw-btn-outline:hover{background:rgba(138,180,248,.1)} -#pg-bandwidth .bw-result{text-align:center;padding:14px;border-radius:var(--rs);margin-top:12px;display:none;font-size:.9em;line-height:1.6} -#pg-bandwidth .bw-result.ok{display:block;background:rgba(52,211,153,.1);color:var(--ok);border:1px solid rgba(52,211,153,.2)} -#pg-bandwidth .bw-result.err{display:block;background:rgba(248,113,113,.1);color:var(--err);border:1px solid rgba(248,113,113,.2)} -#pg-bandwidth .bw-info{background:var(--bg2);border-radius:var(--rs);padding:14px 16px;margin:10px 0;font-size:.85em;line-height:1.8;color:var(--dim);border-left:3px solid var(--accent)} -#pg-bandwidth .bw-consent{display:flex;align-items:flex-start;gap:10px;margin:14px 0;padding:12px 14px;background:var(--bg2);border-radius:var(--rs);border:1px solid var(--border);cursor:pointer;transition:border-color .3s} -#pg-bandwidth .bw-consent:hover{border-color:var(--accent)} -#pg-bandwidth .bw-consent input{margin-top:3px;width:18px;height:18px;accent-color:var(--accent);cursor:pointer;flex-shrink:0} -#pg-bandwidth .bw-consent span{color:var(--dim);font-size:.85em;line-height:1.7} + @@ -951,9 +924,9 @@ label{display:block;font-size:12px;color:var(--dim);margin-bottom:4px;font-weigh
⚡ 快速入口
-
+
🌊
-
带宽共享加速池
共享你的带宽 · 加速所有人
+
带宽共享加速池
请在用户仪表盘中操作
@@ -1202,61 +1175,8 @@ label{display:block;font-size:12px;color:var(--dim);margin-bottom:4px;font-weigh
- + -
-
- -
🌊 带宽共享
-
-
-
-
-

🌊 带宽共享加速池

-

共享你的带宽 · 加速所有人

-
- -
-
贡献者
-
活跃
-
总贡献(GB)
-
- -
-

📧 第一步 · 发送验证码

-
- -
- -
-
- -
-

🔑 第二步 · 输入验证码

-
- -
- - -
-
- -
- 💡 带宽共享说明 - ✅ 提供了验证码的用户 → 优先保障你的专属通道
- ✅ 你用不上的资源才会被共享 → 不抢你的带宽
- ✅ 随时可退出 → 你有完全的控制权
- ⚠️ 验证码15分钟内有效 · 一次性使用 -
- -
-

© 2026 光湖语言世界 · 国作登字-2026-A-00037559

-
-
-
@@ -3576,128 +3496,9 @@ offline = function(msg){ })(); /* ════════════════════════════════════════ - BANDWIDTH SHARING AGENT (带宽共享验证) - GitHub Pages 前端 → 后端API桥接 + BANDWIDTH SHARING (已迁移到用户仪表盘) + 验证码功能现在在 /dashboard/{token} 中 ════════════════════════════════════════ */ -var BW_API_BASE = 'https://guanghulab.online/api/proxy-v3'; - -function bwSendCode(){ - var email = document.getElementById('bwEmail').value.trim().toLowerCase(); - var btn = document.getElementById('bwSendCode'); - var result = document.getElementById('bwSendResult'); - - if(!email || email.indexOf('@') === -1){ - result.className = 'bw-result err'; - result.textContent = '请输入有效的邮箱地址'; - return; - } - - btn.disabled = true; - btn.textContent = '发送中...'; - result.className = 'bw-result'; - result.style.display = 'none'; - - fetch(BW_API_BASE + '/bandwidth-send-code', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({email: email}) - }).then(function(r){ return r.json(); }).then(function(data){ - btn.disabled = false; - btn.textContent = '发送验证码'; - result.className = 'bw-result ' + (data.success ? 'ok' : 'err'); - result.textContent = data.message || (data.success ? '验证码已发送' : '发送失败'); - - if(data.success){ - // Cooldown 60s - var cd = 60; - btn.disabled = true; - var timer = setInterval(function(){ - cd--; - btn.textContent = cd + 's 后可重发'; - if(cd <= 0){ - clearInterval(timer); - btn.disabled = false; - btn.textContent = '发送验证码'; - } - }, 1000); - } - }).catch(function(err){ - btn.disabled = false; - btn.textContent = '发送验证码'; - result.className = 'bw-result err'; - result.textContent = '网络错误,请检查网络后重试'; - }); -} - -function bwVerifyCode(){ - var email = document.getElementById('bwEmail').value.trim().toLowerCase(); - var code = document.getElementById('bwCode').value.trim(); - var consent = document.getElementById('bwConsent').checked; - var btn = document.getElementById('bwVerify'); - var result = document.getElementById('bwVerifyResult'); - - if(!email || email.indexOf('@') === -1){ - result.className = 'bw-result err'; - result.textContent = '请先在上方输入邮箱'; - return; - } - if(!code || code.length !== 6){ - result.className = 'bw-result err'; - result.textContent = '请输入6位验证码'; - return; - } - if(!consent){ - result.className = 'bw-result err'; - result.textContent = '请先勾选同意带宽共享协议'; - return; - } - - btn.disabled = true; - btn.textContent = '验证中...'; - result.className = 'bw-result'; - result.style.display = 'none'; - - fetch(BW_API_BASE + '/bandwidth-verify-code', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({email: email, code: code}) - }).then(function(r){ return r.json(); }).then(function(data){ - btn.disabled = false; - btn.textContent = '提交验证码'; - result.className = 'bw-result ' + (data.success ? 'ok' : 'err'); - result.textContent = data.message || (data.success ? '授权成功!' : '验证失败'); - if(data.success) bwLoadPoolStatus(); - }).catch(function(){ - btn.disabled = false; - btn.textContent = '提交验证码'; - result.className = 'bw-result err'; - result.textContent = '网络错误,请检查网络后重试'; - }); -} - -function bwLoadPoolStatus(){ - fetch(BW_API_BASE + '/bandwidth-pool-status').then(function(r){ - return r.json(); - }).then(function(data){ - var el1 = document.getElementById('bwContributors'); - var el2 = document.getElementById('bwActive'); - var el3 = document.getElementById('bwContributed'); - if(el1) el1.textContent = data.total_contributors || 0; - if(el2) el2.textContent = data.active_contributors || 0; - if(el3) el3.textContent = data.total_contributed_gb || 0; - }).catch(function(){ - /* Pool status unavailable - keep defaults */ - }); -} - -// Auto-load pool status when bandwidth page is shown -var _origGo = window.go; -if(typeof _origGo === 'function'){ - window.go = function(target){ - _origGo(target); - if(target === 'bandwidth') bwLoadPoolStatus(); - }; -} })(); diff --git a/server/proxy/service/subscription-server-v3.js b/server/proxy/service/subscription-server-v3.js index 4c6992b1..3f74bf1c 100644 --- a/server/proxy/service/subscription-server-v3.js +++ b/server/proxy/service/subscription-server-v3.js @@ -857,10 +857,152 @@ mode: direct
智能选路${nodes.length > 1 ? '✅ url-test' : '单节点'}
+
+

🌊 带宽共享加速

+

共享你的闲置带宽,加速所有人。系统优先保障你的专属通道。

+ +
+ +
+ + + +
+ +
+ + + + + +
+ + + `; @@ -1732,7 +1874,7 @@ async function submitCode(e) { // ═══════════════════════════════════════════════ // ∞+1 公开API: /bandwidth-send-code (无需token·邮箱验证码发送) - // 用户在GitHub Pages首页输入邮箱 → 调用此API发送验证码 + // 用户在仪表盘 /dashboard/{token} 中发送验证码 // 安全: 每个IP每小时最多3次 // ═══════════════════════════════════════════════ if (pathname === '/bandwidth-send-code' && req.method === 'POST') { @@ -1811,7 +1953,7 @@ async function submitCode(e) { // ═══════════════════════════════════════════════ // ∞+1 公开API: /bandwidth-verify-code (无需token·验证码校验+注册) - // 用户在GitHub Pages首页输入邮箱+验证码 → 调用此API完成授权 + // 用户在仪表盘 /dashboard/{token} 中输入验证码 → 调用此API完成授权 // ═══════════════════════════════════════════════ if (pathname === '/bandwidth-verify-code' && req.method === 'POST') { res.setHeader('Access-Control-Allow-Origin', '*'); @@ -1895,7 +2037,7 @@ async function submitCode(e) { // ═══════════════════════════════════════════════ // ∞+1 公开API: /bandwidth-pool-status (无需token·带宽池状态) - // GitHub Pages首页实时显示带宽池状态 + // 仪表盘实时显示带宽池状态 // ═══════════════════════════════════════════════ if (pathname === '/bandwidth-pool-status' && req.method === 'GET') { res.setHeader('Access-Control-Allow-Origin', '*');