[PLUGIN][ActivityPub] Support federation of Tombstones
This commit is contained in:
parent
9cda64f275
commit
1d1d169a5c
@ -268,13 +268,13 @@ class ActivityPub extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
Log::error('ActivityPub @ freeNetworkDistribute: ' . $e->getMessage());
|
Log::error('ActivityPub @ freeNetworkDistribute: ' . $e->getMessage(), [$e]);
|
||||||
//$to_failed[$inbox] = $activity;
|
//$to_failed[$inbox] = $activity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($errors)) {
|
if (!empty($errors)) {
|
||||||
Log::error(sizeof($errors) . ' instance/s failed to handle the delete_profile activity!');
|
Log::error(sizeof($errors) . ' instance/s failed to handle our activity!');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,9 +124,9 @@ abstract class Model
|
|||||||
public static function toJson(mixed $object, ?int $options = null): string
|
public static function toJson(mixed $object, ?int $options = null): string
|
||||||
{
|
{
|
||||||
switch ($object::class) {
|
switch ($object::class) {
|
||||||
case 'App\Entity\Activity':
|
case \App\Entity\Activity::class:
|
||||||
return Activity::toJson($object, $options);
|
return Activity::toJson($object, $options);
|
||||||
case 'App\Entity\Note':
|
case \App\Entity\Note::class:
|
||||||
return Note::toJson($object, $options);
|
return Note::toJson($object, $options);
|
||||||
default:
|
default:
|
||||||
$type = self::jsonToType($object);
|
$type = self::jsonToType($object);
|
||||||
|
@ -40,6 +40,7 @@ use App\Core\Router\Router;
|
|||||||
use App\Entity\Activity as GSActivity;
|
use App\Entity\Activity as GSActivity;
|
||||||
use App\Util\Exception\ClientException;
|
use App\Util\Exception\ClientException;
|
||||||
use App\Util\Exception\NoSuchActorException;
|
use App\Util\Exception\NoSuchActorException;
|
||||||
|
use App\Util\Exception\NotFoundException;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
use Exception;
|
use Exception;
|
||||||
@ -165,11 +166,24 @@ class Activity extends Model
|
|||||||
'to' => ['https://www.w3.org/ns/activitystreams#Public'], // TODO: implement proper scope address
|
'to' => ['https://www.w3.org/ns/activitystreams#Public'], // TODO: implement proper scope address
|
||||||
'cc' => ['https://www.w3.org/ns/activitystreams#Public'],
|
'cc' => ['https://www.w3.org/ns/activitystreams#Public'],
|
||||||
];
|
];
|
||||||
$attr['object'] = ($attr['type'] === 'Create') ? self::jsonToType(Model::toJson($object->getObject())) : ActivityPub::getUriByObject($object->getObject());
|
try {
|
||||||
|
$object = $object->getObject(); // Throws NotFoundException
|
||||||
|
$attr['object'] = ($attr['type'] === 'Create') ? self::jsonToType(Model::toJson($object)) : ActivityPub::getUriByObject($object);
|
||||||
|
} catch (NotFoundException) {
|
||||||
|
// It seems this object was deleted, refer to it as a Tombstone
|
||||||
|
$uri = match ($object->getObjectType()) {
|
||||||
|
'note' => Router::url('note_view', ['id' => $object->getObjectId()], type: Router::ABSOLUTE_URL),
|
||||||
|
'actor' => Router::url('actor_view_id', ['id' => $object->getObjectId()], type: Router::ABSOLUTE_URL),
|
||||||
|
default => throw new \App\Util\Exception\NotImplementedException(),
|
||||||
|
};
|
||||||
|
$attr['object'] = Type::create('Tombstone', [
|
||||||
|
'id' => $uri,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
if (!\is_string($attr['object'])) {
|
if (!\is_string($attr['object'])) {
|
||||||
$attr['to'] = array_unique(array_merge($attr['to'], $attr['object']->get('to')));
|
$attr['to'] = array_unique(array_merge($attr['to'], $attr['object']->get('to') ?? []));
|
||||||
$attr['cc'] = array_unique(array_merge($attr['cc'], $attr['object']->get('cc')));
|
$attr['cc'] = array_unique(array_merge($attr['cc'], $attr['object']->get('cc') ?? []));
|
||||||
}
|
}
|
||||||
|
|
||||||
$type = self::jsonToType($attr);
|
$type = self::jsonToType($attr);
|
||||||
|
Loading…
Reference in New Issue
Block a user