| Server IP : 46.105.57.169 / Your IP : 216.73.216.144 Web Server : Apache System : Linux webd003.cluster120.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : maitricfuz ( 93378) PHP Version : 8.4.10 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/maitricfuz/www/saint-martin-lg/libraries/regularlabs/src/ |
Upload File : |
<?php
/**
* @package Regular Labs Library
* @version 26.5.22170
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2026 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Library;
defined('_JEXEC') or die;
use Joomla\CMS\Http\HttpFactory as JHttpFactory;
use Joomla\Registry\Registry;
use RuntimeException;
/**
* Class Http
*
* @package RegularLabs\Library
*/
class Http
{
/**
* Get the contents of the given internal url
*/
public static function get(string $url, int $timeout = 20, string $default = ''): string
{
if (\RegularLabs\Library\Uri::isExternal($url)) {
return $default;
}
$content = @file_get_contents($url, \false, stream_context_create(['http' => ['timeout' => $timeout]]));
if ($content !== \false) {
return $content;
}
return self::getFromUrl($url, $timeout, $default);
}
/**
* Get the contents of the given external url from the Regular Labs server
*/
public static function getFromServer(string $url, int $timeout = 20, string $default = ''): string
{
$cache_ttl = \RegularLabs\Library\Input::getInt('cache', 0);
$cache = new \RegularLabs\Library\Cache(['http.get_from_server', $url, $timeout, $default, $cache_ttl]);
if ($cache_ttl) {
$cache->useFiles($cache_ttl > 1 ? $cache_ttl : null);
}
if ($cache->exists()) {
return $cache->get();
}
if (!\RegularLabs\Library\Document::isClient('administrator') || \RegularLabs\Library\User::isGuest()) {
die;
}
if (!str_starts_with($url, 'http')) {
$url = 'http://' . $url;
}
if (!self::isAllowedRegularLabsServerUrl($url)) {
die;
}
$content = self::getContents($url, $timeout);
self::sendRegularLabsServerHeaders($url);
if ($content == '') {
return $default;
}
return $cache->set($content ?: $default);
}
/**
* Get the contents of the given url
*/
public static function getFromUrl(string $url, int $timeout = 20, string $default = ''): string
{
$cache_ttl = \RegularLabs\Library\Input::getInt('cache', 0);
$cache = new \RegularLabs\Library\Cache(['http.get_from_url', $url, $timeout, $default, $cache_ttl]);
if ($cache_ttl) {
$cache->useFiles($cache_ttl > 1 ? $cache_ttl : null);
}
if ($cache->exists()) {
return $cache->get();
}
$content = self::getContents($url, $timeout);
if ($content == '') {
return $default;
}
return $cache->set($content ?: $default);
}
/**
* Load the contents of the given url
*/
private static function getContents(string $url, int $timeout = 20, string $default = ''): string
{
try {
// Adding a valid user agent string, otherwise some feed-servers returning an error
$options = new Registry(['userAgent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0']);
$response = JHttpFactory::getHttp($options)->get($url, [], $timeout);
$content = $response->body ?? $default;
} catch (RuntimeException $e) {
return $default;
}
// Remove prefix and postfix stuff added by SocketTransport
$content = preg_replace('#^\s*1c\s*(\{.*\})\s*0\s*$#s', '$1', $content);
return $content;
}
private static function isAllowedRegularLabsServerUrl(string $url): bool
{
$parts = parse_url($url);
if (($parts['host'] ?? '') !== 'download.regularlabs.com') {
return \false;
}
$path = $parts['path'] ?? '';
return in_array($path, ['/extensions.php', '/extensions.json', '/extensions.xml', '/check_key.php'], \true);
}
private static function sendRegularLabsServerHeaders(string $url): void
{
$content_type = str_contains($url, '.json') || str_contains($url, 'format=json') ? 'application/json' : 'text/xml';
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-type: ' . $content_type);
}
}