]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/APContact.php
Funkwhale context file moved
[friendica.git] / src / Model / APContact.php
index 2fff36ed495f8282b27f8ee766a7c5d1158342e3..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
        {
@@ -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
@@ -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;
+       }
 }