shell bypass 403
<?php
/**
* @package akeebabackup
* @copyright Copyright (c)2006-2025 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
namespace Akeeba\Component\AkeebaBackup\Administrator\Extension;
defined('_JEXEC') || die;
use Akeeba\Component\AkeebaBackup\Administrator\Service\ComponentParameters;
use Joomla\CMS\Application\CMSApplicationInterface;
use Joomla\CMS\Categories\CategoryServiceInterface;
use Joomla\CMS\Categories\CategoryServiceTrait;
use Joomla\CMS\Component\Router\RouterServiceInterface;
use Joomla\CMS\Component\Router\RouterServiceTrait;
use Joomla\CMS\Dispatcher\DispatcherInterface;
use Joomla\CMS\Extension\BootableExtensionInterface;
use Joomla\CMS\Extension\MVCComponent;
use Joomla\CMS\HTML\HTMLRegistryAwareTrait;
use Joomla\Database\DatabaseInterface;
use Joomla\DI\Container;
use Psr\Container\ContainerInterface;
class AkeebaBackupComponent extends MVCComponent implements
BootableExtensionInterface, CategoryServiceInterface, RouterServiceInterface
{
use HTMLRegistryAwareTrait;
use RouterServiceTrait;
use CategoryServiceTrait;
/**
* The container we were created with
*
* @var Container
* @since 9.3.0
*/
private $container;
/**
* Booting the extension. This is the function to set up the environment of the extension like
* registering new class loaders, etc.
*
* If required, some initial set up can be done from services of the container, eg.
* registering HTML services.
*
* @param ContainerInterface $container The container
*
* @return void
*
* @since 9.0.0
*/
public function boot(ContainerInterface $container)
{
$this->container = $container;
}
/**
* Returns the Container the extension was created with.
*
* We are going to use it wherever we are not instantiated through the extension object, e.g. fields.
*
* @return Container
* @since 9.3.0
*/
public function getContainer(): Container
{
return $this->container;
}
/**
* Returns the dispatcher for the given application.
*
* @param CMSApplicationInterface $application The application
*
* @return DispatcherInterface
* @since 9.3.0
*/
public function getDispatcher(CMSApplicationInterface $application): DispatcherInterface
{
$dispatcher = parent::getDispatcher($application);
if (method_exists($dispatcher, 'setDatabase'))
{
$dispatcher->setDatabase($this->container->get(DatabaseInterface::class));
}
return $dispatcher;
}
/**
* Returns the component's parameters service
*
* @return ComponentParameters
*
* @since 9.4.0
*/
public function getComponentParametersService(): ComponentParameters
{
return $this->container->get(ComponentParameters::class);
}
}