import http from 'http'; import { URL } from 'url'; import path from 'path'; import { fileURLToPath } from 'url'; import log from '../src/utils/logger.js'; import tokenManager from '../src/auth/token_manager.js'; import oauthManager from '../src/auth/oauth_manager.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const ACCOUNTS_FILE = path.join(__dirname, '..', 'data', 'accounts.json'); const server = http.createServer((req, res) => { const port = server.address().port; const url = new URL(req.url, `http://localhost:${port}`); if (url.pathname === '/oauth-callback') { const code = url.searchParams.get('code'); const error = url.searchParams.get('error'); if (code) { log.info('收到授权码,正在交换 Token...'); oauthManager.authenticate(code, port).then(account => { const result = tokenManager.addToken(account); if (result.success) { log.info(`Token 已保存到 ${ACCOUNTS_FILE}`); if (!account.hasQuota) { log.warn('该账号无资格,已自动使用随机ProjectId'); } } else { log.error('保存 Token 失败:', result.message); } const statusMsg = account.hasQuota ? '' : '

⚠️ 该账号无资格,已自动使用随机ProjectId

'; res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(`

授权成功!

Token 已保存,可以关闭此页面。

${statusMsg}`); setTimeout(() => server.close(), 1000); }).catch(err => { log.error('认证失败:', err.message); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end('

认证失败

查看控制台错误信息

'); setTimeout(() => server.close(), 1000); }); } else { log.error('授权失败:', error || '未收到授权码'); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end('

授权失败

'); setTimeout(() => server.close(), 1000); } } else { res.writeHead(404); res.end('Not Found'); } }); server.listen(0, () => { const port = server.address().port; const authUrl = oauthManager.generateAuthUrl(port); log.info(`服务器运行在 http://localhost:${port}`); log.info('请在浏览器中打开以下链接进行登录:'); console.log(`\n${authUrl}\n`); log.info('等待授权回调...'); });