mirror of
https://github.com/friendica/friendica
synced 2024-12-23 04:00:15 +00:00
Improve communication
This commit is contained in:
parent
b906b083bc
commit
214407bdc8
4 changed files with 49 additions and 29 deletions
|
@ -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');
|
||||||
|
|
|
@ -155,7 +155,9 @@ 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'];
|
||||||
}
|
}
|
||||||
$permissions[$element][] = $receiver;
|
if ($receiver != $item['owner-link']) {
|
||||||
|
$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'])) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue