Detection of local requests

This commit is contained in:
Michael 2021-07-19 06:14:14 +00:00
parent 01abea7c25
commit 2647514603
3 changed files with 36 additions and 13 deletions

View File

@ -804,30 +804,33 @@ class Photo
} }
/** /**
* Returns the GUID from picture links * Fetch the guid and scale from picture links
* *
* @param string $name Picture link * @param string $name Picture link
* @return string GUID * @return array
* @throws \Exception
*/ */
public static function getGUID($name) public static function getResourceData(string $name):array
{ {
$base = DI::baseUrl()->get(); $base = DI::baseUrl()->get();
$guid = str_replace([Strings::normaliseLink($base), '/photo/'], '', Strings::normaliseLink($name)); $guid = str_replace([Strings::normaliseLink($base), '/photo/'], '', Strings::normaliseLink($name));
if (parse_url($guid, PHP_URL_SCHEME)) {
return [];
}
$guid = self::stripExtension($guid); $guid = self::stripExtension($guid);
if (substr($guid, -2, 1) != "-") { if (substr($guid, -2, 1) != "-") {
return ''; return [];
} }
$scale = intval(substr($guid, -1, 1)); $scale = intval(substr($guid, -1, 1));
if (!is_numeric($scale)) { if (!is_numeric($scale)) {
return ''; return [];
} }
$guid = substr($guid, 0, -2); $guid = substr($guid, 0, -2);
return $guid; return ['guid' => $guid, 'scale' => $scale];
} }
/** /**
@ -839,13 +842,12 @@ class Photo
*/ */
public static function isLocal($name) public static function isLocal($name)
{ {
$guid = self::getGUID($name); $data = self::getResourceData($name);
if (empty($data)) {
if (empty($guid)) {
return false; return false;
} }
return DBA::exists('photo', ['resource-id' => $guid]); return DBA::exists('photo', ['resource-id' => $data['guid'], 'scale' => $data['scale']]);
} }
/** /**

View File

@ -74,6 +74,10 @@ class HTTPRequest implements IHTTPRequest
{ {
$stamp1 = microtime(true); $stamp1 = microtime(true);
if (Network::isLocalLink($url)) {
$this->logger->info('Local link', ['url' => $url, 'callstack' => System::callstack(20)]);
}
if (strlen($url) > 1000) { if (strlen($url) > 1000) {
$this->logger->debug('URL is longer than 1000 characters.', ['url' => $url, 'callstack' => System::callstack(20)]); $this->logger->debug('URL is longer than 1000 characters.', ['url' => $url, 'callstack' => System::callstack(20)]);
$this->profiler->saveTimestamp($stamp1, 'network'); $this->profiler->saveTimestamp($stamp1, 'network');
@ -226,6 +230,10 @@ class HTTPRequest implements IHTTPRequest
{ {
$stamp1 = microtime(true); $stamp1 = microtime(true);
if (Network::isLocalLink($url)) {
$this->logger->info('Local link', ['url' => $url, 'callstack' => System::callstack(20)]);
}
if (Network::isUrlBlocked($url)) { if (Network::isUrlBlocked($url)) {
$this->logger->info('Domain is blocked.' . ['url' => $url]); $this->logger->info('Domain is blocked.' . ['url' => $url]);
$this->profiler->saveTimestamp($stamp1, 'network'); $this->profiler->saveTimestamp($stamp1, 'network');
@ -328,6 +336,10 @@ class HTTPRequest implements IHTTPRequest
*/ */
public function finalUrl(string $url, int $depth = 1, bool $fetchbody = false) public function finalUrl(string $url, int $depth = 1, bool $fetchbody = false)
{ {
if (Network::isLocalLink($url)) {
$this->logger->info('Local link', ['url' => $url, 'callstack' => System::callstack(20)]);
}
if (Network::isUrlBlocked($url)) { if (Network::isUrlBlocked($url)) {
$this->logger->info('Domain is blocked.', ['url' => $url]); $this->logger->info('Domain is blocked.', ['url' => $url]);
return $url; return $url;

View File

@ -22,8 +22,8 @@
namespace Friendica\Util; namespace Friendica\Util;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\System;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Photo;
/** /**
* Image utilities * Image utilities
@ -184,7 +184,16 @@ class Images
return $data; return $data;
} }
if (Network::isLocalLink($url) && ($data = Photo::getResourceData($url))) {
$photo = Photo::getPhoto($data['guid'], $data['scale']);
if (!empty($photo)) {
$img_str = Photo::getImageDataForPhoto($photo);
}
}
if (empty($img_str)) {
$img_str = DI::httpRequest()->fetch($url, 4); $img_str = DI::httpRequest()->fetch($url, 4);
}
if (!$img_str) { if (!$img_str) {
return []; return [];