()
| 1349 | } |
| 1350 | |
| 1351 | async function processAntigravityCallbackUrl() { |
| 1352 | const callbackUrl = document.getElementById('antigravityCallbackUrlInput').value.trim(); |
| 1353 | |
| 1354 | if (!callbackUrl) { |
| 1355 | showStatus('请输入回调URL', 'error'); |
| 1356 | return; |
| 1357 | } |
| 1358 | |
| 1359 | if (!callbackUrl.startsWith('http://') && !callbackUrl.startsWith('https://')) { |
| 1360 | showStatus('请输入有效的URL(以http://或https://开头)', 'error'); |
| 1361 | return; |
| 1362 | } |
| 1363 | |
| 1364 | if (!callbackUrl.includes('code=') || !callbackUrl.includes('state=')) { |
| 1365 | showStatus('❌ 这不是有效的回调URL!请确保包含code和state参数', 'error'); |
| 1366 | return; |
| 1367 | } |
| 1368 | |
| 1369 | showStatus('正在从回调URL获取 Antigravity 凭证...', 'info'); |
| 1370 | |
| 1371 | try { |
| 1372 | const response = await fetch('./auth/callback-url', { |
| 1373 | method: 'POST', |
| 1374 | headers: getAuthHeaders(), |
| 1375 | body: JSON.stringify({ callback_url: callbackUrl, mode: 'antigravity' }) |
| 1376 | }); |
| 1377 | |
| 1378 | const result = await response.json(); |
| 1379 | |
| 1380 | if (result.credentials) { |
| 1381 | showStatus(result.message || '从回调URL获取 Antigravity 凭证成功!', 'success'); |
| 1382 | document.getElementById('antigravityCredsContent').textContent = JSON.stringify(result.credentials, null, 2); |
| 1383 | document.getElementById('antigravityCredsSection').classList.remove('hidden'); |
| 1384 | } else { |
| 1385 | showStatus(result.error || '从回调URL获取 Antigravity 凭证失败', 'error'); |
| 1386 | } |
| 1387 | |
| 1388 | document.getElementById('antigravityCallbackUrlInput').value = ''; |
| 1389 | } catch (error) { |
| 1390 | showStatus(`从回调URL获取 Antigravity 凭证失败: ${error.message}`, 'error'); |
| 1391 | } |
| 1392 | } |
| 1393 | |
| 1394 | // ===================================================================== |
| 1395 | // 全局兼容函数(供HTML调用) |
nothing calls this directly
no test coverage detected