diff --git a/feedvault/settings.py b/feedvault/settings.py index 8233573..3304ccd 100644 --- a/feedvault/settings.py +++ b/feedvault/settings.py @@ -13,8 +13,9 @@ BASE_DIR: Path = Path(__file__).resolve().parent.parent SECRET_KEY: str = os.getenv("SECRET_KEY", default="") ADMINS: list[tuple[str, str]] = [("Joakim Hellsén", "django@feedvault.se")] ALLOWED_HOSTS: list[str] = [".feedvault.se", ".localhost", "127.0.0.1"] -CSRF_COOKIE_DOMAIN = ".feedvault.se" -CSRF_TRUSTED_ORIGINS: list[str] = ["https://feedvault.se", "https://www.feedvault.se"] +if not DEBUG: + CSRF_COOKIE_DOMAIN = ".feedvault.se" + CSRF_TRUSTED_ORIGINS: list[str] = ["https://feedvault.se", "https://www.feedvault.se"] TIME_ZONE = "Europe/Stockholm" USE_TZ = True USE_I18N = False diff --git a/feedvault/sitemaps.py b/feedvault/sitemaps.py index da5bd3a..9e86d90 100644 --- a/feedvault/sitemaps.py +++ b/feedvault/sitemaps.py @@ -12,7 +12,7 @@ class StaticViewSitemap(Sitemap): def items(self: StaticViewSitemap) -> list[str]: """Return all the items in the sitemap.""" - return ["feeds:index", "feeds:feeds", "feeds:domains"] + return ["index", "feeds", "domains"] def location(self: StaticViewSitemap, item: str) -> str: """Return the location of the item.""" diff --git a/feedvault/tests.py b/feedvault/tests.py index 551765b..473b4ef 100644 --- a/feedvault/tests.py +++ b/feedvault/tests.py @@ -85,8 +85,9 @@ class TestRobotsPage(TestCase): """Test if the robots page contains the expected content.""" response: HttpResponse = self.client.get(reverse("robots")) assert ( - response.content == b"User-agent: *\nDisallow: /add\nDisallow: /upload\nDisallow: /accounts/" - ), f"Expected b'User-agent: *\nDisallow: /add\nDisallow: /upload\nDisallow: /accounts/', got {response.content}" + response.content + == b"User-agent: *\nDisallow: /add\nDisallow: /upload\nDisallow: /accounts/\n\nSitemap: https://feedvault.se/sitemap.xml" + ), f"Expected b'User-agent: *\nDisallow: /add\nDisallow: /upload\nDisallow: /accounts/\n\nSitemap: https://feedvault.se/sitemap.xml', got {response.content}" # noqa: E501 class TestDomains(TestCase): @@ -189,3 +190,15 @@ class TestLogoutPage(TestCase): response: HttpResponse = self.client.get(reverse("index")) assert response.status_code == 200 assert "testuser" not in response.content.decode("utf-8") + + +class TestSitemap(TestCase): + def test_sitemap(self) -> None: + """Test if the sitemap is accessible.""" + response: HttpResponse = self.client.get(reverse("django.contrib.sitemaps.views.sitemap")) + assert response.status_code == 200, f"Expected 200, got {response.status_code}" + assert "urlset" in response.content.decode() + + response2 = self.client.get("/sitemap.xml") + assert response2.status_code == 200, f"Expected 200, got {response2.status_code}" + assert "urlset" in response2.content.decode() diff --git a/feedvault/urls.py b/feedvault/urls.py index 248898c..79fbf86 100644 --- a/feedvault/urls.py +++ b/feedvault/urls.py @@ -13,14 +13,12 @@ from feedvault.views import CustomLoginView, CustomLogoutView, ProfileView, Regi app_name: str = "feedvault" - sitemaps = { "static": StaticViewSitemap, "feeds": GenericSitemap({"queryset": Feed.objects.all(), "date_field": "created_at"}), "domains": GenericSitemap({"queryset": Domain.objects.all(), "date_field": "created_at"}), } - urlpatterns: list[URLPattern] = [ path(route="", view=views.IndexView.as_view(), name="index"), path(route="feed//", view=views.FeedView.as_view(), name="feed"), diff --git a/feedvault/views.py b/feedvault/views.py index fdedcee..3d7cce7 100644 --- a/feedvault/views.py +++ b/feedvault/views.py @@ -254,7 +254,7 @@ class RobotsView(View): def get(self, request: HttpRequest) -> HttpResponse: # noqa: ARG002 """Load the robots.txt file.""" return HttpResponse( - content="User-agent: *\nDisallow: /add\nDisallow: /upload\nDisallow: /accounts/", + content="User-agent: *\nDisallow: /add\nDisallow: /upload\nDisallow: /accounts/\n\nSitemap: https://feedvault.se/sitemap.xml", content_type="text/plain", ) diff --git a/pyproject.toml b/pyproject.toml index 4ca105e..b408198 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -django = { extras = ["argon2"], version = "^5.0.3" } +django = {extras = ["argon2"], version = "^5.0.3"} python-dotenv = "^1.0.1" feedparser = "^6.0.11" gunicorn = "^21.2.0"