activitypub.postprocess_as2: for Create/Update, put object's to/cc into activity

for possible Pleroma/Akkoma interop:
https://git.pleroma.social/pleroma/pleroma/-/issues/3206#note_108296
https://indieweb.social/@diego@lounge.collabfc.com/112977955332152430
pull/1273/head
Ryan Barrett 2024-08-21 11:39:06 -07:00
rodzic 6ce612d83d
commit e2b6b59ff4
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 6BE31FDF4776E9D4
4 zmienionych plików z 28 dodań i 0 usunięć

Wyświetl plik

@ -796,6 +796,14 @@ def postprocess_as2(activity, orig_obj=None, wrap=True):
for recip in as1.get_objects(orig_obj, field): for recip in as1.get_objects(orig_obj, field):
add(cc, util.get_url(recip) or recip.get('id')) add(cc, util.get_url(recip) or recip.get('id'))
# for CRUD activities, Pleroma (and Akkoma?) seem to crash if the activity's
# to and cc aren't exactly the same as the object's. (I think?)
# https://indieweb.social/@diego@lounge.collabfc.com/112977955332152430
# https://git.pleroma.social/pleroma/pleroma/-/issues/3206#note_108296
if type in ('Create', 'Update'):
activity['to'] = util.get_list(obj, 'to')
activity['cc'] = util.get_list(obj, 'cc')
# WARNING: activity here is AS2, but we're using as1.is_dm. right now the # WARNING: activity here is AS2, but we're using as1.is_dm. right now the
# logic is effectively the same for our purposes, but watch out here if that # logic is effectively the same for our purposes, but watch out here if that
# ever changes. # ever changes.

Wyświetl plik

@ -2459,6 +2459,19 @@ class ActivityPubUtilsTest(TestCase):
self.assertEqual(['https://masto.foo/@other'], self.assertEqual(['https://masto.foo/@other'],
postprocess_as2(obj)['cc']) postprocess_as2(obj)['cc'])
def test_postprocess_as2_object_to_cc_into_activity(self):
got = postprocess_as2({
'@context': 'https://www.w3.org/ns/activitystreams',
'type': 'Create',
'object': {
'to': ['abc'],
'cc': ['def', 'xyz'],
},
})
self.assertEqual(['abc', 'https://www.w3.org/ns/activitystreams#Public'],
got['to'])
self.assertEqual(['def', 'xyz'], got['cc'])
def test_postprocess_as2_dm_note(self): def test_postprocess_as2_dm_note(self):
dm = { dm = {
'objectType': 'note', 'objectType': 'note',

Wyświetl plik

@ -158,6 +158,7 @@ class IntegrationTests(TestCase):
'cc': ['http://inst/bob'], 'cc': ['http://inst/bob'],
}, },
'to': ['https://www.w3.org/ns/activitystreams#Public'], 'to': ['https://www.w3.org/ns/activitystreams#Public'],
'cc': ['http://inst/bob'],
}) })

Wyświetl plik

@ -277,6 +277,12 @@ AS2_CREATE = {
}], }],
}, },
'to': [as2.PUBLIC_AUDIENCE], 'to': [as2.PUBLIC_AUDIENCE],
'cc': [
'https://mas.to/author',
'https://mas.to/bystander',
'https://mas.to/recipient',
as2.PUBLIC_AUDIENCE,
],
} }
AS2_UPDATE = copy.deepcopy(AS2_CREATE) AS2_UPDATE = copy.deepcopy(AS2_CREATE)
AS2_UPDATE.update({ AS2_UPDATE.update({