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) {
try {
DI::dsprContact()->updateFromProbeArray($data);
} catch (\InvalidArgumentException $e) {
Logger::error($e->getMessage(), ['url' => $url, 'data' => $data]);
}
} elseif (!empty($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);
}
/**

View File

@ -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']);