X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FAPContact.php;h=841c028909b65c56913487844ce767fcf00a502e;hb=073695b33c5f9c5d89d91958b09259c59e12dd98;hp=fba0c24f4c22d2613ff15e29e8d78a803d76d7fd;hpb=4f3321cc9f76a53aabaa044feb021fccd5687f0d;p=friendica.git diff --git a/src/Model/APContact.php b/src/Model/APContact.php index fba0c24f4c..841c028909 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -26,7 +26,6 @@ use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\System; use Friendica\Database\DBA; -use Friendica\Database\DBStructure; use Friendica\DI; use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPException; @@ -116,6 +115,7 @@ class APContact * @return array profile array * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException + * @todo Rewrite parameter $update to avoid true|false|null (boolean is binary, null adds a third case) */ public static function getByURL(string $url, $update = null): array { @@ -124,7 +124,7 @@ class APContact return []; } - $fetched_contact = false; + $fetched_contact = []; if (empty($update)) { if (is_null($update)) { @@ -164,6 +164,8 @@ class APContact return $fetched_contact; } $url = $apcontact['url']; + } elseif (empty(parse_url($url, PHP_URL_PATH))) { + $apcontact['baseurl'] = $url; } // Detect multiple fast repeating request to the same address @@ -206,7 +208,7 @@ class APContact if ($failed) { self::markForArchival($fetched_contact ?: []); - return $fetched_contact ?? []; + return $fetched_contact; } } @@ -275,7 +277,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 +285,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']); @@ -465,7 +467,7 @@ class APContact } // Limit the length on incoming fields - $apcontact = DBStructure::getFieldsForTable('apcontact', $apcontact); + $apcontact = DI::dbaDefinition()->truncateFieldsForTable('apcontact', $apcontact); if (DBA::exists('apcontact', ['url' => $apcontact['url']])) { DBA::update('apcontact', $apcontact, ['url' => $apcontact['url']]); @@ -526,6 +528,7 @@ class APContact * * @param string $url inbox url * @param boolean $shared Shared Inbox + * @return void */ private static function unarchiveInbox(string $url, bool $shared) { @@ -535,4 +538,28 @@ class APContact HTTPSignature::setInboxStatus($url, true, $shared); } + + /** + * Check if the apcontact is a relay account + * + * @param array $apcontact + * + * @return bool + */ + public static function isRelay(array $apcontact): bool + { + if ($apcontact['nick'] != 'relay') { + return false; + } + + if ($apcontact['type'] == 'Application') { + return true; + } + + if (in_array($apcontact['type'], ['Group', 'Service']) && is_null($apcontact['outbox'])) { + return true; + } + + return false; + } }