diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index fb363dd57a..50710041c0 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -24,11 +24,13 @@ use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPClient\Client\HttpClientRequest; use Friendica\Protocol\ActivityPub; +use Friendica\Protocol\ATProtocol; use Friendica\Util\Images; use Friendica\Util\Network; use Friendica\Util\ParseUrl; use Friendica\Util\Proxy; use Friendica\Util\Strings; +use GuzzleHttp\Psr7\Uri; /** * Class Media @@ -237,7 +239,7 @@ class Media $media = self::addAccount($media); } - if (in_array($media['type'], [self::ACTIVITY, self::LD, self::JSON])) { + if (in_array($media['type'], [self::ACTIVITY, self::LD, self::JSON]) || self::isFederatedServer($media['url'])) { $media = self::addActivity($media); } @@ -248,6 +250,20 @@ class Media return $media; } + private static function isFederatedServer(string $url): bool + { + $baseurl = Network::getBaseUrl(new Uri($url)); + if (empty($baseurl)) { + return false; + } + + if (Strings::compareLink($baseurl, ATProtocol::WEB)) { + return true; + } + + return DBA::exists('gserver', ['nurl' => Strings::normaliseLink($baseurl), 'network' => Protocol::FEDERATED]); + } + private static function addPreviewData(array $media): array { if (!empty($media['preview-width']) && !empty($media['preview-height'])) { diff --git a/src/Util/Network.php b/src/Util/Network.php index a7e2fa536a..60f4bbab23 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -682,4 +682,19 @@ class Network return (string)Uri::fromParts($parts); } + + /** + * Get base url without a path, fragment or query + * + * @param UriInterface $uri + * @return string baseurl + */ + public static function getBaseUrl(UriInterface $uri): string + { + return $uri + ->withUserInfo('') + ->withQuery('') + ->withFragment('') + ->withPath(''); + } }