Improve communication

This commit is contained in:
Michael 2018-09-22 14:12:54 +00:00
parent b906b083bc
commit 214407bdc8
4 changed files with 49 additions and 29 deletions

View file

@ -215,6 +215,10 @@ if (strlen($a->module)) {
* First see if we have an addon which is masquerading as a module. * First see if we have an addon which is masquerading as a module.
*/ */
if ($a->module == 'object') {
$a->module = 'display';
}
// Compatibility with the Android Diaspora client // Compatibility with the Android Diaspora client
if ($a->module == 'stream') { if ($a->module == 'stream') {
goaway('network?f=&order=post'); goaway('network?f=&order=post');

View file

@ -155,9 +155,11 @@ class ActivityPub
if ($receiver == $profile['followers'] && !empty($item_profile['followers'])) { if ($receiver == $profile['followers'] && !empty($item_profile['followers'])) {
$receiver = $item_profile['followers']; $receiver = $item_profile['followers'];
} }
if ($receiver != $item['owner-link']) {
$permissions[$element][] = $receiver; $permissions[$element][] = $receiver;
} }
} }
}
return $permissions; return $permissions;
} }
@ -171,7 +173,7 @@ class ActivityPub
$terms = Term::tagArrayFromItemId($item['id']); $terms = Term::tagArrayFromItemId($item['id']);
$contacts = []; $contacts[$item['author-link']] = $item['author-link'];
if (!$item['private']) { if (!$item['private']) {
$data['to'][] = self::PUBLIC; $data['to'][] = self::PUBLIC;
@ -213,11 +215,6 @@ class ActivityPub
$contacts[$contact['url']] = $contact['url']; $contacts[$contact['url']] = $contact['url'];
} }
} }
if (empty($data['to'])) {
$data['to'] = $data['cc'];
$data['cc'] = [];
}
} }
$parents = Item::select(['author-link', 'owner-link'], ['parent' => $item['parent']]); $parents = Item::select(['author-link', 'owner-link'], ['parent' => $item['parent']]);
@ -236,6 +233,11 @@ class ActivityPub
} }
DBA::close($parents); DBA::close($parents);
if (empty($data['to'])) {
$data['to'] = $data['cc'];
$data['cc'] = [];
}
return $data; return $data;
} }
@ -318,9 +320,12 @@ class ActivityPub
$data['updated'] = DateTimeFormat::utc($item["edited"]."+00:00", DateTimeFormat::ATOM); $data['updated'] = DateTimeFormat::utc($item["edited"]."+00:00", DateTimeFormat::ATOM);
} }
$data['context_id'] = $item['parent'];
$data['context'] = self::createConversationURLFromItem($item);
$data = array_merge($data, ActivityPub::createPermissionBlockForItem($item)); $data = array_merge($data, ActivityPub::createPermissionBlockForItem($item));
$data['object'] = self::createNote($item); $data['object'] = self::createObjectTypeFromItem($item);
$owner = User::getOwnerDataById($item['uid']); $owner = User::getOwnerDataById($item['uid']);
@ -341,7 +346,7 @@ class ActivityPub
'conversation' => 'ostatus:conversation', 'conversation' => 'ostatus:conversation',
'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri']]]; 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri']]];
$data = array_merge($data, self::createNote($item)); $data = array_merge($data, self::createObjectTypeFromItem($item));
return $data; return $data;
@ -364,15 +369,31 @@ class ActivityPub
$tags[] = ['type' => 'Mention', 'href' => $term['url'], 'name' => $mention]; $tags[] = ['type' => 'Mention', 'href' => $term['url'], 'name' => $mention];
} }
} }
return $tags; return $tags;
} }
public static function createNote($item) private static function createConversationURLFromItem($item)
{ {
$conversation = DBA::selectFirst('conversation', ['conversation-uri'], ['item-uri' => $item['parent-uri']]);
if (DBA::isResult($conversation) && !empty($conversation['conversation-uri'])) {
$conversation_uri = $conversation['conversation-uri'];
} else {
$conversation_uri = $item['parent-uri'];
}
return $conversation_uri;
}
private static function createObjectTypeFromItem($item)
{
if (!empty($item['title'])) {
$type = 'Article';
} else {
$type = 'Note';
}
$data = []; $data = [];
$data['id'] = $item['uri']; $data['id'] = $item['uri'];
$data['type'] = 'Note'; $data['type'] = $type;
$data['summary'] = null; // Ignore by now $data['summary'] = null; // Ignore by now
if ($item['uri'] != $item['thr-parent']) { if ($item['uri'] != $item['thr-parent']) {
@ -387,19 +408,12 @@ class ActivityPub
$data['updated'] = DateTimeFormat::utc($item["edited"]."+00:00", DateTimeFormat::ATOM); $data['updated'] = DateTimeFormat::utc($item["edited"]."+00:00", DateTimeFormat::ATOM);
} }
$data['url'] = $item['uri']; $data['url'] = $item['plink'];
$data['attributedTo'] = $item['author-link']; $data['attributedTo'] = $item['author-link'];
$data['actor'] = $item['author-link']; $data['actor'] = $item['author-link'];
$data['sensitive'] = false; // - Query NSFW $data['sensitive'] = false; // - Query NSFW
$data['context_id'] = $item['parent'];
$conversation = DBA::selectFirst('conversation', ['conversation-uri'], ['item-uri' => $item['parent-uri']]); $data['conversation'] = $data['context'] = self::createConversationURLFromItem($item);
if (DBA::isResult($conversation) && !empty($conversation['conversation-uri'])) {
$conversation_uri = $conversation['conversation-uri'];
} else {
$conversation_uri = $item['parent-uri'];
}
$data['conversation'] = $conversation_uri;
if (!empty($item['title'])) { if (!empty($item['title'])) {
$data['name'] = BBCode::convert($item['title'], false, 7); $data['name'] = BBCode::convert($item['title'], false, 7);
@ -704,14 +718,17 @@ class ActivityPub
if (LDSignature::isSigned($activity)) { if (LDSignature::isSigned($activity)) {
$ld_signer = LDSignature::getSigner($activity); $ld_signer = LDSignature::getSigner($activity);
if (!empty($ld_signer)) { if (!empty($ld_signer && ($actor == $http_signer))) {
logger('The HTTP and the JSON-LD signature belong to ' . $ld_signer, LOGGER_DEBUG);
$trust_source = true;
} elseif (!empty($ld_signer)) {
logger('JSON-LD signature is signed by ' . $ld_signer, LOGGER_DEBUG); logger('JSON-LD signature is signed by ' . $ld_signer, LOGGER_DEBUG);
$trust_source = true; $trust_source = true;
} elseif ($actor == $http_signer) { } elseif ($actor == $http_signer) {
logger('Bad JSON-LD signature, but HTTP signer fits the actor.', LOGGER_DEBUG); logger('Bad JSON-LD signature, but HTTP signer fits the actor.', LOGGER_DEBUG);
$trust_source = true; $trust_source = true;
} else { } else {
logger('Invalid JSON-LD signature.', LOGGER_DEBUG); logger('Invalid JSON-LD signature and the HTTP signer is different.', LOGGER_DEBUG);
$trust_source = false; $trust_source = false;
} }
} elseif ($actor == $http_signer) { } elseif ($actor == $http_signer) {
@ -1005,7 +1022,7 @@ class ActivityPub
return false; return false;
} }
logger('Using already stored item for url ' . $object_url, LOGGER_DEBUG); logger('Using already stored item for url ' . $object_url, LOGGER_DEBUG);
$data = self::createNote($item); $data = self::createObjectTypeFromItem($item);
} }
if (empty($data['type'])) { if (empty($data['type'])) {

View file

@ -11,7 +11,7 @@ use Friendica\Util\HTTPSignature;
class APDelivery extends BaseObject class APDelivery extends BaseObject
{ {
public static function execute($cmd, $item_id, $inbox) public static function execute($cmd, $item_id, $inbox, $uid)
{ {
logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG); logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG);
@ -19,9 +19,8 @@ class APDelivery extends BaseObject
} elseif ($cmd == Delivery::SUGGESTION) { } elseif ($cmd == Delivery::SUGGESTION) {
} elseif ($cmd == Delivery::RELOCATION) { } elseif ($cmd == Delivery::RELOCATION) {
} else { } else {
$item = Item::selectFirst(['uid'], ['id' => $item_id]);
$data = ActivityPub::createActivityFromItem($item_id); $data = ActivityPub::createActivityFromItem($item_id);
HTTPSignature::transmit($data, $inbox, $item['uid']); HTTPSignature::transmit($data, $inbox, $uid);
} }
return; return;

View file

@ -429,7 +429,7 @@ class Notifier
logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG); logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true], Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
'APDelivery', $cmd, $item_id, $inbox); '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