59 lines
1.6 KiB
Python
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"]
|