use Friendica\Capabilities\ICanCreateFromTableRow;
use Friendica\Content\Post\Entity;
use Friendica\Network;
+use Friendica\Util\Network as UtilNetwork;
use GuzzleHttp\Psr7\Uri;
use Psr\Log\LoggerInterface;
use stdClass;
{
return new Entity\PostMedia(
$row['uri-id'],
- $row['url'] ? new Uri($row['url']) : null,
+ UtilNetwork::isValidUri($row['url']) ? new Uri($row['url']) : '',
$row['type'],
$this->mimeTypeFactory->createFromContentType($row['mimetype']),
$row['media-uri-id'],
$row['width'],
$row['height'],
$row['size'],
- $row['preview'] ? new Uri($row['preview']) : null,
+ UtilNetwork::isValidUri($row['preview']) ? new Uri($row['preview']) : null,
$row['preview-width'],
$row['preview-height'],
$row['description'],
$row['name'],
- $row['author-url'] ? new Uri($row['author-url']) : null,
+ UtilNetwork::isValidUri($row['author-url']) ? new Uri($row['author-url']) : null,
$row['author-name'],
- $row['author-image'] ? new Uri($row['author-image']) : null,
- $row['publisher-url'] ? new Uri($row['publisher-url']) : null,
+ UtilNetwork::isValidUri($row['author-image']) ? new Uri($row['author-image']) : null,
+ UtilNetwork::isValidUri($row['publisher-url']) ? new Uri($row['publisher-url']) : null,
$row['publisher-name'],
- $row['publisher-image'] ? new Uri($row['publisher-image']) : null,
+ UtilNetwork::isValidUri($row['publisher-image']) ? new Uri($row['publisher-image']) : null,
$row['blurhash'],
$row['id']
);
$scheme = parse_url($url, PHP_URL_SCHEME);
return !empty($scheme) && in_array($scheme, ['http', 'https']) && parse_url($url, PHP_URL_HOST);
}
+
+ /**
+ * Check if a provided URI is valid
+ *
+ * @param string|null $uri
+ * @return boolean
+ */
+ public static function isValidUri(string $uri = null): bool
+ {
+ if (empty($uri)) {
+ return false;
+ }
+
+ try {
+ new Uri($uri);
+ } catch (\Exception $e) {
+ Logger::debug('Invalid URI', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'uri' => $uri]);
+ return false;
+ }
+ return true;
+ }
}