3M/cef_3M/__init__.py
CEF Server ba2e896813 add authentication
add built-in cleanup
general refactor
2024-07-29 03:26:14 +00:00

54 lines
1.4 KiB
Python

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