feat: SAC Telegram settings view, notify_problem severity gate, exclusive docs

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
PTah
2026-05-29 15:57:35 +10:00
parent 117390cbca
commit e0ba384705
11 changed files with 291 additions and 9 deletions
+49
View File
@@ -0,0 +1,49 @@
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",
)
)