ligbox-ops-platform/projects/ops-desk/api/app/email_relay_routes.py
Ligbox Spec Hub b03bb2c37c feat(desk): UI/API Spec 039-041 + deploy atómico e smoke GREEN
Commita governance, user-wizard, operational-feed e catálogo RBAC;
adiciona deploy-desk-full.sh, smoke-desk.sh e regra anti-deploy parcial;
documenta credencial VM112 @betinplace.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 13:32:15 +00:00

45 lines
1.4 KiB
Python

"""Rotas Email Relay VM122 — configuração visível no portal Infra."""
from __future__ import annotations
from pydantic import BaseModel, Field
from fastapi import APIRouter, Depends, HTTPException
from app import auth, email_relay
router = APIRouter(prefix="/api/v1/infra/email-relay", tags=["infra-email-relay"])
def _can_manage(user: auth.DeskUser) -> bool:
return user.role in ("super_admin", "devops")
def _can_view(user: auth.DeskUser) -> bool:
return user.role in ("super_admin", "devops", "developer")
class EmailRelayTestBody(BaseModel):
to: str = Field(min_length=3, max_length=254)
subject: str | None = Field(default=None, max_length=200)
@router.get("/status")
def email_relay_status(user: auth.DeskUser = Depends(auth.get_current_user)):
if not _can_view(user):
raise HTTPException(403, "permissão insuficiente")
return email_relay.build_status()
@router.get("/config")
def email_relay_config(user: auth.DeskUser = Depends(auth.get_current_user)):
if not _can_view(user):
raise HTTPException(403, "permissão insuficiente")
return email_relay.load_config()
@router.post("/test")
def email_relay_test(body: EmailRelayTestBody, user: auth.DeskUser = Depends(auth.get_current_user)):
if not _can_manage(user):
raise HTTPException(403, "permissão insuficiente")
return email_relay.send_test_email(body.to, body.subject)