""" BAN YARO — Öffentliches Kontaktformular (kein Login erforderlich) Für Impressum-Kontaktpflicht nach § 5 DDG. """ from fastapi import APIRouter, Request from pydantic import BaseModel, EmailStr, Field from typing import Annotated from mailer import send_email, email_html from ratelimit import check as rl_check router = APIRouter() CONTACT_MAIL = "hallo@banyaro.app" class ContactIn(BaseModel): name: Annotated[str, Field(min_length=2, max_length=100)] email: EmailStr subject: Annotated[str, Field(min_length=3, max_length=150)] message: Annotated[str, Field(min_length=10, max_length=3000)] @router.post("") async def submit_contact(payload: ContactIn, request: Request): rl_check(request, max_requests=3, window_seconds=3600, key=f"contact_{payload.email}") body = f"""

Neue Kontaktanfrage über das Impressum-Formular:

Name {payload.name}
E-Mail {payload.email}
Betreff {payload.subject}
{payload.message}
""" plain = f"Kontakt von {payload.name} ({payload.email})\nBetreff: {payload.subject}\n\n{payload.message}" await send_email( CONTACT_MAIL, f"Kontakt: {payload.subject} — {payload.name}", email_html(body), plain, ) return {"ok": True}