添加 Token
(request: Request)
| 628 | |
| 629 | @router.post("/tokens/add") |
| 630 | async def add_tokens(request: Request): |
| 631 | """添加 Token""" |
| 632 | from app.services.token_dao import get_token_dao |
| 633 | from app.utils.token_pool import get_token_pool |
| 634 | |
| 635 | form_data = await request.form() |
| 636 | single_token = form_data.get("single_token", "").strip() |
| 637 | bulk_tokens = form_data.get("bulk_tokens", "").strip() |
| 638 | |
| 639 | dao = get_token_dao() |
| 640 | added_count = 0 |
| 641 | failed_count = 0 |
| 642 | |
| 643 | # 添加单个 Token(带验证) |
| 644 | if single_token: |
| 645 | token_id = await dao.add_token( |
| 646 | DEFAULT_TOKEN_NAMESPACE, |
| 647 | single_token, |
| 648 | validate=True, |
| 649 | ) |
| 650 | if token_id: |
| 651 | added_count += 1 |
| 652 | else: |
| 653 | failed_count += 1 |
| 654 | |
| 655 | # 批量添加 Token(带验证) |
| 656 | if bulk_tokens: |
| 657 | # 支持换行和逗号分隔 |
| 658 | tokens = [] |
| 659 | for line in bulk_tokens.split('\n'): |
| 660 | line = line.strip() |
| 661 | if ',' in line: |
| 662 | tokens.extend([t.strip() for t in line.split(',') if t.strip()]) |
| 663 | elif line: |
| 664 | tokens.append(line) |
| 665 | |
| 666 | success, failed = await dao.bulk_add_tokens( |
| 667 | DEFAULT_TOKEN_NAMESPACE, |
| 668 | tokens, |
| 669 | validate=True, |
| 670 | ) |
| 671 | added_count += success |
| 672 | failed_count += failed |
| 673 | |
| 674 | # 同步 Token 池状态(如果有新增成功的 Token) |
| 675 | if added_count > 0: |
| 676 | pool = get_token_pool() |
| 677 | if pool: |
| 678 | await pool.sync_from_database(DEFAULT_TOKEN_NAMESPACE) |
| 679 | logger.info(f"✅ Token 池已同步,新增 {added_count} 个 Token") |
| 680 | |
| 681 | # 生成响应 |
| 682 | if added_count > 0 and failed_count == 0: |
| 683 | return HTMLResponse(f""" |
| 684 | <div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative" role="alert"> |
| 685 | <strong class="font-bold">成功!</strong> |
| 686 | <span class="block sm:inline">已添加 {added_count} 个有效 Token</span> |
| 687 | </div> |
nothing calls this directly
no test coverage detected