e0ba384705
Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.auth.jwt_auth import get_current_user
|
|
from app.config import get_settings
|
|
|
|
router = APIRouter(prefix="/settings", tags=["settings"])
|
|
|
|
|
|
def _mask_secret(value: str, *, visible_tail: int = 4) -> str | None:
|
|
text = value.strip()
|
|
if not text:
|
|
return None
|
|
if len(text) <= visible_tail:
|
|
return "*" * len(text)
|
|
return f"{'*' * 8}…{text[-visible_tail:]}"
|
|
|
|
|
|
class TelegramSettingsResponse(BaseModel):
|
|
enabled: bool
|
|
configured: bool
|
|
chat_id_hint: str | None = None
|
|
bot_token_hint: str | None = None
|
|
min_severity: str
|
|
source: str = Field(default="env", description="env until UI persistence (notif-12)")
|
|
|
|
|
|
class NotificationSettingsResponse(BaseModel):
|
|
telegram: TelegramSettingsResponse
|
|
|
|
|
|
@router.get("/notifications", response_model=NotificationSettingsResponse)
|
|
def get_notification_settings(
|
|
_user: str = Depends(get_current_user),
|
|
) -> NotificationSettingsResponse:
|
|
settings = get_settings()
|
|
token = settings.telegram_bot_token.strip()
|
|
chat_id = settings.telegram_chat_id.strip()
|
|
configured = bool(token and chat_id)
|
|
return NotificationSettingsResponse(
|
|
telegram=TelegramSettingsResponse(
|
|
enabled=bool(settings.telegram_enabled and configured),
|
|
configured=configured,
|
|
chat_id_hint=_mask_secret(chat_id),
|
|
bot_token_hint=_mask_secret(token),
|
|
min_severity=settings.telegram_min_severity,
|
|
source="env",
|
|
)
|
|
)
|