from fastapi import FastAPI, Request from config.config import LearnHouseConfig, get_learnhouse_config from src.core.events.events import shutdown_app, startup_app from src.router import v1_router from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles from fastapi_jwt_auth.exceptions import AuthJWTException from fastapi.middleware.gzip import GZipMiddleware from src.security.rbac.rbac import authorization_verify_based_on_roles, authorization_verify_if_element_is_public, authorization_verify_if_user_is_author from src.services.users.schemas.users import UserRolesInOrganization # from src.services.mocks.initial import create_initial_data ######################## # Pre-Alpha Version 0.1.0 # Author: @swve # (c) LearnHouse 2022 ######################## # Get LearnHouse Config learnhouse_config: LearnHouseConfig = get_learnhouse_config() # Global Config app = FastAPI( title=learnhouse_config.site_name, description=learnhouse_config.site_description, version="0.1.0", root_path="/", ) app.add_middleware( CORSMiddleware, allow_origin_regex=learnhouse_config.hosting_config.allowed_regexp, allow_methods=["*"], allow_credentials=True, allow_headers=["*"], ) # Gzip Middleware (will add brotli later) app.add_middleware(GZipMiddleware, minimum_size=1000) # Events app.add_event_handler("startup", startup_app(app)) app.add_event_handler("shutdown", shutdown_app(app)) # JWT Exception Handler @app.exception_handler(AuthJWTException) def authjwt_exception_handler(request: Request, exc: AuthJWTException): return JSONResponse( status_code=exc.status_code, # type: ignore content={"detail": exc.message}, # type: ignore ) # Static Files app.mount("/content", StaticFiles(directory="content"), name="content") # Global Routes app.include_router(v1_router) # General Routes @app.get("/") async def root(): return {"Message": "Welcome to LearnHouse ✨"} @app.get("/test") async def rootd(request: Request): res = await authorization_verify_based_on_roles( request=request, user_id="user_c441e47e-5c04-4b03-9886-b0f5cb333c06", action="read", roles_list=[ UserRolesInOrganization( org_id="org_e7085838-2efc-48f3-b414-77318572d9f5", role_id="role_admin" ), ], element_id="collection_1c277b46-5a4b-440a-ac29-94b874ef7cf4", ) return res @app.get("/test2") async def rootds(request: Request): res = await authorization_verify_if_user_is_author( request=request, user_id="user_c441e47e-5c04-4b03-9886-b0f5cb333c06", action="read", element_id="course_1c277b46-5a4b-440a-ac29-94b874ef7cf4", ) return res @app.get("/test3") async def rootdsc(request: Request): res = await authorization_verify_if_element_is_public( request=request, user_id="anonymous", action="read", element_id="course_1c277b46-5a4b-440a-ac29-94b874ef7cf4", ) return res