mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
108 lines
No EOL
3 KiB
Python
108 lines
No EOL
3 KiB
Python
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 |