X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FDiaspora.php;h=00da7d3915d2dd68d0f7c6013af0472c5f4b3c8e;hb=e7884b14092b5f5f2c5656d622a625006bffb165;hp=34dc941400bf525c3622742a76476b26dd8be524;hpb=0668b2dfd57a1b246d179c13978a14308b6b23ef;p=friendica.git diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 34dc941400..00da7d3915 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1,6 +1,6 @@ The public key of the author * @throws \Exception */ - private static function message($guid, $server, $level = 0) + public static function message($guid, $server, $level = 0) { if ($level > 5) { return false; @@ -1498,6 +1498,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -1531,11 +1535,11 @@ class Diaspora // Will be overwritten for sharing accounts in Item::insert if ($fetched) { - $datarray["post-type"] = Item::PT_FETCHED; + $datarray["post-reason"] = Item::PR_FETCHED; } elseif ($datarray["uid"] == 0) { - $datarray["post-type"] = Item::PT_GLOBAL; + $datarray["post-reason"] = Item::PR_GLOBAL; } else { - $datarray["post-type"] = Item::PT_COMMENT; + $datarray["post-reason"] = Item::PR_COMMENT; } $datarray["guid"] = $guid; @@ -1548,6 +1552,7 @@ class Diaspora $datarray['thr-parent'] = $thr_parent ?: $toplevel_parent_item['uri']; $datarray["object-type"] = Activity\ObjectType::COMMENT; + $datarray["post-type"] = Item::PT_NOTE; $datarray["protocol"] = Conversation::PARCEL_DIASPORA; $datarray["source"] = $xml; @@ -1682,6 +1687,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $conversation = DBA::selectFirst('conv', [], ['uid' => $importer["uid"], 'guid' => $guid]); if (!DBA::isResult($conversation)) { $r = q( @@ -1741,6 +1750,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -1851,6 +1864,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $conversation = null; $condition = ['uid' => $importer["uid"], 'guid' => $conversation_guid]; @@ -1911,6 +1928,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + if (self::messageExists($importer["uid"], $guid)) { return true; } @@ -2281,9 +2302,6 @@ class Diaspora $item["body"] = self::replacePeopleGuid($item["body"], $item["author-link"]); - // Add OEmbed and other information to the body - $item["body"] = PageInfo::searchAndAppendToBody($item["body"], false, true); - return $item; } else { return $item; @@ -2407,6 +2425,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -2463,7 +2485,6 @@ class Diaspora Tag::storeFromBody($datarray['uri-id'], $datarray["body"]); - Post\Media::copy($original_item['uri-id'], $datarray['uri-id']); $datarray["app"] = $original_item["app"]; $datarray["plink"] = self::plink($author, $guid); @@ -2526,7 +2547,7 @@ class Diaspora } // Fetch items that are about to be deleted - $fields = ['uid', 'id', 'parent', 'author-link', 'file']; + $fields = ['uid', 'id', 'parent', 'author-link', 'uri-id']; // When we receive a public retraction, we delete every item that we find. if ($importer['uid'] == 0) { @@ -2542,7 +2563,7 @@ class Diaspora } while ($item = Post::fetch($r)) { - if (strstr($item['file'], '[')) { + if (DBA::exists('post-category', ['uri-id' => $item['uri-id'], 'uid' => $item['uid'], 'type' => Post\Category::FILE])) { Logger::log("Target guid " . $target_guid . " for user " . $item['uid'] . " is filed. So it won't be deleted.", Logger::DEBUG); continue; } @@ -2679,6 +2700,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -2703,18 +2728,13 @@ class Diaspora if ($data->photo) { foreach ($data->photo as $photo) { self::storePhotoAsMedia($datarray['uri-id'], $photo); - $body = "[img]".XML::unescape($photo->remote_photo_path). - XML::unescape($photo->remote_photo_name)."[/img]\n".$body; } $datarray["object-type"] = Activity\ObjectType::IMAGE; + $datarray["post-type"] = Item::PT_IMAGE; } else { $datarray["object-type"] = Activity\ObjectType::NOTE; - - // Add OEmbed and other information to the body - if (!self::isHubzilla($contact["url"])) { - $body = PageInfo::searchAndAppendToBody($body, false, true); - } + $datarray["post-type"] = Item::PT_NOTE; } /// @todo enable support for polls @@ -2744,9 +2764,9 @@ class Diaspora $datarray["direction"] = $fetched ? Conversation::PULL : Conversation::PUSH; if ($fetched) { - $datarray["post-type"] = Item::PT_FETCHED; + $datarray["post-reason"] = Item::PR_FETCHED; } elseif ($datarray["uid"] == 0) { - $datarray["post-type"] = Item::PT_GLOBAL; + $datarray["post-reason"] = Item::PR_GLOBAL; } $datarray["body"] = self::replacePeopleGuid($body, $contact["url"]); @@ -2850,9 +2870,9 @@ class Diaspora return false; } - $aes_key = openssl_random_pseudo_bytes(32); + $aes_key = random_bytes(32); $b_aes_key = base64_encode($aes_key); - $iv = openssl_random_pseudo_bytes(16); + $iv = random_bytes(16); $b_iv = base64_encode($iv); $ciphertext = self::aesEncrypt($aes_key, $iv, $msg); @@ -3099,17 +3119,7 @@ class Diaspora return; } - // Fetch some user id to have a valid handle to transmit the participation. - // In fact it doesn't matter which user sends this - but it is needed by the protocol. - // If the item belongs to a user, we take this user id. - if ($item['uid'] == 0) { - $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]; - $first_user = DBA::selectFirst('user', ['uid'], $condition); - $owner = User::getOwnerDataById($first_user['uid']); - } else { - $owner = User::getOwnerDataById($item['uid']); - } - + $owner = User::getOwnerDataById($item['uid']); $author = self::myHandle($owner); $message = ["author" => $author, @@ -3396,7 +3406,7 @@ class Diaspora $type = "reshare"; } else { $title = $item["title"]; - $body = $item["body"]; + $body = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']); // Fetch the title from an attached link - if there is one if (empty($item["title"]) && DI::pConfig()->get($owner['uid'], 'system', 'attach_link_title')) { @@ -3599,7 +3609,7 @@ class Diaspora return $result; } - $toplevel_item = Post::selectFirst(['guid', 'author-id', 'author-link'], ['id' => $item['parent'], 'parent' => $item['parent']]); + $toplevel_item = Post::selectFirst(['guid', 'author-id', 'author-link', 'gravity'], ['id' => $item['parent'], 'parent' => $item['parent']]); if (!DBA::isResult($toplevel_item)) { Logger::error('Missing parent conversation item', ['parent' => $item['parent']]); return false; @@ -3607,10 +3617,10 @@ class Diaspora $thread_parent_item = $toplevel_item; if ($item['thr-parent'] != $item['parent-uri']) { - $thread_parent_item = Post::selectFirst(['guid', 'author-id', 'author-link'], ['uri' => $item['thr-parent'], 'uid' => $item['uid']]); + $thread_parent_item = Post::selectFirst(['guid', 'author-id', 'author-link', 'gravity'], ['uri' => $item['thr-parent'], 'uid' => $item['uid']]); } - $body = $item["body"]; + $body = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']); // The replied to autor mention is prepended for clarity if: // - Item replied isn't yours @@ -3618,6 +3628,7 @@ class Diaspora // - Implicit mentions are enabled if ( $item['author-id'] != $thread_parent_item['author-id'] + && ($thread_parent_item['gravity'] != GRAVITY_PARENT) && (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) && !DI::config()->get('system', 'disable_implicit_mentions') ) {