diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 70f85b3c8..abe78dafb 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -8,7 +8,7 @@ from django.contrib.postgres.indexes import GinIndex import pgtrigger from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from bookwyrm.utils.db import format_trigger from .book import BookDataModel, MergedAuthor @@ -70,7 +70,7 @@ class Author(BookDataModel): def get_remote_id(self): """editions and works both use "book" instead of model_name""" - return f"https://{DOMAIN}/author/{self.id}" + return f"{BASE_URL}/author/{self.id}" class Meta: """sets up indexes and triggers""" diff --git a/bookwyrm/models/base_model.py b/bookwyrm/models/base_model.py index 2d39e2a6f..ca13d9553 100644 --- a/bookwyrm/models/base_model.py +++ b/bookwyrm/models/base_model.py @@ -10,7 +10,7 @@ from django.http import Http404 from django.utils.translation import gettext_lazy as _ from django.utils.text import slugify -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .fields import RemoteIdField @@ -38,7 +38,7 @@ class BookWyrmModel(models.Model): def get_remote_id(self): """generate the url that resolves to the local object, without a slug""" - base_path = f"https://{DOMAIN}" + base_path = BASE_URL if hasattr(self, "user"): base_path = f"{base_path}{self.user.local_path}" @@ -53,7 +53,7 @@ class BookWyrmModel(models.Model): @property def local_path(self): """how to link to this object in the local app, with a slug""" - local = self.get_remote_id().replace(f"https://{DOMAIN}", "") + local = self.get_remote_id().replace(BASE_URL, "") name = None if hasattr(self, "name_field"): diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 6075d2c92..8e957b717 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -21,7 +21,7 @@ from bookwyrm import activitypub from bookwyrm.isbn.isbn import hyphenator_singleton as hyphenator from bookwyrm.preview_images import generate_edition_preview_image_task from bookwyrm.settings import ( - DOMAIN, + BASE_URL, DEFAULT_LANGUAGE, LANGUAGE_ARTICLES, ENABLE_PREVIEW_IMAGES, @@ -327,7 +327,7 @@ class Book(BookDataModel): def get_remote_id(self): """editions and works both use "book" instead of model_name""" - return f"https://{DOMAIN}/book/{self.id}" + return f"{BASE_URL}/book/{self.id}" def guess_sort_title(self): """Get a best-guess sort title for the current book""" diff --git a/bookwyrm/models/group.py b/bookwyrm/models/group.py index d02b56ab1..40a32b5dc 100644 --- a/bookwyrm/models/group.py +++ b/bookwyrm/models/group.py @@ -1,7 +1,7 @@ """ do book related things with other users """ from django.db import models, IntegrityError, transaction from django.db.models import Q -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .base_model import BookWyrmModel from . import fields from .relationship import UserBlocks @@ -17,7 +17,7 @@ class Group(BookWyrmModel): def get_remote_id(self): """don't want the user to be in there in this case""" - return f"https://{DOMAIN}/group/{self.id}" + return f"{BASE_URL}/group/{self.id}" @classmethod def followers_filter(cls, queryset, viewer): diff --git a/bookwyrm/models/list.py b/bookwyrm/models/list.py index 63dd5b23f..d32a8da95 100644 --- a/bookwyrm/models/list.py +++ b/bookwyrm/models/list.py @@ -7,7 +7,7 @@ from django.db.models import Q from django.utils import timezone from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .activitypub_mixin import CollectionItemMixin, OrderedCollectionMixin from .base_model import BookWyrmModel @@ -50,7 +50,7 @@ class List(OrderedCollectionMixin, BookWyrmModel): def get_remote_id(self): """don't want the user to be in there in this case""" - return f"https://{DOMAIN}/list/{self.id}" + return f"{BASE_URL}/list/{self.id}" @property def collection_queryset(self): diff --git a/bookwyrm/models/report.py b/bookwyrm/models/report.py index 74a9bbe41..64ade3a40 100644 --- a/bookwyrm/models/report.py +++ b/bookwyrm/models/report.py @@ -3,7 +3,7 @@ from django.core.exceptions import PermissionDenied from django.db import models from django.utils.translation import gettext_lazy as _ -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .base_model import BookWyrmModel @@ -46,7 +46,7 @@ class Report(BookWyrmModel): raise PermissionDenied() def get_remote_id(self): - return f"https://{DOMAIN}/settings/reports/{self.id}" + return f"{BASE_URL}/settings/reports/{self.id}" def comment(self, user, note): """comment on a report""" diff --git a/bookwyrm/models/shelf.py b/bookwyrm/models/shelf.py index 3d92f8d43..4b4e3cd8d 100644 --- a/bookwyrm/models/shelf.py +++ b/bookwyrm/models/shelf.py @@ -6,7 +6,7 @@ from django.db import models from django.utils import timezone from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from bookwyrm.tasks import BROADCAST from .activitypub_mixin import CollectionItemMixin, OrderedCollectionMixin from .base_model import BookWyrmModel @@ -71,7 +71,7 @@ class Shelf(OrderedCollectionMixin, BookWyrmModel): @property def local_path(self): """No slugs""" - return self.get_remote_id().replace(f"https://{DOMAIN}", "") + return self.get_remote_id().replace(BASE_URL, "") def raise_not_deletable(self, viewer): """don't let anyone delete a default shelf""" diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index f793d61b8..e2671b07f 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -19,7 +19,7 @@ from bookwyrm.connectors import get_data, ConnectorException from bookwyrm.models.shelf import Shelf from bookwyrm.models.status import Status from bookwyrm.preview_images import generate_user_preview_image_task -from bookwyrm.settings import BASE_URL, DOMAIN, ENABLE_PREVIEW_IMAGES, USE_HTTPS, LANGUAGES +from bookwyrm.settings import BASE_URL, ENABLE_PREVIEW_IMAGES, LANGUAGES from bookwyrm.signatures import create_key_pair from bookwyrm.tasks import app, MISC from bookwyrm.utils import regex @@ -42,12 +42,6 @@ def get_feed_filter_choices(): return [f[0] for f in FeedFilterChoices] -def site_link(): - """helper for generating links to the site""" - protocol = "https" if USE_HTTPS else "http" - return f"{protocol}://{DOMAIN}" - - # pylint: disable=too-many-public-methods class User(OrderedCollectionPageMixin, AbstractUser): """a user who wants to read books""" @@ -368,11 +362,10 @@ class User(OrderedCollectionPageMixin, AbstractUser): with transaction.atomic(): # populate fields for local users - link = site_link() - self.remote_id = f"{link}/user/{self.localname}" + self.remote_id = f"{BASE_URL}/user/{self.localname}" self.followers_url = f"{self.remote_id}/followers" self.inbox = f"{self.remote_id}/inbox" - self.shared_inbox = f"{link}/inbox" + self.shared_inbox = f"{BASE_URL}/inbox" self.outbox = f"{self.remote_id}/outbox" # an id needs to be set before we can proceed with related models diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index 994286994..1a8421c12 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -6,7 +6,7 @@ import responses from bookwyrm import models from bookwyrm.connectors import abstract_connector, ConnectorException from bookwyrm.connectors.abstract_connector import Mapping, get_data -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL class AbstractConnector(TestCase): @@ -86,7 +86,7 @@ class AbstractConnector(TestCase): def test_get_or_create_book_existing(self): """find an existing book by remote/origin id""" self.assertEqual(models.Book.objects.count(), 1) - self.assertEqual(self.book.remote_id, f"https://{DOMAIN}/book/{self.book.id}") + self.assertEqual(self.book.remote_id, f"{BASE_URL}/book/{self.book.id}") self.assertEqual(self.book.origin_id, "https://example.com/book/1234") # dedupe by origin id @@ -95,9 +95,7 @@ class AbstractConnector(TestCase): self.assertEqual(result, self.book) # dedupe by remote id - result = self.connector.get_or_create_book( - f"https://{DOMAIN}/book/{self.book.id}" - ) + result = self.connector.get_or_create_book(f"{BASE_URL}/book/{self.book.id}") self.assertEqual(models.Book.objects.count(), 1) self.assertEqual(result, self.book) diff --git a/bookwyrm/tests/data/ap_user_move.json b/bookwyrm/tests/data/ap_user_move.json index 52de40a68..11b10ded1 100644 --- a/bookwyrm/tests/data/ap_user_move.json +++ b/bookwyrm/tests/data/ap_user_move.json @@ -29,7 +29,9 @@ "bookwyrmUser": true, "manuallyApprovesFollowers": false, "discoverable": false, - "alsoKnownAs": ["https://your.domain.here/user/rat"], + "alsoKnownAs": [ + "https://your.domain.here:4242/user/rat" + ], "devices": "https://friend.camp/users/tripofmice/collections/devices", "tag": [], "icon": { @@ -37,4 +39,4 @@ "mediaType": "image/png", "url": "https://example.com/images/avatars/AL-2-crop-50.png" } -} +} \ No newline at end of file diff --git a/bookwyrm/tests/data/bookwyrm_account_export.tar.gz b/bookwyrm/tests/data/bookwyrm_account_export.tar.gz index 34cee6bc0..d7bc5634b 100644 Binary files a/bookwyrm/tests/data/bookwyrm_account_export.tar.gz and b/bookwyrm/tests/data/bookwyrm_account_export.tar.gz differ diff --git a/bookwyrm/tests/data/user_import.json b/bookwyrm/tests/data/user_import.json index ffe2e7d9e..5c0e22ea0 100644 --- a/bookwyrm/tests/data/user_import.json +++ b/bookwyrm/tests/data/user_import.json @@ -214,7 +214,7 @@ "attributedTo": "https://www.example.com//user/rat", "content": "

I like it

", "to": [ - "https://your.domain.here/user/rat/followers" + "https://your.domain.here:4242/user/rat/followers" ], "cc": [], "replies": { @@ -395,7 +395,7 @@ "https://local.lists/9999" ], "follows": [ - "https://your.domain.here/user/rat" + "https://your.domain.here:4242/user/rat" ], - "blocks": ["https://your.domain.here/user/badger"] + "blocks": ["https://your.domain.here:4242/user/badger"] } diff --git a/bookwyrm/tests/models/test_base_model.py b/bookwyrm/tests/models/test_base_model.py index d666b0e46..f16bdfa78 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -5,7 +5,7 @@ from django.test import TestCase from bookwyrm import models from bookwyrm.models import base_model -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL # pylint: disable=attribute-defined-outside-init @@ -44,14 +44,14 @@ class BaseModel(TestCase): """these should be generated""" self.test_model.id = 1 # pylint: disable=invalid-name expected = self.test_model.get_remote_id() - self.assertEqual(expected, f"https://{DOMAIN}/bookwyrmtestmodel/1") + self.assertEqual(expected, f"{BASE_URL}/bookwyrmtestmodel/1") def test_remote_id_with_user(self): """format of remote id when there's a user object""" self.test_model.user = self.local_user self.test_model.id = 1 expected = self.test_model.get_remote_id() - self.assertEqual(expected, f"https://{DOMAIN}/user/mouse/bookwyrmtestmodel/1") + self.assertEqual(expected, f"{BASE_URL}/user/mouse/bookwyrmtestmodel/1") def test_set_remote_id(self): """this function sets remote ids after creation""" @@ -60,7 +60,7 @@ class BaseModel(TestCase): instance = models.Work.objects.create(title="work title") instance.remote_id = None base_model.set_remote_id(None, instance, True) - self.assertEqual(instance.remote_id, f"https://{DOMAIN}/book/{instance.id}") + self.assertEqual(instance.remote_id, f"{BASE_URL}/book/{instance.id}") # shouldn't set remote_id if it's not created instance.remote_id = None diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 5b2b71ba9..ebb57061d 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -31,7 +31,7 @@ class Book(TestCase): def test_remote_id(self): """fanciness with remote/origin ids""" - remote_id = f"https://{settings.DOMAIN}/book/{self.work.id}" + remote_id = f"{settings.BASE_URL}/book/{self.work.id}" self.assertEqual(self.work.get_remote_id(), remote_id) self.assertEqual(self.work.remote_id, remote_id) diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index b9148853b..a902f6cca 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -28,7 +28,7 @@ class List(TestCase): def test_remote_id(self, *_): """shelves use custom remote ids""" book_list = models.List.objects.create(name="Test List", user=self.local_user) - expected_id = f"https://{settings.DOMAIN}/list/{book_list.id}" + expected_id = f"{settings.BASE_URL}/list/{book_list.id}" self.assertEqual(book_list.get_remote_id(), expected_id) def test_to_activity(self, *_): diff --git a/bookwyrm/tests/models/test_shelf_model.py b/bookwyrm/tests/models/test_shelf_model.py index 022cb5c61..d510952ea 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -35,7 +35,7 @@ class Shelf(TestCase): shelf = models.Shelf.objects.create( name="Test Shelf", identifier="test-shelf", user=self.local_user ) - expected_id = f"https://{settings.DOMAIN}/user/mouse/books/test-shelf" + expected_id = f"{settings.BASE_URL}/user/mouse/books/test-shelf" self.assertEqual(shelf.get_remote_id(), expected_id) def test_to_activity(self, *_): diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 2fede3684..5837b4188 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -60,7 +60,7 @@ class Status(TestCase): def test_status_generated_fields(self, *_): """setting remote id""" status = models.Status.objects.create(content="bleh", user=self.local_user) - expected_id = f"https://{settings.DOMAIN}/user/mouse/status/{status.id}" + expected_id = f"{settings.BASE_URL}/user/mouse/status/{status.id}" self.assertEqual(status.remote_id, expected_id) self.assertEqual(status.privacy, "public") @@ -151,7 +151,7 @@ class Status(TestCase): self.assertEqual(activity["tag"][0]["type"], "Hashtag") self.assertEqual(activity["tag"][0]["name"], "#content") self.assertEqual( - activity["tag"][0]["href"], f"https://{settings.DOMAIN}/hashtag/{tag.id}" + activity["tag"][0]["href"], f"{settings.BASE_URL}/hashtag/{tag.id}" ) def test_status_with_mention_to_activity(self, *_): diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 22c7a171b..3147f95e3 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -9,15 +9,12 @@ import responses from bookwyrm import models from bookwyrm.management.commands import initdb -from bookwyrm.settings import USE_HTTPS, DOMAIN +from bookwyrm.settings import DOMAIN, BASE_URL # pylint: disable=missing-class-docstring # pylint: disable=missing-function-docstring class User(TestCase): - - protocol = "https://" if USE_HTTPS else "http://" - @classmethod def setUpTestData(cls): with ( @@ -49,11 +46,11 @@ class User(TestCase): def test_computed_fields(self): """username instead of id here""" - expected_id = f"{self.protocol}{DOMAIN}/user/mouse" + expected_id = f"{BASE_URL}/user/mouse" self.assertEqual(self.user.remote_id, expected_id) self.assertEqual(self.user.username, f"mouse@{DOMAIN}") self.assertEqual(self.user.localname, "mouse") - self.assertEqual(self.user.shared_inbox, f"{self.protocol}{DOMAIN}/inbox") + self.assertEqual(self.user.shared_inbox, f"{BASE_URL}/inbox") self.assertEqual(self.user.inbox, f"{expected_id}/inbox") self.assertEqual(self.user.outbox, f"{expected_id}/outbox") self.assertEqual(self.user.followers_url, f"{expected_id}/followers") @@ -130,7 +127,7 @@ class User(TestCase): patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): user = models.User.objects.create_user( - f"test2{DOMAIN}", + "test2", "test2@bookwyrm.test", localname="test2", **user_attrs, @@ -145,7 +142,7 @@ class User(TestCase): patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): user = models.User.objects.create_user( - f"test1{DOMAIN}", + "test1", "test1@bookwyrm.test", localname="test1", **user_attrs, diff --git a/bookwyrm/tests/views/preferences/test_move.py b/bookwyrm/tests/views/preferences/test_move.py index acd2f4a2d..15edf3638 100644 --- a/bookwyrm/tests/views/preferences/test_move.py +++ b/bookwyrm/tests/views/preferences/test_move.py @@ -27,7 +27,6 @@ class ViewsHelpers(TestCase): patch("bookwyrm.lists_stream.populate_lists_task.delay"), patch("bookwyrm.suggested_users.rerank_user_task.delay"), ): - cls.local_user = models.User.objects.create_user( "rat", "rat@rat.com", @@ -35,7 +34,6 @@ class ViewsHelpers(TestCase): local=True, discoverable=True, localname="rat", - remote_id="https://your.domain.here/user/rat", ) with ( diff --git a/bookwyrm/tests/views/test_isbn.py b/bookwyrm/tests/views/test_isbn.py index 632a831b0..60a81f3a2 100644 --- a/bookwyrm/tests/views/test_isbn.py +++ b/bookwyrm/tests/views/test_isbn.py @@ -8,7 +8,7 @@ from django.test.client import RequestFactory from bookwyrm import models, views from bookwyrm.tests.validate_html import validate_html -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL class IsbnViews(TestCase): @@ -55,7 +55,7 @@ class IsbnViews(TestCase): data = json.loads(response.content) self.assertEqual(len(data), 1) self.assertEqual(data[0]["title"], "Test Book") - self.assertEqual(data[0]["key"], f"https://{DOMAIN}/book/{self.book.id}") + self.assertEqual(data[0]["key"], f"{BASE_URL}/book/{self.book.id}") def test_isbn_html_response(self): """searches local data only and returns book data in json format""" diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 64ff68ba8..6c7e41cf3 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -10,7 +10,7 @@ from django.test.client import RequestFactory from bookwyrm import models, views from bookwyrm.book_search import SearchResult -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from bookwyrm.tests.validate_html import validate_html @@ -57,7 +57,7 @@ class Views(TestCase): data = json.loads(response.content) self.assertEqual(len(data), 1) self.assertEqual(data[0]["title"], "Test Book") - self.assertEqual(data[0]["key"], f"https://{DOMAIN}/book/{self.book.id}") + self.assertEqual(data[0]["key"], f"{BASE_URL}/book/{self.book.id}") def test_search_no_query(self): """just the search page"""