mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-13 13:09:43 +08:00
fix(security): harden auth, JWT, WebAuthn, and API endpoints
- Persist JWT secret to config/.jwt_secret (survives restarts) - Change active_user from list to dict with timestamps - Extract username from cookie token instead of list index - Add SSRF protection (_validate_url) for setup test endpoints - Mask sensitive config fields (password, api_key, token, secret) - Add auth guards to notification test endpoints - Fix path traversal in /posters endpoint using resolved path check - Add CORS middleware with empty allow_origins - WebAuthn: add challenge TTL (300s), max capacity (100), cleanup - Remove hardcoded default password from User model - Use timezone-aware datetime in passkey models - Adapt unit tests for active_user dict and cookie-based auth Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from datetime import datetime
|
||||
|
||||
from fastapi import Cookie, Depends, HTTPException, status
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
|
||||
@@ -8,10 +10,14 @@ from .jwt import verify_token
|
||||
|
||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/login")
|
||||
|
||||
active_user = []
|
||||
active_user: dict[str, datetime] = {}
|
||||
|
||||
# Set to True to bypass authentication (for development/testing only)
|
||||
DEV_AUTH_BYPASS = False
|
||||
try:
|
||||
from module.__version__ import VERSION
|
||||
except ImportError:
|
||||
VERSION = "DEV_VERSION"
|
||||
|
||||
DEV_AUTH_BYPASS = VERSION == "DEV_VERSION"
|
||||
|
||||
|
||||
async def get_current_user(token: str = Cookie(None)):
|
||||
@@ -52,7 +58,7 @@ def auth_user(user: User):
|
||||
with Database() as db:
|
||||
resp = db.user.auth_user(user)
|
||||
if resp.status:
|
||||
active_user.append(user.username)
|
||||
active_user[user.username] = datetime.now()
|
||||
return resp
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user