From fae7769d2be81508d019535583f7f631d485e7e9 Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Sun, 26 Nov 2023 15:37:39 -0800 Subject: [PATCH] Web.get_or_create bug fix: handle opted out users fixes https://console.cloud.google.com/errors/detail/CJ2U0_Hq6cHnUA;time=P30D?project=bridgy-federated --- tests/test_web.py | 11 +++++++++++ web.py | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/test_web.py b/tests/test_web.py index b75a5e5..3374a5a 100644 --- a/tests/test_web.py +++ b/tests/test_web.py @@ -495,6 +495,17 @@ class WebTest(TestCase): self.assert_entities_equal(user, Web.get_by_id('foo.bar')) self.assertIsNone(Web.get_by_id('..foo.bar.')) + def test_get_or_create_existing(self, *_): + user = Web.get_or_create('user.com') + self.assertEqual('user.com', user.key.id()) + self.assert_entities_equal(user, self.user) + + def test_get_or_create_existing_opted_out(self, *_): + self.user.obj.mf2['properties']['summary'] = '#nobridge' + self.user.obj.put() + self.user.put() + self.assertIsNone(Web.get_or_create('user.com')) + def test_bad_source_url(self, *mocks): orig_count = Object.query().count() diff --git a/web.py b/web.py index 7cc2f53..9350b12 100644 --- a/web.py +++ b/web.py @@ -94,7 +94,11 @@ class Web(User, Protocol): Normalizing currently consists of lower casing and removing leading and trailing dots. """ - domain = cls.key_for(id).id().lower().strip('.') + key = cls.key_for(id) + if not key: + return None # opted out + + domain = key.id().lower().strip('.') return super().get_or_create(domain, **kwargs) @ndb.ComputedProperty