Move RSS response headers into app

This commit is contained in:
Abel Luck 2026-03-31 17:40:08 +02:00
parent e7b00b4129
commit a6632ef769
2 changed files with 55 additions and 2 deletions

View file

@ -4,7 +4,7 @@ import asyncio
import hashlib
from collections.abc import AsyncGenerator, Awaitable, Callable
from contextlib import suppress
from datetime import timedelta
from datetime import UTC, datetime, timedelta
from pathlib import Path
from typing import TypedDict, cast
from urllib.parse import urlparse
@ -590,7 +590,23 @@ def _load_sidebar_counts(app: Quart) -> dict[str, int]:
def _rss_feed_response(feed_text: str | None) -> Response:
if feed_text is None:
return Response(status=404)
return Response(feed_text, mimetype="application/rss+xml")
etag = hashlib.sha256(feed_text.encode("utf-8")).hexdigest()
if request.if_none_match.contains(etag):
response = Response(status=304)
else:
response = Response(
feed_text,
content_type="application/rss+xml; charset=utf-8",
)
response.set_etag(etag)
response.cache_control.public = True
response.cache_control.max_age = 300
response.expires = datetime.now(UTC) + timedelta(minutes=5)
response.vary.add("Host")
response.headers["Access-Control-Allow-Origin"] = "*"
response.headers["Access-Control-Allow-Methods"] = "GET, HEAD, OPTIONS"
response.headers["Access-Control-Allow-Headers"] = "*"
return response
def _read_feed_text(*, feeds_dir: Path, feed_path: str) -> str | None: