Merge pull request #5835 from annando/ap3

Some more AP stuff ...
This commit is contained in:
Tobias Diekershoff 2018-10-06 09:18:30 +02:00 committed by GitHub
commit 3b41535dfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 44 deletions

View File

@ -83,8 +83,9 @@ function acl_content(App $a)
WHERE `uid` = %d AND NOT `self` WHERE `uid` = %d AND NOT `self`
AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
AND `success_update` >= `failure_update` AND `success_update` >= `failure_update`
AND `network` IN ('%s', '%s') $sql_extra2", AND `network` IN ('%s', '%s', '%s') $sql_extra2",
intval(local_user()), intval(local_user()),
DBA::escape(Protocol::ACTIVITYPUB),
DBA::escape(Protocol::DFRN), DBA::escape(Protocol::DFRN),
DBA::escape(Protocol::DIASPORA) DBA::escape(Protocol::DIASPORA)
); );
@ -169,10 +170,11 @@ function acl_content(App $a)
} elseif ($type == 'm') { } elseif ($type == 'm') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s', '%s')
$sql_extra2 $sql_extra2
ORDER BY `name` ASC ", ORDER BY `name` ASC ",
intval(local_user()), intval(local_user()),
DBA::escape(Protocol::ACTIVITYPUB),
DBA::escape(Protocol::DFRN), DBA::escape(Protocol::DFRN),
DBA::escape(Protocol::DIASPORA) DBA::escape(Protocol::DIASPORA)
); );

View File

@ -544,7 +544,7 @@ function contacts_content(App $a, $update = 0)
} }
$lblsuggest = (($contact['network'] === Protocol::DFRN) ? L10n::t('Suggest friends') : ''); $lblsuggest = (($contact['network'] === Protocol::DFRN) ? L10n::t('Suggest friends') : '');
$poll_enabled = in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL]); $poll_enabled = in_array($contact['network'], [Protocol::DFRN, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL]);
$nettype = L10n::t('Network type: %s', ContactSelector::networkToName($contact['network'], $contact["url"])); $nettype = L10n::t('Network type: %s', ContactSelector::networkToName($contact['network'], $contact["url"]));
@ -635,15 +635,15 @@ function contacts_content(App $a, $update = 0)
'$follow_text' => $follow_text, '$follow_text' => $follow_text,
'$profile_select' => $profile_select, '$profile_select' => $profile_select,
'$contact_id' => $contact['id'], '$contact_id' => $contact['id'],
'$block_text' => (($contact['blocked']) ? L10n::t('Unblock') : L10n::t('Block') ), '$block_text' => ($contact['blocked'] ? L10n::t('Unblock') : L10n::t('Block')),
'$ignore_text' => (($contact['readonly']) ? L10n::t('Unignore') : L10n::t('Ignore') ), '$ignore_text' => ($contact['readonly'] ? L10n::t('Unignore') : L10n::t('Ignore')),
'$insecure' => (($contact['network'] !== Protocol::DFRN && $contact['network'] !== Protocol::MAIL && $contact['network'] !== Protocol::DIASPORA) ? $insecure : ''), '$insecure' => (in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA]) ? '' : $insecure),
'$info' => $contact['info'], '$info' => $contact['info'],
'$cinfo' => ['info', '', $contact['info'], ''], '$cinfo' => ['info', '', $contact['info'], ''],
'$blocked' => (($contact['blocked']) ? L10n::t('Currently blocked') : ''), '$blocked' => ($contact['blocked'] ? L10n::t('Currently blocked') : ''),
'$ignored' => (($contact['readonly']) ? L10n::t('Currently ignored') : ''), '$ignored' => ($contact['readonly'] ? L10n::t('Currently ignored') : ''),
'$archived' => (($contact['archive']) ? L10n::t('Currently archived') : ''), '$archived' => ($contact['archive'] ? L10n::t('Currently archived') : ''),
'$pending' => (($contact['pending']) ? L10n::t('Awaiting connection acknowledge') : ''), '$pending' => ($contact['pending'] ? L10n::t('Awaiting connection acknowledge') : ''),
'$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($contact['hidden'] == 1), L10n::t('Replies/likes to your public posts <strong>may</strong> still be visible')], '$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($contact['hidden'] == 1), L10n::t('Replies/likes to your public posts <strong>may</strong> still be visible')],
'$notify' => ['notify', L10n::t('Notification for new posts'), ($contact['notify_new_posts'] == 1), L10n::t('Send a notification of every new post of this contact')], '$notify' => ['notify', L10n::t('Notification for new posts'), ($contact['notify_new_posts'] == 1), L10n::t('Send a notification of every new post of this contact')],
'$fetch_further_information' => $fetch_further_information, '$fetch_further_information' => $fetch_further_information,
@ -1085,7 +1085,7 @@ function contact_actions($contact)
} }
$contact_actions['block'] = [ $contact_actions['block'] = [
'label' => (intval($contact['blocked']) ? L10n::t('Unblock') : L10n::t('Block') ), 'label' => (intval($contact['blocked']) ? L10n::t('Unblock') : L10n::t('Block')),
'url' => 'contacts/' . $contact['id'] . '/block', 'url' => 'contacts/' . $contact['id'] . '/block',
'title' => L10n::t('Toggle Blocked status'), 'title' => L10n::t('Toggle Blocked status'),
'sel' => (intval($contact['blocked']) ? 'active' : ''), 'sel' => (intval($contact['blocked']) ? 'active' : ''),
@ -1093,7 +1093,7 @@ function contact_actions($contact)
]; ];
$contact_actions['ignore'] = [ $contact_actions['ignore'] = [
'label' => (intval($contact['readonly']) ? L10n::t('Unignore') : L10n::t('Ignore') ), 'label' => (intval($contact['readonly']) ? L10n::t('Unignore') : L10n::t('Ignore')),
'url' => 'contacts/' . $contact['id'] . '/ignore', 'url' => 'contacts/' . $contact['id'] . '/ignore',
'title' => L10n::t('Toggle Ignored status'), 'title' => L10n::t('Toggle Ignored status'),
'sel' => (intval($contact['readonly']) ? 'active' : ''), 'sel' => (intval($contact['readonly']) ? 'active' : ''),
@ -1102,7 +1102,7 @@ function contact_actions($contact)
if ($contact['uid'] != 0) { if ($contact['uid'] != 0) {
$contact_actions['archive'] = [ $contact_actions['archive'] = [
'label' => (intval($contact['archive']) ? L10n::t('Unarchive') : L10n::t('Archive') ), 'label' => (intval($contact['archive']) ? L10n::t('Unarchive') : L10n::t('Archive')),
'url' => 'contacts/' . $contact['id'] . '/archive', 'url' => 'contacts/' . $contact['id'] . '/archive',
'title' => L10n::t('Toggle Archive status'), 'title' => L10n::t('Toggle Archive status'),
'sel' => (intval($contact['archive']) ? 'active' : ''), 'sel' => (intval($contact['archive']) ? 'active' : ''),

View File

@ -810,7 +810,7 @@ function networkThreadedView(App $a, $update, $parent)
} }
// Only show it when unfiltered (no groups, no networks, ...) // Only show it when unfiltered (no groups, no networks, ...)
if (in_array($nets, ['', Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS]) && (strlen($sql_extra . $sql_extra2 . $sql_extra3) == 0)) { if (in_array($nets, ['', Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS]) && (strlen($sql_extra . $sql_extra2 . $sql_extra3) == 0)) {
if (DBA::isResult($r)) { if (DBA::isResult($r)) {
$top_limit = current($r)['order_date']; $top_limit = current($r)['order_date'];
$bottom_limit = end($r)['order_date']; $bottom_limit = end($r)['order_date'];

View File

@ -51,14 +51,14 @@ class ACL extends BaseObject
break; break;
case 'PRIVATE': case 'PRIVATE':
$networks = [Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA]; $networks = [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA];
break; break;
case 'TWO_WAY': case 'TWO_WAY':
if (!empty($a->user['prvnets'])) { if (!empty($a->user['prvnets'])) {
$networks = [Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA]; $networks = [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA];
} else { } else {
$networks = [Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA, Protocol::OSTATUS]; $networks = [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::MAIL, Protocol::DIASPORA, Protocol::OSTATUS];
} }
break; break;

View File

@ -61,11 +61,11 @@ class GContact
$search .= "%"; $search .= "%";
$results = DBA::p("SELECT `nurl` FROM `gcontact` $results = DBA::p("SELECT `nurl` FROM `gcontact`
WHERE NOT `hide` AND `network` IN (?, ?, ?) AND WHERE NOT `hide` AND `network` IN (?, ?, ?, ?) AND
((`last_contact` >= `last_failure`) OR (`updated` >= `last_failure`)) AND ((`last_contact` >= `last_failure`) OR (`updated` >= `last_failure`)) AND
(`addr` LIKE ? OR `name` LIKE ? OR `nick` LIKE ?) $extra_sql (`addr` LIKE ? OR `name` LIKE ? OR `nick` LIKE ?) $extra_sql
GROUP BY `nurl` ORDER BY `nurl` DESC LIMIT 1000", GROUP BY `nurl` ORDER BY `nurl` DESC LIMIT 1000",
Protocol::DFRN, $ostatus, $diaspora, $search, $search, $search Protocol::DFRN, Protocol::ACTIVITYPUB, $ostatus, $diaspora, $search, $search, $search
); );
$gcontacts = []; $gcontacts = [];
@ -138,7 +138,7 @@ class GContact
} }
// Assure that there are no parameter fragments in the profile url // Assure that there are no parameter fragments in the profile url
if (in_array($gcontact['network'], [Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, ""])) { if (in_array($gcontact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, ""])) {
$gcontact['url'] = self::cleanContactUrl($gcontact['url']); $gcontact['url'] = self::cleanContactUrl($gcontact['url']);
} }
@ -214,7 +214,7 @@ class GContact
throw new Exception('No name and photo for URL '.$gcontact['url']); throw new Exception('No name and photo for URL '.$gcontact['url']);
} }
if (!in_array($gcontact['network'], [Protocol::DFRN, Protocol::OSTATUS, Protocol::DIASPORA])) { if (!in_array($gcontact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::OSTATUS, Protocol::DIASPORA])) {
throw new Exception('No federated network ('.$gcontact['network'].') detected for URL '.$gcontact['url']); throw new Exception('No federated network ('.$gcontact['network'].') detected for URL '.$gcontact['url']);
} }
@ -651,7 +651,7 @@ class GContact
self::fixAlternateContactAddress($contact); self::fixAlternateContactAddress($contact);
// Remove unwanted parts from the contact url (e.g. "?zrl=...") // Remove unwanted parts from the contact url (e.g. "?zrl=...")
if (in_array($contact["network"], [Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS])) { if (in_array($contact["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS])) {
$contact["url"] = self::cleanContactUrl($contact["url"]); $contact["url"] = self::cleanContactUrl($contact["url"]);
} }

View File

@ -176,6 +176,8 @@ class Notifier
if (!in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION, Delivery::RELOCATION])) { if (!in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION, Delivery::RELOCATION])) {
$parent = $items[0]; $parent = $items[0];
self::activityPubDelivery($a, $cmd, $item_id, $uid, $target_item, $parent);
$fields = ['network', 'author-id', 'owner-id']; $fields = ['network', 'author-id', 'owner-id'];
$condition = ['uri' => $target_item["thr-parent"], 'uid' => $target_item["uid"]]; $condition = ['uri' => $target_item["thr-parent"], 'uid' => $target_item["uid"]];
$thr_parent = Item::selectFirst($fields, $condition); $thr_parent = Item::selectFirst($fields, $condition);
@ -422,27 +424,6 @@ class Notifier
} }
} }
$inboxes = [];
if ($target_item['origin']) {
$inboxes = ActivityPub\Transmitter::fetchTargetInboxes($target_item, $uid);
}
if ($parent['origin']) {
$parent_inboxes = ActivityPub\Transmitter::fetchTargetInboxes($parent, $uid);
$inboxes = array_merge($inboxes, $parent_inboxes);
}
// Fill the item cache
ActivityPub\Transmitter::createCachedActivityFromItem($item_id);
foreach ($inboxes as $inbox) {
logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
'APDelivery', $cmd, $item_id, $inbox, $uid);
}
// send salmon slaps to mentioned remote tags (@foo@example.com) in OStatus posts // send salmon slaps to mentioned remote tags (@foo@example.com) in OStatus posts
// They are especially used for notifications to OStatus users that don't follow us. // They are especially used for notifications to OStatus users that don't follow us.
if (!Config::get('system', 'dfrn_only') && count($url_recipients) && ($public_message || $push_notify) && $normal_mode) { if (!Config::get('system', 'dfrn_only') && count($url_recipients) && ($public_message || $push_notify) && $normal_mode) {
@ -527,6 +508,30 @@ class Notifier
return; return;
} }
private static function activityPubDelivery($a, $cmd, $item_id, $uid, $target_item, $parent)
{
$inboxes = [];
if ($target_item['origin']) {
$inboxes = ActivityPub\Transmitter::fetchTargetInboxes($target_item, $uid);
}
if ($parent['origin']) {
$parent_inboxes = ActivityPub\Transmitter::fetchTargetInboxes($parent, $uid);
$inboxes = array_merge($inboxes, $parent_inboxes);
}
// Fill the item cache
ActivityPub\Transmitter::createCachedActivityFromItem($item_id);
foreach ($inboxes as $inbox) {
logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
'APDelivery', $cmd, $item_id, $inbox, $uid);
}
}
private static function isForumPost($item, $owner) { private static function isForumPost($item, $owner) {
if (($item['author-id'] == $item['owner-id']) || if (($item['author-id'] == $item['owner-id']) ||
($owner['id'] == $item['contact-id']) || ($owner['id'] == $item['contact-id']) ||