X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FUpdateGServer.php;h=4b4e40d7666cadb639788c6c7d9123b96be3d749;hb=3d21742fbb744493285b4eb8a625db8417ad2165;hp=b94c5343a0f58815786f5b94410b7982e92c7d42;hpb=94954c810b3ee0f885029f9818b217e0817ad70b;p=friendica.git diff --git a/src/Worker/UpdateGServer.php b/src/Worker/UpdateGServer.php index b94c5343a0..4b4e40d766 100644 --- a/src/Worker/UpdateGServer.php +++ b/src/Worker/UpdateGServer.php @@ -1,31 +1,96 @@ . + * */ + namespace Friendica\Worker; use Friendica\Core\Logger; +use Friendica\Core\Worker; +use Friendica\Database\DBA; use Friendica\Model\GServer; +use Friendica\Network\HTTPException\InternalServerErrorException; +use Friendica\Util\Network; use Friendica\Util\Strings; +use GuzzleHttp\Psr7\Uri; +use Psr\Http\Message\UriInterface; class UpdateGServer { /** * Update the given server - * @param string $server_url Server URL + * + * @param string $server_url Server URL + * @param boolean $only_nodeinfo Only use nodeinfo for server detection + * @return void + * @throws \Exception */ - public static function execute($server_url) + public static function execute(string $server_url, bool $only_nodeinfo) { if (empty($server_url)) { return; } - $server_url = filter_var($server_url, FILTER_SANITIZE_URL); - if (substr(Strings::normaliseLink($server_url), 0, 7) != 'http://') { + $filtered = filter_var($server_url, FILTER_SANITIZE_URL); + if (substr(Strings::normaliseLink($filtered), 0, 7) != 'http://') { + GServer::setFailureByUrl($server_url); return; } - $ret = GServer::check($server_url); - Logger::info('Updated gserver', ['url' => $server_url, 'result' => $ret]); + // Silently dropping the worker task if the server domain is blocked + if (Network::isUrlBlocked($filtered)) { + GServer::setBlockedByUrl($filtered); + return; + } + + if (($filtered != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) { + GServer::setFailureByUrl($server_url); + return; + } + + $cleaned = GServer::cleanURL($server_url); + if (($cleaned != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) { + GServer::setFailureByUrl($server_url); + return; + } + + $ret = GServer::check($filtered, '', true, $only_nodeinfo); + Logger::info('Updated gserver', ['url' => $filtered, 'result' => $ret]); + } + + /** + * @param array|int $run_parameters Priority constant or array of options described in Worker::add + * @param string $serverUrl + * @param bool $onlyNodeInfo Only use NodeInfo for server detection + * @return int + * @throws InternalServerErrorException + */ + public static function add($run_parameters, string $serverUrl, bool $onlyNodeInfo = false): int + { + // Dropping the worker task if the server domain is blocked + if (Network::isUrlBlocked($serverUrl)) { + GServer::setBlockedByUrl($serverUrl); + return 0; + } + + // We have to convert the Uri back to string because worker parameters are saved in JSON format which + // doesn't allow for structured objects. + return Worker::add($run_parameters, 'UpdateGServer', $serverUrl, $onlyNodeInfo); } }