From 9a87d7261ff1c07436107a9d25466a7592303337 Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Mon, 23 Oct 2023 13:10:27 -0700 Subject: [PATCH] fix crash on RSS/Atom feeds for users without obj or obj.as1 fixes https://console.cloud.google.com/errors/detail/CKSZq8OU-tCRXA;time=P30D?project=bridgy-federated --- pages.py | 11 +++++++---- tests/test_pages.py | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pages.py b/pages.py index e7c2004..0ade4da 100644 --- a/pages.py +++ b/pages.py @@ -249,6 +249,9 @@ def serve_feed(*, objects, format, title, as_snippets=False, quiet=False): tasklets.wait_all(gets) + actor = (g.user.obj.as1 if g.user.obj and g.user.obj.as1 + else {'displayName': g.user.readable_id, 'url': g.user.web_url()}) + # TODO: inject/merge common.pretty_link into microformats2.render_content # (specifically into hcard_to_html) somehow to convert Mastodon URLs to @-@ # syntax. maybe a fediverse kwarg down through the call chain? @@ -256,12 +259,12 @@ def serve_feed(*, objects, format, title, as_snippets=False, quiet=False): entries = [microformats2.object_to_html(a) for a in activities] return render_template('feed.html', **TEMPLATE_VARS, **locals()) elif format == 'atom': - body = atom.activities_to_atom(activities, actor=g.user.obj.as1, - title=title, request_url=request.url) + body = atom.activities_to_atom(activities, actor=actor, title=title, + request_url=request.url) return body, {'Content-Type': atom.CONTENT_TYPE} elif format == 'rss': - body = rss.from_activities(activities, actor=g.user.obj.as1, - title=title, feed_url=request.url) + body = rss.from_activities(activities, actor=actor, title=title, + feed_url=request.url) return body, {'Content-Type': rss.CONTENT_TYPE} diff --git a/tests/test_pages.py b/tests/test_pages.py index 322446e..a994354 100644 --- a/tests/test_pages.py +++ b/tests/test_pages.py @@ -341,6 +341,11 @@ class PagesTest(TestCase): self.assert_equals(atom.CONTENT_TYPE, got.headers['Content-Type']) self.assert_equals([], atom.atom_to_activities(got.text)) + def test_feed_atom_empty_g_user_without_obj(self): + self.user.obj_key = None + self.user.put() + self.test_feed_atom_empty() + def test_feed_atom(self): self.add_objects() got = self.client.get('/web/user.com/feed?format=atom')