]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/Diaspora.php
Fix the plink for reshared Diaspora posts
[friendica.git] / src / Protocol / Diaspora.php
index c4e7d9fb87fcf5f16adfb456de50515c9876c458..de8fa21777fa6fce39ad0a7944a936c5dec6b203 100644 (file)
@@ -293,37 +293,6 @@ class Diaspora
                return $contacts;
        }
 
-       /**
-        * repairs a signature that was double encoded
-        *
-        * The function is unused at the moment. It was copied from the old implementation.
-        *
-        * @param string  $signature The signature
-        * @param string  $handle    The handle of the signature owner
-        * @param integer $level     This value is only set inside this function to avoid endless loops
-        *
-        * @return string the repaired signature
-        * @throws \Exception
-        */
-       private static function repairSignature($signature, $handle = "", $level = 1)
-       {
-               if ($signature == "") {
-                       return ($signature);
-               }
-
-               if (base64_encode(base64_decode(base64_decode($signature))) == base64_decode($signature)) {
-                       $signature = base64_decode($signature);
-                       Logger::log("Repaired double encoded signature from Diaspora/Hubzilla handle ".$handle." - level ".$level, Logger::DEBUG);
-
-                       // Do a recursive call to be able to fix even multiple levels
-                       if ($level < 10) {
-                               $signature = self::repairSignature($signature, $handle, ++$level);
-                       }
-               }
-
-               return($signature);
-       }
-
        /**
         * verify the envelope and return the verified data
         *
@@ -542,7 +511,7 @@ class Diaspora
                $basedom = XML::parseString($xml);
 
                if (!is_object($basedom)) {
-                       Logger::log("XML is not parseable.");
+                       Logger::notice('XML is not parseable.');
                        return false;
                }
                $children = $basedom->children('https://joindiaspora.com/protocol');
@@ -556,7 +525,7 @@ class Diaspora
                } else {
                        // This happens with posts from a relais
                        if (empty($privKey)) {
-                               Logger::log("This is no private post in the old format", Logger::DEBUG);
+                               Logger::info('This is no private post in the old format');
                                return false;
                        }
 
@@ -575,7 +544,7 @@ class Diaspora
 
                        $decrypted = self::aesDecrypt($outer_key, $outer_iv, $ciphertext);
 
-                       Logger::log('decrypted: '.$decrypted, Logger::DEBUG);
+                       Logger::info('decrypted', ['data' => $decrypted]);
                        $idom = XML::parseString($decrypted);
 
                        $inner_iv = base64_decode($idom->iv);
@@ -724,7 +693,7 @@ class Diaspora
 
                $type = $fields->getName();
 
-               Logger::log("Received message type ".$type." from ".$sender." for user ".$importer["uid"], Logger::DEBUG);
+               Logger::info('Received message', ['type' => $type, 'sender' => $sender, 'user' => $importer["uid"]]);
 
                switch ($type) {
                        case "account_migration":
@@ -816,7 +785,7 @@ class Diaspora
                $data = XML::parseString($msg["message"]);
 
                if (!is_object($data)) {
-                       Logger::log("No valid XML ".$msg["message"], Logger::DEBUG);
+                       Logger::info('No valid XML', ['message' => $msg['message']]);
                        return false;
                }
 
@@ -928,7 +897,7 @@ class Diaspora
                if (isset($parent_author_signature)) {
                        $key = self::key($msg["author"]);
                        if (empty($key)) {
-                               Logger::log("No key found for parent author ".$msg["author"], Logger::DEBUG);
+                               Logger::info('No key found for parent', ['author' => $msg["author"]]);
                                return false;
                        }
 
@@ -940,7 +909,7 @@ class Diaspora
 
                $key = self::key($fields->author);
                if (empty($key)) {
-                       Logger::log("No key found for author ".$fields->author, Logger::DEBUG);
+                       Logger::info('No key found', ['author' => $fields->author]);
                        return false;
                }
 
@@ -994,7 +963,7 @@ class Diaspora
                }
 
                if (DBA::isResult($person)) {
-                       Logger::debug("In cache " . print_r($person, true));
+                       Logger::debug('In cache', ['person' => $person]);
 
                        if (is_null($update)) {
                                // update record occasionally so it doesn't get stale
@@ -1108,7 +1077,7 @@ class Diaspora
         */
        public static function urlFromContactGuid($fcontact_guid)
        {
-               Logger::log("fcontact guid is ".$fcontact_guid, Logger::DEBUG);
+               Logger::info('fcontact', ['guid' => $fcontact_guid]);
 
                $r = q(
                        "SELECT `url` FROM `fcontact` WHERE `url` != '' AND `network` = '%s' AND `guid` = '%s'",
@@ -2332,13 +2301,24 @@ class Diaspora
                Logger::info('Participation stored', ['id' => $message_id, 'guid' => $guid, 'parent_guid' => $parent_guid, 'author' => $author]);
 
                // Send all existing comments and likes to the requesting server
-               $comments = Item::select(['id', 'uri-id', 'parent', 'verb'], ['parent' => $parent_item['id'], 'gravity' => [GRAVITY_COMMENT, GRAVITY_ACTIVITY]]);
+               $comments = Item::select(['id', 'uri-id', 'parent-author-network', 'author-network', 'verb'],
+                       ['parent' => $parent_item['id'], 'gravity' => [GRAVITY_COMMENT, GRAVITY_ACTIVITY]]);
                while ($comment = Item::fetch($comments)) {
-                       if (in_array($comment["verb"], [Activity::FOLLOW, Activity::TAG])) {
+                       if (in_array($comment['verb'], [Activity::FOLLOW, Activity::TAG])) {
                                Logger::info('participation messages are not relayed', ['item' => $comment['id']]);
                                continue;
                        }
 
+                       if ($comment['author-network'] == Protocol::ACTIVITYPUB) {
+                               Logger::info('Comments from ActivityPub authors are not relayed', ['item' => $comment['id']]);
+                               continue;
+                       }
+
+                       if ($comment['parent-author-network'] == Protocol::ACTIVITYPUB) {
+                               Logger::info('Comments to comments from ActivityPub authors are not relayed', ['item' => $comment['id']]);
+                               continue;
+                       }
+
                        Logger::info('Deliver participation', ['item' => $comment['id'], 'contact' => $author_contact["cid"]]);
                        if (Worker::add(PRIORITY_HIGH, 'Delivery', Delivery::POST, $comment['id'], $author_contact["cid"])) {
                                Post\DeliveryData::incrementQueueCount($comment['uri-id'], 1);
@@ -2623,7 +2603,7 @@ class Diaspora
 
                // Do we already have this item?
                $fields = ['body', 'title', 'attach', 'app', 'created', 'object-type', 'uri', 'guid',
-                       'author-name', 'author-link', 'author-avatar'];
+                       'author-name', 'author-link', 'author-avatar', 'plink'];
                $condition = ['guid' => $guid, 'visible' => true, 'deleted' => false, 'private' => [Item::PUBLIC, Item::UNLISTED]];
                $item = Item::selectFirst($fields, $condition);
 
@@ -2667,7 +2647,7 @@ class Diaspora
 
                        if ($stored) {
                                $fields = ['body', 'title', 'attach', 'app', 'created', 'object-type', 'uri', 'guid',
-                                       'author-name', 'author-link', 'author-avatar'];
+                                       'author-name', 'author-link', 'author-avatar', 'plink'];
                                $condition = ['guid' => $guid, 'visible' => true, 'deleted' => false, 'private' => [Item::PUBLIC, Item::UNLISTED]];
                                $item = Item::selectFirst($fields, $condition);
 
@@ -2769,8 +2749,6 @@ class Diaspora
                        return false;
                }
 
-               $orig_url = DI::baseUrl()."/display/".$original_item["guid"];
-
                $datarray = [];
 
                $datarray["uid"] = $importer["uid"];
@@ -2795,13 +2773,13 @@ class Diaspora
 
                /// @todo Copy tag data from original post
 
-               $prefix = share_header(
+               $prefix = BBCode::getShareOpeningTag(
                        $original_item["author-name"],
                        $original_item["author-link"],
                        $original_item["author-avatar"],
-                       $original_item["guid"],
+                       $original_item["plink"],
                        $original_item["created"],
-                       $orig_url
+                       $original_item["guid"]
                );
 
                if (!empty($original_item['title'])) {
@@ -3416,7 +3394,7 @@ class Diaspora
                                "profile" => $profile,
                                "signature" => $signature];
 
-               Logger::log("Send account migration ".print_r($message, true), Logger::DEBUG);
+               Logger::info('Send account migration', ['msg' => $message]);
 
                return self::buildAndTransmit($owner, $contact, "account_migration", $message);
        }
@@ -3460,7 +3438,7 @@ class Diaspora
                                "following" => "true",
                                "sharing" => "true"];
 
-               Logger::log("Send share ".print_r($message, true), Logger::DEBUG);
+               Logger::info('Send share', ['msg' => $message]);
 
                return self::buildAndTransmit($owner, $contact, "contact", $message);
        }
@@ -3481,7 +3459,7 @@ class Diaspora
                                "following" => "false",
                                "sharing" => "false"];
 
