From ebb0a6c154f8b53b0f9982b1c9407d6d2317cb1c Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Fri, 18 Aug 2023 13:30:26 -0700 Subject: [PATCH] Web user signup: remove leading and trailing dots from domains --- tests/test_web.py | 6 ++++++ web.py | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/test_web.py b/tests/test_web.py index 26c2cfa..74788b0 100644 --- a/tests/test_web.py +++ b/tests/test_web.py @@ -476,6 +476,12 @@ class WebTest(TestCase): self.assertEqual('☃.net', user.key.id()) self.assert_entities_equal(user, Web.get_by_id('☃.net')) + def test_get_or_create_scripts_leading_trailing_dots(self, *_): + user = Web.get_or_create('..foo.bar.') + self.assertEqual('foo.bar', user.key.id()) + self.assert_entities_equal(user, Web.get_by_id('foo.bar')) + self.assertIsNone(Web.get_by_id('..foo.bar.')) + def test_bad_source_url(self, *mocks): orig_count = Object.query().count() diff --git a/web.py b/web.py index 05cf6b0..c8ef201 100644 --- a/web.py +++ b/web.py @@ -73,8 +73,12 @@ class Web(User, Protocol): @classmethod def get_or_create(cls, id, **kwargs): - """Lower cases id (domain), then passes through to :meth:`User.get_or_create`.""" - return super().get_or_create(id.lower(), **kwargs) + """Normalizes domain, then passes through to :meth:`User.get_or_create`. + + Normalizing currently consists of lower casing and removing leading and + trailing dots. + """ + return super().get_or_create(id.lower().strip('.'), **kwargs) def web_url(self): """Returns this user's web URL aka web_url, eg 'https://foo.com/'."""