. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Webhook; use Espo\Core\Utils\Config; /** * @internal */ class AddressUtil { public function __construct( private Config $config, ) {} /** * @internal */ public function isAllowedUrl(string $url): bool { /** @var string[] $allowedAddressList */ $allowedAddressList = $this->config->get('webhookAllowedAddressList') ?? []; if (!$allowedAddressList) { return false; } $host = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $scheme = parse_url($url, PHP_URL_SCHEME); if (!is_string($host)) { return false; } if (!is_int($port)) { if ($scheme === 'https') { $port = 443; } else if ($scheme === 'http') { $port = 80; } } if (!is_int($port)) { return false; } $address = $host . ':' . $port; return in_array($address, $allowedAddressList); } }