• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/common.php
  • Класс: BitrixImOpenLinesCommon
  • Вызов: Common::checkPublicUrl
static function checkPublicUrl(string $publicUrl): Result
{
	$result = new Result;

	if (empty($publicUrl))
	{
		$message = Loc::getMessage('IMOL_ERROR_PUBLIC_URL_EMPTY');
		if (empty($message))
		{
			$message = 'Cannot detect a value of the portal public url.';
		}

		return $result->addError(new Error($message, 'PUBLIC_URL_EMPTY'));
	}

	if (
		(mb_strlen($publicUrl) < 11)
		|| !($parsedUrl = parse_url($publicUrl))
		|| empty($parsedUrl['host'])
		|| strpos($parsedUrl['host'], '.') === false
		|| !in_array($parsedUrl['scheme'], ['http', 'https'])
	)
	{
		$message = Loc::getMessage('IMOL_ERROR_PUBLIC_URL_MALFORMED');
		if (empty($message))
		{
			$message = 'Portal public url is malformed.';
		}

		return $result->addError(new Error($message, 'PUBLIC_URL_MALFORMED'));
	}

	// check for local address
	$host = $parsedUrl['host'];
	if (
		strtolower($host) == 'localhost'
		|| $host == '0.0.0.0'
		||
		(
			preg_match('#^d{1,3}.d{1,3}.d{1,3}.d{1,3}$#', $host)
			&& preg_match('#^(127|10|172.16|192.168).#', $host)
		)
	)
	{
		$message = Loc::getMessage('IMOL_ERROR_PUBLIC_URL_LOCALHOST', ['#HOST#' => $host]);
		if (empty($message))
		{
			$message = 'Portal public url points to localhost: '.$host;
		}

		return $result->addError(new Error($message, 'PUBLIC_URL_LOCALHOST'));
	}

	$error = (new BitrixMainWebUri($publicUrl))->convertToPunycode();
	if ($error instanceof BitrixMainError)
	{
		$message = Loc::getMessage('IMOL_ERROR_CONVERTING_PUNYCODE', ['#HOST#' => $host, '#ERROR#' => $error->getMessage()]);
		if (empty($message))
		{
			$message = 'Error converting hostname '.$host.' to punycode: '.$error->getMessage();
		}

		return $result->addError(new Error($message, 'PUBLIC_URL_MALFORMED'));
	}

	return $result;
}