From e78471c847a1c590439012639a9200aea1c622c6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 8 Dec 2022 09:40:35 -0500 Subject: [PATCH] Throw exception when a few keys are missing from probe data array in Repository\DiasporaContact - Address part of https://github.com/friendica/friendica/issues/11993#issuecomment-1338134893 --- src/Model/Contact.php | 32 ++++++++++++++----- .../Diaspora/Repository/DiasporaContact.php | 12 +++++++ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 873de0890..79ddae713 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1395,9 +1395,17 @@ class Contact } if ($data['network'] == Protocol::DIASPORA) { - DI::dsprContact()->updateFromProbeArray($data); + try { + DI::dsprContact()->updateFromProbeArray($data); + } catch (\InvalidArgumentException $e) { + Logger::error($e->getMessage(), ['url' => $url, 'data' => $data]); + } } elseif (!empty($data['networks'][Protocol::DIASPORA])) { - DI::dsprContact()->updateFromProbeArray($data['networks'][Protocol::DIASPORA]); + try { + DI::dsprContact()->updateFromProbeArray($data['networks'][Protocol::DIASPORA]); + } catch (\InvalidArgumentException $e) { + Logger::error($e->getMessage(), ['url' => $url, 'data' => $data['networks'][Protocol::DIASPORA]]); + } } self::updateFromProbeArray($contact_id, $data); @@ -2485,15 +2493,23 @@ class Contact return false; } - $ret = Probe::uri($contact['url'], $network, $contact['uid']); + $data = Probe::uri($contact['url'], $network, $contact['uid']); - if ($ret['network'] == Protocol::DIASPORA) { - DI::dsprContact()->updateFromProbeArray($ret); - } elseif (!empty($ret['networks'][Protocol::DIASPORA])) { - DI::dsprContact()->updateFromProbeArray($ret['networks'][Protocol::DIASPORA]); + if ($data['network'] == Protocol::DIASPORA) { + try { + DI::dsprContact()->updateFromProbeArray($data); + } catch (\InvalidArgumentException $e) { + Logger::error($e->getMessage(), ['id' => $id, 'network' => $network, 'contact' => $contact, 'data' => $data]); + } + } elseif (!empty($data['networks'][Protocol::DIASPORA])) { + try { + DI::dsprContact()->updateFromProbeArray($data['networks'][Protocol::DIASPORA]); + } catch (\InvalidArgumentException $e) { + Logger::error($e->getMessage(), ['id' => $id, 'network' => $network, 'contact' => $contact, 'data' => $data]); + } } - return self::updateFromProbeArray($id, $ret); + return self::updateFromProbeArray($id, $data); } /** diff --git a/src/Protocol/Diaspora/Repository/DiasporaContact.php b/src/Protocol/Diaspora/Repository/DiasporaContact.php index ac8d200aa..1669707b9 100644 --- a/src/Protocol/Diaspora/Repository/DiasporaContact.php +++ b/src/Protocol/Diaspora/Repository/DiasporaContact.php @@ -234,6 +234,18 @@ class DiasporaContact extends BaseRepository */ public function updateFromProbeArray(array $data): Entity\DiasporaContact { + if (empty($data['url'])) { + throw new \InvalidArgumentException('Missing url key in Diaspora probe data array'); + } + + if (empty($data['guid'])) { + throw new \InvalidArgumentException('Missing guid key in Diaspora probe data array'); + } + + if (empty($data['pubkey'])) { + throw new \InvalidArgumentException('Missing pubkey key in Diaspora probe data array'); + } + $uriId = ItemURI::insert(['uri' => $data['url'], 'guid' => $data['guid']]); $contact = Contact::getByUriId($uriId, ['id', 'created']);