]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/APContact.php
Funkwhale context file moved
[friendica.git] / src / Model / APContact.php
index fba0c24f4c22d2613ff15e29e8d78a803d76d7fd..841c028909b65c56913487844ce767fcf00a502e 100644 (file)
@@ -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;
+       }
 }