forked from forks/microblog.pub
33 lines
939 B
Python
33 lines
939 B
Python
|
from typing import Any
|
||
|
from typing import Awaitable
|
||
|
from typing import Callable
|
||
|
|
||
|
from fastapi import Depends
|
||
|
from fastapi import Request
|
||
|
from fastapi.responses import JSONResponse
|
||
|
|
||
|
from app.actor import LOCAL_ACTOR
|
||
|
from app.config import is_activitypub_requested
|
||
|
from app.database import AsyncSession
|
||
|
from app.database import get_db_session
|
||
|
|
||
|
_Handler = Callable[[Request, AsyncSession], Awaitable[Any]]
|
||
|
|
||
|
|
||
|
def build_custom_index_handler(handler: _Handler) -> _Handler:
|
||
|
async def custom_index(
|
||
|
request: Request,
|
||
|
db_session: AsyncSession = Depends(get_db_session),
|
||
|
) -> Any:
|
||
|
# Serve the AP actor if requested
|
||
|
if is_activitypub_requested(request):
|
||
|
return JSONResponse(
|
||
|
LOCAL_ACTOR.ap_actor,
|
||
|
media_type="application/activity+json",
|
||
|
)
|
||
|
|
||
|
# Defer to the custom handler
|
||
|
return await handler(request, db_session)
|
||
|
|
||
|
return custom_index
|