Account deletion could work now.

This commit is contained in:
Michael 2018-10-01 19:22:13 +00:00
parent 72c3a62e7f
commit 6020605d5c
3 changed files with 43 additions and 4 deletions

View File

@ -57,7 +57,6 @@ use Friendica\Core\Config;
* - Undo Accept (Problem: This could invert a contact accept or an event accept)
*
* Transmitter:
* - Delete (Application, Group, Organization, Person, Service)
* - Event
*
* Complicated:
@ -441,9 +440,13 @@ class ActivityPub
{
$inboxes = [];
$contacts = DBA::select('contact', ['notify', 'batch'], ['uid' => $uid,
'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'network' => Protocol::ACTIVITYPUB,
'archive' => false, 'pending' => false]);
$condition = ['uid' => $uid, 'network' => Protocol::ACTIVITYPUB, 'archive' => false, 'pending' => false];
if (!empty($uid)) {
$condition['rel'] = [Contact::FOLLOWER, Contact::FRIEND];
}
$contacts = DBA::select('contact', ['notify', 'batch'], $condition);
while ($contact = DBA::fetch($contacts)) {
$contact = defaults($contact, 'batch', $contact['notify']);
$inboxes[$contact] = $contact;
@ -731,6 +734,32 @@ class ActivityPub
return $data;
}
/**
* @brief Transmits a profile deletion to a given inbox
*
* @param integer $uid User ID
* @param string $inbox Target inbox
*/
public static function transmitProfileDeletion($uid, $inbox)
{
$owner = User::getOwnerDataById($uid);
$profile = APContact::getByURL($owner['url']);
$data = ['@context' => 'https://www.w3.org/ns/activitystreams',
'id' => System::baseUrl() . '/activity/' . System::createGUID(),
'type' => 'Delete',
'actor' => $owner['url'],
'object' => self::profile($uid),
'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
'to' => [self::PUBLIC_COLLECTION],
'cc' => []];
$signed = LDSignature::sign($data, $owner);
logger('Deliver profile deletion for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
HTTPSignature::transmit($signed, $inbox, $uid);
}
/**
* @brief Transmits a profile change to a given inbox
*

View File

@ -18,6 +18,8 @@ class APDelivery extends BaseObject
if ($cmd == Delivery::MAIL) {
} elseif ($cmd == Delivery::SUGGESTION) {
} elseif ($cmd == Delivery::RELOCATION) {
} elseif ($cmd == Delivery::REMOVAL) {
ActivityPub::transmitProfileDeletion($uid, $inbox);
} elseif ($cmd == Delivery::PROFILEUPDATE) {
ActivityPub::transmitProfileUpdate($uid, $inbox);
} else {

View File

@ -99,6 +99,14 @@ class Notifier
foreach ($r as $contact) {
Contact::terminateFriendship($user, $contact, true);
}
$inboxes = ActivityPub::fetchTargetInboxesforUser(0);
foreach ($inboxes as $inbox) {
logger('Account removal for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
'APDelivery', Delivery::REMOVAL, '', $inbox, $uid);
}
return;
} elseif ($cmd == Delivery::RELOCATION) {
$normal_mode = false;