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())
This commit is contained in:
Roland Häder 2022-06-17 11:48:52 +02:00
parent c467bff79f
commit 36d56a4041
3 changed files with 17 additions and 16 deletions

View File

@ -124,7 +124,7 @@ class APContact
return []; return [];
} }
$fetched_contact = false; $fetched_contact = [];
if (empty($update)) { if (empty($update)) {
if (is_null($update)) { if (is_null($update)) {
@ -206,7 +206,7 @@ class APContact
if ($failed) { if ($failed) {
self::markForArchival($fetched_contact ?: []); 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 // Quit if none of the basic values are set
if (empty($apcontact['url']) || empty($apcontact['type']) || (($apcontact['type'] != 'Tombstone') && empty($apcontact['inbox']))) { if (empty($apcontact['url']) || empty($apcontact['type']) || (($apcontact['type'] != 'Tombstone') && empty($apcontact['inbox']))) {
return $fetched_contact ?? []; return $fetched_contact;
} elseif ($apcontact['type'] == 'Tombstone') { } elseif ($apcontact['type'] == 'Tombstone') {
// The "inbox" field must have a content // The "inbox" field must have a content
$apcontact['inbox'] = ''; $apcontact['inbox'] = '';
@ -283,7 +283,7 @@ class APContact
// Quit if this doesn't seem to be an account at all // Quit if this doesn't seem to be an account at all
if (!in_array($apcontact['type'], ActivityPub::ACCOUNT_TYPES)) { if (!in_array($apcontact['type'], ActivityPub::ACCOUNT_TYPES)) {
return $fetched_contact ?? []; return $fetched_contact;
} }
$parts = parse_url($apcontact['url']); $parts = parse_url($apcontact['url']);

View File

@ -59,12 +59,13 @@ class Notify extends BaseModule
} }
} }
private static function dispatchPublic($postdata) private static function dispatchPublic(array $postdata)
{ {
$msg = Diaspora::decodeRaw($postdata, '', true); $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 // 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 // Fetch the corresponding public contact
@ -88,10 +89,10 @@ class Notify extends BaseModule
System::xmlExit($ret, 'Done'); System::xmlExit($ret, 'Done');
} }
private static function dispatchPrivate($user, $postdata) private static function dispatchPrivate(array $user, array $postdata)
{ {
$msg = Diaspora::decodeRaw($postdata, $user['prvkey'] ?? ''); $msg = Diaspora::decodeRaw($postdata, $user['prvkey'] ?? '');
if (!$msg) { if (!is_array($msg)) {
System::xmlExit(4, 'Unable to parse message'); System::xmlExit(4, 'Unable to parse message');
} }

View File

@ -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 $raw raw post message
* @param string $privKey The private key of the importer * @param string $privKey The private key of the importer
* @param boolean $no_exit Don't do an http exit on error * @param boolean $no_exit Don't do an http exit on error
* *
* @return array * @return bool|array
* 'message' -> decoded Diaspora XML message * 'message' -> decoded Diaspora XML message
* 'author' -> author diaspora handle * 'author' -> author diaspora handle
* 'key' -> author public key (converted to pkcs#8) * 'key' -> author public key (converted to pkcs#8)
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException * @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); $data = json_decode($raw);
@ -232,7 +232,7 @@ class Diaspora
if (!is_object($j_outer_key_bundle)) { if (!is_object($j_outer_key_bundle)) {
Logger::notice('Outer Salmon did not verify. Discarding.'); Logger::notice('Outer Salmon did not verify. Discarding.');
if ($no_exit) { if ($no_exit) {
return []; return false;
} else { } else {
throw new \Friendica\Network\HTTPException\BadRequestException(); throw new \Friendica\Network\HTTPException\BadRequestException();
} }
@ -251,7 +251,7 @@ class Diaspora
if (!is_object($basedom)) { if (!is_object($basedom)) {
Logger::notice('Received data does not seem to be an XML. Discarding. '.$xml); Logger::notice('Received data does not seem to be an XML. Discarding. '.$xml);
if ($no_exit) { if ($no_exit) {
return []; return false;
} else { } else {
throw new \Friendica\Network\HTTPException\BadRequestException(); throw new \Friendica\Network\HTTPException\BadRequestException();
} }
@ -277,7 +277,7 @@ class Diaspora
if ($author_addr == '') { if ($author_addr == '') {
Logger::notice('No author could be decoded. Discarding. Message: ' . $xml); Logger::notice('No author could be decoded. Discarding. Message: ' . $xml);
if ($no_exit) { if ($no_exit) {
return []; return false;
} else { } else {
throw new \Friendica\Network\HTTPException\BadRequestException(); throw new \Friendica\Network\HTTPException\BadRequestException();
} }
@ -287,7 +287,7 @@ class Diaspora
if ($key == '') { if ($key == '') {
Logger::notice("Couldn't get a key for handle " . $author_addr . ". Discarding."); Logger::notice("Couldn't get a key for handle " . $author_addr . ". Discarding.");
if ($no_exit) { if ($no_exit) {
return []; return false;
} else { } else {
throw new \Friendica\Network\HTTPException\BadRequestException(); throw new \Friendica\Network\HTTPException\BadRequestException();
} }