3M/cef_3M/__init__.py
CEF Server 6233c96e6a add handling for public streams
new env vars for mediamtx
switch to redis for ipc
2024-08-27 14:46:44 +00:00

59 lines
1.6 KiB
Python

import asyncio
import datetime
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from .auth import JWTBearer
from .sql import SessionMaker, Uploads, Users
import config
from . import endpoints
from .util import minioClient, ergo
from fastapi_utils.tasks import repeat_every
from sqlalchemy import and_
from contextlib import asynccontextmanager
from .endpoints.mediamtx import mediamtxPoll
@repeat_every(seconds=60 * 60)
async def cleanup():
sess = SessionMaker()
toCleanup = sess.query(Uploads).filter(Uploads.expiry < datetime.datetime.utcnow()).all()
for upload in toCleanup:
minioClient.remove_object("uploads", upload.hash)
sess.delete(upload)
print(f"Deleted {len(toCleanup)} old files")
tempUsers = sess.query(Users).filter(and_(
Users.temporary == True,
Users.created_at < (datetime.datetime.utcnow() - datetime.timedelta(days=1))
)).all()
for user in tempUsers:
await ergo.fullyRemoveUser(user.username)
sess.delete(user)
print(f"Removed {len(tempUsers)} temp users")
sess.commit()
sess.close()
@asynccontextmanager
async def onStart(app: FastAPI):
await cleanup()
await util.ergo.init()
asyncio.get_running_loop().create_task(mediamtxPoll())
print("Initialized")
yield
app = FastAPI(lifespan=onStart)
app.add_middleware(
CORSMiddleware,
allow_origins=config.ALLOWED_DOMAINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(endpoints.router)
__all__ = ["sql", "auth", "util"]