from fastapi import FastAPI from fastapi.exception_handlers import request_validation_exception_handler from fastapi.exceptions import RequestValidationError from pydantic import BaseModel, model_validator from typing import Any, Dict import os import subprocess class Sms(BaseModel): from_: str text: str sentStamp: int receivedStamp: int sim: str @model_validator(mode="before") def mangle_keywords(cls, values: Dict[str, Any]) -> Dict[str, Any]: values["from_"] = values["from"] del values["from"] return values app = FastAPI() @app.exception_handler(RequestValidationError) async def validation_exception_handler(request, exc): print(f"Invalid data received: {exc}") return await request_validation_exception_handler(request, exc) @app.get("/") async def root(): return {"message": "Hello World"} @app.post("/") async def sms(sms: Sms): subprocess.run( [ "mn", "send", "--room-id", os.environ.get("MATRIX_ROOM_ID") or "!zHY4LWpsImzEPOXZrR:iamonlyherefortheicecream.ml", sms.model_dump_json(), ], env={"MN_NO_KEYRING": "1", "XDG_STATE_HOME": "/srv", "MN_SERVER_NAME": os.environ.get("MN_SERVER_NAME") or "matrix.rerd.eu"}, check=True, ) return sms