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
This commit is contained in:
Hypolite Petovan 2022-12-08 09:40:35 -05:00
parent d87585477c
commit e78471c847
2 changed files with 36 additions and 8 deletions

View File

@ -1395,9 +1395,17 @@ class Contact
} }
if ($data['network'] == Protocol::DIASPORA) { 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])) { } 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); self::updateFromProbeArray($contact_id, $data);
@ -2485,15 +2493,23 @@ class Contact
return false; return false;
} }
$ret = Probe::uri($contact['url'], $network, $contact['uid']); $data = Probe::uri($contact['url'], $network, $contact['uid']);
if ($ret['network'] == Protocol::DIASPORA) { if ($data['network'] == Protocol::DIASPORA) {
DI::dsprContact()->updateFromProbeArray($ret); try {
} elseif (!empty($ret['networks'][Protocol::DIASPORA])) { DI::dsprContact()->updateFromProbeArray($data);
DI::dsprContact()->updateFromProbeArray($ret['networks'][Protocol::DIASPORA]); } 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);
} }
/** /**

View File

@ -234,6 +234,18 @@ class DiasporaContact extends BaseRepository
*/ */
public function updateFromProbeArray(array $data): Entity\DiasporaContact 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']]); $uriId = ItemURI::insert(['uri' => $data['url'], 'guid' => $data['guid']]);
$contact = Contact::getByUriId($uriId, ['id', 'created']); $contact = Contact::getByUriId($uriId, ['id', 'created']);