kopia lustrzana https://github.com/snarfed/bridgy-fed
Protocol.receive bug fix: resolve ids before checking for bot user follow, not after
for #1017pull/926/merge
rodzic
031d8b9cd2
commit
03c5638bc1
|
@ -761,6 +761,9 @@ class Protocol:
|
|||
if actor != authed_as:
|
||||
logger.warning(f"actor {actor} isn't authed user {authed_as}")
|
||||
|
||||
# update copy ids to originals
|
||||
obj.resolve_ids()
|
||||
|
||||
# refresh profile for follows of bot users to re-check whether they're
|
||||
# opted out
|
||||
if obj.type == 'follow':
|
||||
|
@ -771,10 +774,7 @@ class Protocol:
|
|||
# load actor user
|
||||
from_user = from_cls.get_or_create(id=actor)
|
||||
if not from_user:
|
||||
error(f'Actor {actor} is opted out', status=204)
|
||||
|
||||
# update copy ids to originals
|
||||
obj.resolve_ids()
|
||||
error(f'Actor {actor} is opted out or blocked', status=204)
|
||||
|
||||
# write Object to datastore
|
||||
orig = obj
|
||||
|
|
|
@ -2018,7 +2018,39 @@ class ProtocolReceiveTest(TestCase):
|
|||
'id': 'eefake:follow',
|
||||
'actor': 'eefake:user',
|
||||
'object': 'fa.brid.gy',
|
||||
})
|
||||
})
|
||||
|
||||
user = user.key.get()
|
||||
self.assertTrue(user.is_enabled(Fake))
|
||||
self.assertEqual(['eefake:user'], ExplicitEnableFake.fetched)
|
||||
|
||||
def test_follow_bot_user_copy_id_refreshes_profile(self):
|
||||
# bot user
|
||||
self.make_user('fa.brid.gy', cls=Web,
|
||||
copies=[Target(uri='eefake:bot', protocol='eefake')])
|
||||
|
||||
# profile that's opted out
|
||||
user = self.make_user('eefake:user', cls=ExplicitEnableFake, obj_as1={
|
||||
'id': 'eefake:user',
|
||||
'summary': '#nobridge',
|
||||
})
|
||||
self.assertFalse(user.is_enabled(Fake))
|
||||
|
||||
# updated profile isn't opted out
|
||||
ExplicitEnableFake.fetchable = {'eefake:user': {
|
||||
'id': 'eefake:user',
|
||||
'summary': 'never mind',
|
||||
}}
|
||||
|
||||
# follow should refresh profile
|
||||
with self.assertRaises(NoContent):
|
||||
ExplicitEnableFake.receive_as1({
|
||||
'objectType': 'activity',
|
||||
'verb': 'follow',
|
||||
'id': 'eefake:follow',
|
||||
'actor': 'eefake:user',
|
||||
'object': 'eefake:bot',
|
||||
})
|
||||
|
||||
user = user.key.get()
|
||||
self.assertTrue(user.is_enabled(Fake))
|
||||
|
|
|
@ -159,7 +159,9 @@ class Fake(User, protocol.Protocol):
|
|||
@classmethod
|
||||
def receive_as1(cls, our_as1, **kwargs):
|
||||
assert isinstance(our_as1, dict)
|
||||
return super().receive(Object(id=our_as1['id'], our_as1=our_as1), **kwargs)
|
||||
return super().receive(Object(id=our_as1['id'], our_as1=our_as1,
|
||||
source_protocol=cls.LABEL),
|
||||
**kwargs)
|
||||
|
||||
|
||||
class OtherFake(Fake):
|
||||
|
|
Ładowanie…
Reference in New Issue