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
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
|