| Current Path : /var/www/consult-e-syn/public_html/plugins/system/admintools/feature/ |
| Current File : /var/www/consult-e-syn/public_html/plugins/system/admintools/feature/ipblacklist.php |
<?php
/**
* @package admintools
* @copyright Copyright (c)2010-2023 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;
defined('_JEXEC') || die;
class AtsystemFeatureIpblacklist extends AtsystemFeatureAbstract
{
protected $loadOrder = 40;
/** @var string Extra info to log when blocking an IP */
private $extraInfo = null;
/**
* Is this feature enabled?
*
* @return bool
*/
public function isEnabled()
{
return ($this->cparams->getValue('ipbl', 0) == 1);
}
/**
* Filters visitor access by IP. If the IP of the visitor is included in the
* blacklist, she gets a 403 error
*/
public function onAfterInitialise()
{
if (!$this->isIPBlocked())
{
return;
}
$message = $this->cparams->getValue('custom403msg', '');
if (empty($message))
{
$message = 'ADMINTOOLS_BLOCKED_MESSAGE';
}
// Merge the default translation with the current translation
$jlang = Factory::getLanguage();
// Front-end translation
$jlang->load('plg_system_admintools', JPATH_ADMINISTRATOR, 'en-GB', true);
$jlang->load('plg_system_admintools', JPATH_ADMINISTRATOR, $jlang->getDefault(), true);
$jlang->load('plg_system_admintools', JPATH_ADMINISTRATOR, null, true);
// Do we have an override?
$langOverride = $this->params->get('language_override', '');
if (!empty($langOverride))
{
$jlang->load('plg_system_admintools', JPATH_ADMINISTRATOR, $langOverride, true);
}
$message = Text::_($message);
if ($message == 'ADMINTOOLS_BLOCKED_MESSAGE')
{
$message = "Access Denied";
}
// Replace the Rescue URL placeholder
$message = AtsystemUtilRescueurl::processBlockMessage($message);
// Show the 403 message
if ($this->cparams->getValue('use403view', 0))
{
// Using a view
if (!$this->container->platform->getSessionVar('block', false, 'com_admintools') || $this->container->platform->isBackend())
{
// This is inside an if-block so that we don't end up in an infinite redirection loop
$this->container->platform->setSessionVar('block', true, 'com_admintools');
$this->container->platform->setSessionVar('message', $message, 'com_admintools');
// Close the session (logs out the user)
$this->container->session->close();
$base = Uri::base();
if ($this->container->platform->isBackend())
{
$base = rtrim($base);
$base = substr($base, 0, -13);
}
$this->container->platform->redirect($base, 307);
}
return;
}
// Rescue URL check
AtsystemUtilRescueurl::processRescueURL($this->exceptionsHandler);
if ($this->container->platform->isBackend())
{
// You can't use Joomla!'s error page in the admin area. Improvise!
header('HTTP/1.1 403 Forbidden');
echo $message;
$this->app->close();
}
// Using Joomla!'s error page
throw new Exception($message, 403);
}
/**
* Is the IP blocked by a permanent IP blacklist rule?
*
* @param string $ip The IP address to check. Skip or pass empty string / null to use the current visitor's IP.
*
* @return bool
*/
public function isIPBlocked($ip = null)
{
if (empty($ip))
{
// Get the visitor's IP address
$ip = AtsystemUtilFilter::getIp();
}
// Let's get a list of blocked IP ranges
$db = $this->db;
$sql = $db->getQuery(true)
->select($db->qn('ip'))
->from($db->qn('#__admintools_ipblock'));
$db->setQuery($sql);
try
{
$ipTable = $db->loadColumn();
}
catch (Exception $e)
{
// Do nothing if the query fails
$ipTable = null;
}
if (empty($ipTable))
{
return false;
}
$inList = AtsystemUtilFilter::IPinList($ipTable, $ip);
return ($inList === true);
}
}