From 6113fdc940d77fba1871463ee0c5a27e1f22eda7 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 6 Sep 2018 09:20:45 +0000 Subject: [PATCH] Issue 5733: Changing relationship values does work now again with DFRN --- mod/dfrn_notify.php | 2 +- src/Protocol/Diaspora.php | 37 +++++++++++++++++++++++++++++-------- src/Protocol/OStatus.php | 14 ++++++++++++-- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index f653faca95..666c388a4a 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -182,7 +182,7 @@ function dfrn_notify_post(App $a) { function dfrn_dispatch_public($postdata) { - $msg = Diaspora::decodeRaw([], $postdata); + $msg = Diaspora::decodeRaw([], $postdata, true); if (!$msg) { // We have to fail silently to be able to hand it over to the salmon parser return false; diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index c25eb96898..7af8dbd424 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -365,15 +365,16 @@ class Diaspora /** * @brief: Decodes incoming Diaspora message in the new format * - * @param array $importer Array of the importer user - * @param string $raw raw post message + * @param array $importer Array of the importer user + * @param string $raw raw post message + * @param boolean $no_exit Don't do an http exit on error * * @return array * 'message' -> decoded Diaspora XML message * 'author' -> author diaspora handle * 'key' -> author public key (converted to pkcs#8) */ - public static function decodeRaw(array $importer, $raw) + public static function decodeRaw(array $importer, $raw, $no_exit = false) { $data = json_decode($raw); @@ -388,7 +389,11 @@ class Diaspora if (!is_object($j_outer_key_bundle)) { logger('Outer Salmon did not verify. Discarding.'); - System::httpExit(400); + if ($no_exit) { + return false; + } else { + System::httpExit(400); + } } $outer_iv = base64_decode($j_outer_key_bundle->iv); @@ -403,7 +408,11 @@ class Diaspora if (!is_object($basedom)) { logger('Received data does not seem to be an XML. Discarding. '.$xml); - System::httpExit(400); + if ($no_exit) { + return false; + } else { + System::httpExit(400); + } } $base = $basedom->children(NAMESPACE_SALMON_ME); @@ -425,19 +434,31 @@ class Diaspora $author_addr = base64_decode($key_id); if ($author_addr == '') { logger('No author could be decoded. Discarding. Message: ' . $xml); - System::httpExit(400); + if ($no_exit) { + return false; + } else { + System::httpExit(400); + } } $key = self::key($author_addr); if ($key == '') { logger("Couldn't get a key for handle " . $author_addr . ". Discarding."); - System::httpExit(400); + if ($no_exit) { + return false; + } else { + System::httpExit(400); + } } $verify = Crypto::rsaVerify($signed_data, $signature, $key); if (!$verify) { logger('Message did not verify. Discarding.'); - System::httpExit(400); + if ($no_exit) { + return false; + } else { + System::httpExit(400); + } } return ['message' => (string)base64url_decode($base->data), diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 551b4ad887..ece265c99b 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -74,6 +74,16 @@ class OStatus $author["contact-id"] = $contact["id"]; $contact = null; + +/* + This here would be better, but we would get problems with contacts from the statusnet addon + This is kept here as a reminder for the future + + $cid = Contact::getIdForURL($author["author-link"], $importer["uid"]); + if ($cid) { + $contact = DBA::selectFirst('contact', [], ['id' => $cid]); + } +*/ if ($aliaslink != '') { $condition = ["`uid` = ? AND `alias` = ? AND `network` != ? AND `rel` IN (?, ?)", $importer["uid"], $aliaslink, Protocol::STATUSNET, @@ -219,7 +229,7 @@ class OStatus $gcid = GContact::update($contact); GContact::link($gcid, $contact["uid"], $contact["id"]); - } else { + } elseif ($contact["network"] != Protocol::DFRN) { $contact = null; } @@ -312,7 +322,7 @@ class OStatus self::$conv_list = []; } - logger("Import OStatus message", LOGGER_DEBUG); + logger('Import OStatus message for user ' . $importer['uid'], LOGGER_DEBUG); if ($xml == "") { return false;