Web: add superfeedr_subscribed prop, populate it in maybe_superfeedr_subscribe

for #550
pull/746/head
Ryan Barrett 2023-12-04 10:54:49 -08:00
rodzic b113521f94
commit eb4e11ae3d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 6BE31FDF4776E9D4
2 zmienionych plików z 19 dodań i 4 usunięć

Wyświetl plik

@ -1771,8 +1771,9 @@ class WebTest(TestCase):
self.assertEqual(400, got.status_code)
@patch('oauth_dropins.webutil.appengine_info.LOCAL_SERVER', False)
def test_superfeedr_subscribe(self, mock_get, mock_post):
web.superfeedr_subscribe(self.user)
def test_maybe_superfeedr_subscribe(self, mock_get, mock_post):
self.assertFalse(self.user.superfeedr_subscribed)
web.maybe_superfeedr_subscribe(self.user)
self.assert_req(mock_post, SUPERFEEDR_PUSH_API, data={
'hub.mode': 'subscribe',
'hub.topic': 'https://user.com/feed',
@ -1780,6 +1781,13 @@ class WebTest(TestCase):
'format': 'atom',
'retrieve': 'true',
}, auth=ANY)
self.assertTrue(self.user.key.get().superfeedr_subscribed)
def test_maybe_superfeedr_subscribe_already_subscribed(self, mock_get, mock_post):
self.user.superfeedr_subscribed = True
self.user.put()
web.maybe_superfeedr_subscribe(self.user)
# should be a noop
def _test_verify(self, redirects, hcard, actor, redirects_error=None):
self.user.has_redirects = False

11
web.py
Wyświetl plik

@ -95,6 +95,7 @@ class Web(User, Protocol):
redirects_error = ndb.TextProperty()
has_hcard = ndb.BooleanProperty()
last_webmention_in = ndb.DateTimeProperty(tzinfo=timezone.utc)
superfeedr_subscribed = ndb.BooleanProperty(default=False)
# Originally, BF served Web users' AP actor ids on fed.brid.gy, eg
# https://fed.brid.gy/snarfed.org . When we started adding new protocols, we
@ -591,12 +592,16 @@ def webmention_interactive():
return redirect('/', code=302)
def superfeedr_subscribe(user):
def maybe_superfeedr_subscribe(user):
"""Subscribes to a user's Atom or RSS feed in Superfeedr.
Args:
user (Web)
"""
if user.superfeedr_subscribed:
logger.info('Already subscribed via Superfeedr')
return
logger.info(f'Subscribing to {user.key.id()} via Superfeedr')
if appengine_info.LOCAL_SERVER:
logger.info(f"Skipping since we're local")
@ -613,7 +618,9 @@ def superfeedr_subscribe(user):
'retrieve': 'true',
})
resp.raise_for_status()
return resp
user.superfeedr_subscribed = True
user.put()
# generate/check per-user token for auth?