From 624115bf1161e1fe1411c3ba2089c2b44c857d17 Mon Sep 17 00:00:00 2001
From: Bart Schuurmans <bart@minnozz.com>
Date: Mon, 1 Apr 2024 15:28:01 +0200
Subject: [PATCH] Use headers dict instead of HTTP_* kwargs or request.META

---
 bookwyrm/tests/test_signing.py           | 12 +++----
 bookwyrm/tests/views/inbox/test_inbox.py |  5 ++-
 bookwyrm/tests/views/test_helpers.py     | 45 ++++++++++++++++++------
 bookwyrm/tests/views/test_outbox.py      |  2 +-
 bookwyrm/views/helpers.py                |  2 +-
 5 files changed, 47 insertions(+), 19 deletions(-)

diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py
index 79370844a..2e0105c1c 100644
--- a/bookwyrm/tests/test_signing.py
+++ b/bookwyrm/tests/test_signing.py
@@ -72,12 +72,12 @@ class Signature(TestCase):
             urlsplit(self.rat.inbox).path,
             data=data,
             content_type="application/json",
-            **{
-                "HTTP_DATE": now,
-                "HTTP_SIGNATURE": signature,
-                "HTTP_DIGEST": digest,
-                "HTTP_CONTENT_TYPE": "application/activity+json; charset=utf-8",
-                "HTTP_HOST": NETLOC,
+            headers={
+                "date": now,
+                "signature": signature,
+                "digest": digest,
+                "content-type": "application/activity+json; charset=utf-8",
+                "host": NETLOC,
             },
         )
 
diff --git a/bookwyrm/tests/views/inbox/test_inbox.py b/bookwyrm/tests/views/inbox/test_inbox.py
index 92ee8a43d..c29aa71a2 100644
--- a/bookwyrm/tests/views/inbox/test_inbox.py
+++ b/bookwyrm/tests/views/inbox/test_inbox.py
@@ -134,7 +134,10 @@ class Inbox(TestCase):
         """check for blocked servers"""
         request = self.factory.post(
             "",
-            HTTP_USER_AGENT="http.rb/4.4.1 (Mastodon/3.3.0; +https://mastodon.social/)",
+            headers={
+                # pylint: disable-next=line-too-long
+                "user-agent": "http.rb/4.4.1 (Mastodon/3.3.0; +https://mastodon.social/)",
+            },
         )
         self.assertIsNone(views.inbox.raise_is_blocked_user_agent(request))
 
diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py
index a1c06bede..64241d2b4 100644
--- a/bookwyrm/tests/views/test_helpers.py
+++ b/bookwyrm/tests/views/test_helpers.py
@@ -113,11 +113,20 @@ class ViewsHelpers(TestCase):  # pylint: disable=too-many-public-methods
         request = self.factory.get(
             "",
             {"q": "Test Book"},
-            HTTP_USER_AGENT="http.rb/4.4.1 (Mastodon/3.3.0; +https://mastodon.social/)",
+            headers={
+                # pylint: disable-next=line-too-long
+                "user-agent": "http.rb/4.4.1 (Mastodon/3.3.0; +https://mastodon.social/)",
+            },
         )
         self.assertFalse(views.helpers.is_bookwyrm_request(request))
 
-        request = self.factory.get("", {"q": "Test Book"}, HTTP_USER_AGENT=USER_AGENT)
+        request = self.factory.get(
+            "",
+            {"q": "Test Book"},
+            headers={
+                "user-agent": USER_AGENT,
+            },
+        )
         self.assertTrue(views.helpers.is_bookwyrm_request(request))
 
     def test_handle_remote_webfinger_invalid(self, *_):
@@ -271,8 +280,12 @@ class ViewsHelpers(TestCase):  # pylint: disable=too-many-public-methods
 
     def test_redirect_to_referer_outside_domain(self, *_):
         """safely send people on their way"""
-        request = self.factory.get("/path")
-        request.META = {"HTTP_REFERER": "http://outside.domain/name"}
+        request = self.factory.get(
+            "/path",
+            headers={
+                "referer": "http://outside.domain/name",
+            },
+        )
         result = views.helpers.redirect_to_referer(
             request, "user-feed", self.local_user.localname
         )
@@ -280,21 +293,33 @@ class ViewsHelpers(TestCase):  # pylint: disable=too-many-public-methods
 
     def test_redirect_to_referer_outside_domain_with_fallback(self, *_):
         """invalid domain with regular params for the redirect function"""
-        request = self.factory.get("/path")
-        request.META = {"HTTP_REFERER": "https://outside.domain/name"}
+        request = self.factory.get(
+            "/path",
+            headers={
+                "referer": "http://outside.domain/name",
+            },
+        )
         result = views.helpers.redirect_to_referer(request)
         self.assertEqual(result.url, "/")
 
     def test_redirect_to_referer_valid_domain(self, *_):
         """redirect to within the app"""
-        request = self.factory.get("/path")
-        request.META = {"HTTP_REFERER": f"{BASE_URL}/and/a/path"}
+        request = self.factory.get(
+            "/path",
+            headers={
+                "referer": f"{BASE_URL}/and/a/path",
+            },
+        )
         result = views.helpers.redirect_to_referer(request)
         self.assertEqual(result.url, f"{BASE_URL}/and/a/path")
 
     def test_redirect_to_referer_with_get_args(self, *_):
         """if the path has get params (like sort) they are preserved"""
-        request = self.factory.get("/path")
-        request.META = {"HTTP_REFERER": f"{BASE_URL}/and/a/path?sort=hello"}
+        request = self.factory.get(
+            "/path",
+            headers={
+                "referer": f"{BASE_URL}/and/a/path?sort=hello",
+            },
+        )
         result = views.helpers.redirect_to_referer(request)
         self.assertEqual(result.url, f"{BASE_URL}/and/a/path?sort=hello")
diff --git a/bookwyrm/tests/views/test_outbox.py b/bookwyrm/tests/views/test_outbox.py
index b21d56c83..bbd4aa37b 100644
--- a/bookwyrm/tests/views/test_outbox.py
+++ b/bookwyrm/tests/views/test_outbox.py
@@ -122,7 +122,7 @@ class OutboxView(TestCase):
                 privacy="public",
             )
 
-        request = self.factory.get("", {"page": 1}, HTTP_USER_AGENT=USER_AGENT)
+        request = self.factory.get("", {"page": 1}, headers={"user-agent": USER_AGENT})
         result = views.Outbox.as_view()(request, "mouse")
 
         data = json.loads(result.content)
diff --git a/bookwyrm/views/helpers.py b/bookwyrm/views/helpers.py
index bdff119f2..391788b0c 100644
--- a/bookwyrm/views/helpers.py
+++ b/bookwyrm/views/helpers.py
@@ -231,7 +231,7 @@ def maybe_redirect_local_path(request, model):
 def redirect_to_referer(request, *args, **kwargs):
     """Redirect to the referrer, if it's in our domain, with get params"""
     # make sure the refer is part of this instance
-    validated = validate_url_domain(request.META.get("HTTP_REFERER"))
+    validated = validate_url_domain(request.headers.get("referer", ""))
 
     if validated:
         return redirect(validated)