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", ) )