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 @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() 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"]