diff --git a/Dockerfile b/Dockerfile index 776db64..2aff431 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,10 @@ RUN rm -rf node_modules RUN rm -rf build RUN npm install COPY src/frontend/. . + +ARG feature_flag=false +ENV VITE_FEATURE_FLAG=$feature_flag + RUN npm run build # Thanks https://stackoverflow.com/q/76988450 @@ -40,6 +44,9 @@ RUN ln -s /app/src/pdf/fonts /tmp/fonts WORKDIR /app/src +ARG feature_flag=false +ENV VITE_FEATURE_FLAG=$feature_flag + EXPOSE 80 CMD [ "uv", "run", "main.py"] diff --git a/src/api/src/main.py b/src/api/src/main.py index b9243e1..fbe387d 100644 --- a/src/api/src/main.py +++ b/src/api/src/main.py @@ -17,6 +17,7 @@ from fastapi.responses import ( StreamingResponse, ) from fastapi.staticfiles import StaticFiles +from os import getenv from create_book import ( EPUBGenerator, @@ -36,6 +37,8 @@ from create_book.parser import clean_tree, fetch_tree_images app = FastAPI() BUILD_PATH = Path(__file__).parent / "build" +feature_flag = True if getenv("VITE_FEATURE_FLAG") == "true" else False + class RequestCancelledMiddleware: # Thanks https://github.com/fastapi/fastapi/discussions/11360#discussion-6427734 @@ -192,6 +195,12 @@ async def handle_download( book = EPUBGenerator(metadata, part_trees, cover_data, images) media_type = "application/epub+zip" case DownloadFormat.pdf: + if not feature_flag: + logger.error("PDF downloads not enabled.") + return HTMLResponse( + status_code=403, + content='PDF downloads have been disabled by the server administrator. Support is available on the Discord', + ) author_image = await fetch_image( metadata["user"]["avatar"].replace("-256-", "-512-") ) @@ -215,7 +224,7 @@ async def handle_download( yield chunk return StreamingResponse( - iterfile(), + book_buffer if feature_flag else iterfile(), media_type=media_type, headers={ "Content-Disposition": f'attachment; filename="{slugify(metadata["title"])}_{story_id}{"_images" if download_images else ""}.{format.value}"', # Thanks https://stackoverflow.com/a/72729058 diff --git a/src/frontend/src/routes/+page.svelte b/src/frontend/src/routes/+page.svelte index 5ee801b..3ef6fb1 100644 --- a/src/frontend/src/routes/+page.svelte +++ b/src/frontend/src/routes/+page.svelte @@ -1,4 +1,6 @@