-               Logger::log("Send unshare ".print_r($message, true), Logger::DEBUG);
+               Logger::info('Send unshare', ['msg' => $message]);
 
                return self::buildAndTransmit($owner, $contact, "contact", $message);
        }
@@ -3676,8 +3654,8 @@ class Diaspora
 
                        if ($item['author-link'] != $item['owner-link']) {
                                require_once 'mod/share.php';
-                               $body = share_header($item['author-name'], $item['author-link'], $item['author-avatar'],
-                                       "", $item['created'], $item['plink']) . $body . '[/share]';
+                               $body = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'],
+                                       $item['plink'], $item['created']) . $body . '[/share]';
                        }
 
                        // convert to markdown
@@ -4043,7 +4021,7 @@ class Diaspora
 
                $message["parent_author_signature"] = self::signature($owner, $message);
 
-               Logger::log("Relayed data ".print_r($message, true), Logger::DEBUG);
+               Logger::info('Relayed data', ['msg' => $message]);
 
                return self::buildAndTransmit($owner, $contact, $type, $message, $public_batch, $item["guid"]);
        }
@@ -4078,7 +4056,7 @@ class Diaspora
                                "target_guid" => $item['guid'],
                                "target_type" => $target_type];
 
-               Logger::log("Got message ".print_r($message, true), Logger::DEBUG);
+               Logger::info('Got message', ['msg' => $message]);
 
                return self::buildAndTransmit($owner, $contact, $msg_type, $message, $public_batch, $item["guid"]);
        }
@@ -4319,7 +4297,7 @@ class Diaspora
        {
                $owner = User::getOwnerDataById($uid);
                if (empty($owner)) {
-                       Logger::log("No owner post, so not storing signature", Logger::DEBUG);
+                       Logger::info('No owner post, so not storing signature');
                        return false;
                }
 
@@ -4350,7 +4328,7 @@ class Diaspora
        {
                $owner = User::getOwnerDataById($uid);
                if (empty($owner)) {
-                       Logger::log("No owner post, so not storing signature", Logger::DEBUG);
+                       Logger::info('No owner post, so not storing signature');
                        return false;
                }