From 36d56a4041aa03f38d621f771bc613c4ada58a88 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 17 Jun 2022 11:48:52 +0200 Subject: [PATCH] Continued: - changed back to 'return false;' as other methods heavily rely on false instead of an empty array as pointed out by @heluecht@pirati.ca - $fetched_contact should be initialized as an empty array, let's not make this code more crazier than it already is (see APContact::getByURL()) --- src/Model/APContact.php | 8 ++++---- src/Module/DFRN/Notify.php | 11 ++++++----- src/Protocol/Diaspora.php | 14 +++++++------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index fba0c24f4c..2fff36ed49 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -124,7 +124,7 @@ class APContact return []; } - $fetched_contact = false; + $fetched_contact = []; if (empty($update)) { if (is_null($update)) { @@ -206,7 +206,7 @@ class APContact if ($failed) { self::markForArchival($fetched_contact ?: []); - return $fetched_contact ?? []; + return $fetched_contact; } } @@ -275,7 +275,7 @@ class APContact // Quit if none of the basic values are set if (empty($apcontact['url']) || empty($apcontact['type']) || (($apcontact['type'] != 'Tombstone') && empty($apcontact['inbox']))) { - return $fetched_contact ?? []; + return $fetched_contact; } elseif ($apcontact['type'] == 'Tombstone') { // The "inbox" field must have a content $apcontact['inbox'] = ''; @@ -283,7 +283,7 @@ class APContact // Quit if this doesn't seem to be an account at all if (!in_array($apcontact['type'], ActivityPub::ACCOUNT_TYPES)) { - return $fetched_contact ?? []; + return $fetched_contact; } $parts = parse_url($apcontact['url']); diff --git a/src/Module/DFRN/Notify.php b/src/Module/DFRN/Notify.php index 09fe7ec144..259aa14587 100644 --- a/src/Module/DFRN/Notify.php +++ b/src/Module/DFRN/Notify.php @@ -59,12 +59,13 @@ class Notify extends BaseModule } } - private static function dispatchPublic($postdata) + private static function dispatchPublic(array $postdata) { $msg = Diaspora::decodeRaw($postdata, '', true); - if (!$msg) { + if (!is_array($msg)) { // We have to fail silently to be able to hand it over to the salmon parser - return false; + Logger::warning('Diaspora::decodeRaw() has failed for some reason.'); + return; } // Fetch the corresponding public contact @@ -88,10 +89,10 @@ class Notify extends BaseModule System::xmlExit($ret, 'Done'); } - private static function dispatchPrivate($user, $postdata) + private static function dispatchPrivate(array $user, array $postdata) { $msg = Diaspora::decodeRaw($postdata, $user['prvkey'] ?? ''); - if (!$msg) { + if (!is_array($msg)) { System::xmlExit(4, 'Unable to parse message'); } diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 36f511a6ac..866f3c0163 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -203,20 +203,20 @@ class Diaspora } /** - * Decodes incoming Diaspora message in the new format + * Decodes incoming Diaspora message in the new format. This method returns false on an error. * * @param string $raw raw post message * @param string $privKey The private key of the importer * @param boolean $no_exit Don't do an http exit on error * - * @return array + * @return bool|array * 'message' -> decoded Diaspora XML message * 'author' -> author diaspora handle * 'key' -> author public key (converted to pkcs#8) * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function decodeRaw(string $raw, string $privKey = '', bool $no_exit = false): array + public static function decodeRaw(string $raw, string $privKey = '', bool $no_exit = false) { $data = json_decode($raw); @@ -232,7 +232,7 @@ class Diaspora if (!is_object($j_outer_key_bundle)) { Logger::notice('Outer Salmon did not verify. Discarding.'); if ($no_exit) { - return []; + return false; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -251,7 +251,7 @@ class Diaspora if (!is_object($basedom)) { Logger::notice('Received data does not seem to be an XML. Discarding. '.$xml); if ($no_exit) { - return []; + return false; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -277,7 +277,7 @@ class Diaspora if ($author_addr == '') { Logger::notice('No author could be decoded. Discarding. Message: ' . $xml); if ($no_exit) { - return []; + return false; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -287,7 +287,7 @@ class Diaspora if ($key == '') { Logger::notice("Couldn't get a key for handle " . $author_addr . ". Discarding."); if ($no_exit) { - return []; + return false; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } -- 2.39.5