Admin login - returns session token (NOT API key)
(request: LoginRequest, response: Response)
| 723 | |
| 724 | @router.post("/api/admin/login") |
| 725 | async def admin_login(request: LoginRequest, response: Response): |
| 726 | """Admin login - returns session token (NOT API key)""" |
| 727 | admin_config = await db.get_admin_config() |
| 728 | |
| 729 | if not AuthManager.verify_admin(request.username, request.password): |
| 730 | raise HTTPException(status_code=401, detail="Invalid credentials") |
| 731 | |
| 732 | # Generate independent session token |
| 733 | session_token = f"admin-{secrets.token_urlsafe(32)}" |
| 734 | |
| 735 | # Store in active tokens |
| 736 | active_admin_tokens.add(session_token) |
| 737 | |
| 738 | response.set_cookie( |
| 739 | key=ADMIN_SESSION_COOKIE_NAME, |
| 740 | value=session_token, |
| 741 | httponly=True, |
| 742 | samesite="lax", |
| 743 | secure=False, |
| 744 | path="/", |
| 745 | ) |
| 746 | |
| 747 | return { |
| 748 | "success": True, |
| 749 | "token": session_token, # Session token (NOT API key) |
| 750 | "username": admin_config.username |
| 751 | } |
| 752 | |
| 753 | |
| 754 | @router.post("/api/admin/logout") |
no test coverage detected