You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.3 KiB

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