feat(auth): add admin bootstrap and username login

Initialize admin bootstrap settings during startup, persist username support in auth flows, and align frontend auth requests with local API behavior.
This commit is contained in:
2026-03-24 15:07:19 +08:00
parent 6f594631e9
commit a3aa15d339
13 changed files with 787 additions and 27 deletions

View File

@@ -3,15 +3,15 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
from typing import Literal
BASE_DIR = Path(__file__).resolve().parent.parent
ENV_FILE = BASE_DIR / ".env"
REPO_ROOT = Path(__file__).resolve().parents[2]
ENV_FILE = REPO_ROOT / ".env"
def _resolve_path(value: str) -> str:
path = Path(value)
if path.is_absolute():
return str(path)
return str((BASE_DIR / path).resolve())
return str((REPO_ROOT / path).resolve())
class Settings(BaseSettings):
@@ -31,10 +31,10 @@ class Settings(BaseSettings):
# === 数据库 ===
DATABASE_URL: str = "sqlite+aiosqlite:///./data/jarvis.db"
DATA_DIR: str = "./data"
DATA_DIR: str = "data"
# === ChromaDB ===
CHROMA_PERSIST_DIR: str = "./data/chroma"
CHROMA_PERSIST_DIR: str = "data/chroma"
# === LLM 配置 ===
# 支持: openai / claude / ollama / deepseek / custom
@@ -63,8 +63,15 @@ class Settings(BaseSettings):
CORS_ORIGINS: list[str] = ["http://localhost:5173", "http://localhost:3000"]
# === 文件上传 ===
UPLOAD_DIR: str = "./data/uploads"
UPLOAD_DIR: str = "data/uploads"
MAX_UPLOAD_SIZE: int = 50 * 1024 * 1024
MINERU_LANGUAGE: Literal["ch", "en"] = "ch"
# === 管理员 bootstrap ===
ADMIN: str = ""
ADMIN_EMAIL: str = ""
ADMIN_PASSWORD: str = ""
ADMIN_FULL_NAME: str = "Administrator"
# === 向量化 ===
EMBEDDING_MODEL: str = "text-embedding-3-small"