File manager - Edit - /home/ferretapmx/public_html/Json.zip
Back
PK �!�\��=� � Task/SetRegexFSFilter.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Set or unset a Regex filesystem filter * * @deprecated */ class SetRegexFSFilter extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\dZT0/ / Task/GetFSEntities.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the filesystem entities along with their filtering status (typically for rendering a GUI) * * @deprecated */ class GetFSEntities extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\}��q� � Task/SetRegexDBFilter.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Set or unset a Regex database filter * * @deprecated */ class SetRegexDBFilter extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\�qt] ] Task/Delete.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\StatisticModel; use RuntimeException; /** * Delete a backup record */ class Delete extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'backup_id' => 0, ]; $defConfig = array_merge($defConfig, $parameters); $backup_id = (int) $defConfig['backup_id']; /** @var StatisticModel $model */ $model = $this->factory->createModel('Statistic', 'Administrator', ['ignore_request' => true]); $model->setState('id', $backup_id); $model->setState('workaround.override_canDelete', true); $ids = [$backup_id]; if (!$model->delete($ids)) { /** @deprecated 10.1.0 Only for Joomla 4 b/c. Remove in 11. */ /** @noinspection PhpDeprecationInspection */ throw new RuntimeException($model->getError(), 500); } return true; } } PK �!�\�v� � Task/GetRegexFSFilters.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the regex filesystem filters * * @deprecated */ class GetRegexFSFilters extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\~�;� � Task/GetIncludedDirectories.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the extra included directories * * @deprecated */ class GetIncludedDirectories extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\vJ�% % Task/TestDBConnection.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Exception; use RuntimeException; /** * Test an extra database definition * * @deprecated */ class TestDBConnection extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\���> Task/RemoveIncludedDirectory.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use RuntimeException; /** * Remove an extra directory definition * * @deprecated */ class RemoveIncludedDirectory extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\ �% Task/SetFSFilter.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use RuntimeException; /** * Set or unset a filesystem filter * * @deprecated */ class SetFSFilter extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\�˝�� � Task/GetProfiles.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\ProfilesModel; use Exception; use RuntimeException; use stdClass; /** * Get a list of known backup profiles */ class GetProfiles extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { /** @var ProfilesModel $model */ $model = $this->factory->createModel('Profiles', 'Administrator', ['ignore_request' => true]); $model->setState('list.start', 0); $model->setState('list.limit', 0); $profiles = $model->getItems(); $ret = []; if (count($profiles)) { foreach ($profiles as $profile) { $temp = new stdClass(); $temp->id = $profile->id; $temp->name = $profile->description; $ret[] = $temp; } } return $ret; } } PK �!�\$�pe Task/SaveConfiguration.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use RuntimeException; /** * Save the configuration for a given profile * * @deprecated */ class SaveConfiguration extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\��� Task/GetGUIConfiguration.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the GUI definitions for the configuration page * * @deprecated */ class GetGUIConfiguration extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\���x Task/SetDBFilter.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Exception; use RuntimeException; /** * Set or unset a database filter * * @deprecated */ class SetDBFilter extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\0W��� � Task/Browse.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Return folder browser results * * @deprecated */ class Browse extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\8�s�C C Task/DeleteFiles.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\StatisticModel; use RuntimeException; /** * Delete the backup archives of a backup record */ class DeleteFiles extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'backup_id' => 0, ]; $defConfig = array_merge($defConfig, $parameters); $backup_id = (int) $defConfig['backup_id']; /** @var StatisticModel $model */ $model = $this->factory->createModel('Statistic', 'Administrator', ['ignore_request' => true]); $model->setState('id', $backup_id); $ids = [$backup_id]; if (!$model->deleteFiles($ids)) { /** @deprecated 10.1.0 Only for Joomla 4 b/c. Remove in 11. */ /** @noinspection PhpDeprecationInspection */ throw new RuntimeException($model->getError(), 500); } return true; } } PK �!�\.�� � Task/StepBackup.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\BackupModel; use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use Exception; use Joomla\CMS\Factory as JoomlaFactory; use Joomla\CMS\Filter\InputFilter; use RuntimeException; /** * Step through a backup job */ class StepBackup extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { $filter = InputFilter::getInstance(); // Get the passed configuration values $defConfig = [ 'tag' => 'json', 'backupid' => null, ]; $defConfig = array_merge($defConfig, $parameters); $tag = $filter->clean($defConfig['tag'], 'cmd'); $backupid = $filter->clean($defConfig['backupid'], 'cmd'); if (empty($backupid)) { throw new RuntimeException("JSON API :: stepBackup -- You have not provided the required backupid parameter. This parameter is MANDATORY since May 2016. Please update your client software to include this parameter."); } /** @var BackupModel $model */ $model = $this->factory->createModel('Backup', 'Administrator', ['ignore_request' => true]); $profile = max(1, (int) $model->getLastBackupProfile($tag, $backupid)); JoomlaFactory::getApplication()->getSession()->set('akeebabackup.profile', $profile); define('AKEEBA_PROFILE', $profile); $model->setState('tag', $tag); $model->setState('backupid', $backupid); $model->setState('profile', $profile); $array = $model->stepBackup(true); if ($array['Error'] != '') { throw new RuntimeException('A backup error has occurred: ' . $array['Error'], 500); } // BackupID contains the numeric backup record ID. backupid contains the backup id (usually in the form id123) $statistics = Factory::getStatistics(); $array['BackupID'] = $statistics->getId(); // Remote clients expect a boolean, not an integer. $array['HasRun'] = ($array['HasRun'] === 0); $array['Profile'] = Platform::getInstance()->get_active_profile(); return $array; } } PK �!�\�\� � Task/ListBackups.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\StatisticsModel; /** * List the backup records */ class ListBackups extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'from' => 0, 'limit' => 50, ]; $defConfig = array_merge($defConfig, $parameters); $from = (int) $defConfig['from']; $limit = (int) $defConfig['limit']; /** @var StatisticsModel $model */ $model = $this->factory->createModel('Statistics', 'Administrator', ['ignore_request' => true]); $model->setState('list.start', $from); $model->setState('list.limit', $limit); return $model->getStatisticsListWithMeta(false); } } PK �!�\w�˧ Task/Download.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use RuntimeException; /** * Download a chunk of a backup archive over HTTP */ class Download extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'backup_id' => 0, 'part_id' => 1, 'segment' => 1, 'chunk_size' => 1, ]; $defConfig = array_merge($defConfig, $parameters); $backup_id = (int)$defConfig['backup_id']; $part_id = (int)$defConfig['part_id']; $segment = (int)$defConfig['segment']; $chunk_size = (int)$defConfig['chunk_size']; $backup_stats = Platform::getInstance()->get_statistics($backup_id); if (empty($backup_stats)) { // Backup record doesn't exist throw new RuntimeException('Invalid backup record identifier', 404); } $files = Factory::getStatistics()->get_all_filenames($backup_stats); if ((($files === null ? 0 : count($files)) < $part_id) || ($part_id <= 0)) { // Invalid part throw new RuntimeException('Invalid backup part', 404); } $file = $files[ $part_id - 1 ]; $filesize = @filesize($file); $seekPos = $chunk_size * 1048576 * ($segment - 1); if ($seekPos > $filesize) { // Trying to seek past end of file throw new RuntimeException('Invalid segment', 404); } $fp = fopen($file, 'r'); if ($fp === false) { // Could not read file throw new RuntimeException('Error reading backup archive', 500); } rewind($fp); if (fseek($fp, $seekPos, SEEK_SET) === -1) { // Could not seek to position throw new RuntimeException('Error reading specified segment', 500); } $buffer = fread($fp, 1048576); if ($buffer === false) { throw new RuntimeException('Error reading specified segment', 500); } fclose($fp); return base64_encode($buffer); } } PK �!�\�G Task/SaveProfile.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Exception; use RuntimeException; /** * Saves a backup profile * * @deprecated */ class SaveProfile extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\qZ$ � � Task/Log.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the log contents * * @deprecated */ class Log extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\#� � Task/GetDBFilters.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use RuntimeException; /** * Get the database filters * * @deprecated */ class GetDBFilters extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\P.,� Task/GetFSRoots.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the filesystem roots (site root and extra included directories) * * @deprecated */ class GetFSRoots extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\�lE- - Task/GetDBEntities.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the database entities along with their filtering status (typically for rendering a GUI) * * @deprecated */ class GetDBEntities extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\���' ' Task/RemoveIncludedDB.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Exception; use RuntimeException; /** * Remove an extra database definition * * @deprecated */ class RemoveIncludedDB extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\w�\� � Task/ExportConfiguration.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\ProfileModel; use Akeeba\Component\AkeebaBackup\Administrator\Table\ProfileTable; use Akeeba\Engine\Factory; use Exception; /** * Export the profile's configuration */ class ExportConfiguration extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws Exception In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'profile' => 0, ]; $defConfig = array_merge($defConfig, $parameters); $profile_id = (int) $defConfig['profile']; if ($profile_id <= 0) { $profile_id = 1; } /** @var ProfileModel $profileModel */ $profileModel = $this->factory->createModel('Profile', 'Administrator', ['ignore_request' => true]); /** @var ProfileTable $profile */ $profile = $profileModel->getTable(); $profile->load($profile_id); $data = $profile->getProperties(); if (substr($data['configuration'], 0, 12) == '###AES128###') { // Load the server key file if necessary if (!defined('AKEEBA_SERVERKEY')) { $filename = JPATH_ADMINISTRATOR . '/components/com_akeebabackup/serverkey.php'; include_once $filename; } $key = Factory::getSecureSettings()->getKey(); $data['configuration'] = Factory::getSecureSettings()->decryptSettings($data['configuration'], $key); } return [ 'description' => $data['description'], 'configuration' => $data['configuration'], 'filters' => $data['filters'], ]; } } PK �!�\�*M/K K Task/GetVersion.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the version information of Akeeba Backup */ class GetVersion extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { $edition = AKEEBABACKUP_PRO ? 'pro' : 'core'; return (object)[ 'api' => 600, 'component' => AKEEBABACKUP_VERSION, 'date' => AKEEBABACKUP_DATE, 'edition' => $edition ]; } } PK �!�\��� Task/SetIncludedDirectory.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use RuntimeException; /** * Set up or edit an extra directory definition * * @deprecated */ class SetIncludedDirectory extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\ͤ��� � Task/GetBackupInfo.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use RuntimeException; /** * Get information for a given backup record */ class GetBackupInfo extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = ['backup_id' => 0]; $defConfig = array_merge($defConfig, $parameters); $backup_id = (int)$defConfig['backup_id']; // Get the basic statistics $record = Platform::getInstance()->get_statistics($backup_id); // Backup record doesn't exist if (empty($record)) { throw new RuntimeException('Invalid backup record identifier', 404); } // Get a list of filenames $filenames = Factory::getStatistics()->get_all_filenames($record); if (empty($filenames)) { // Archives are not stored on the server or no files produced $record['filenames'] = []; } else { $filedata = []; $i = 0; // Get file sizes per part foreach ($filenames as $file) { $i++; $size = @filesize($file); $size = is_numeric($size) ? $size : 0; $filedata[] = ['part' => $i, 'name' => basename($file), 'size' => $size]; } // Add the file info to $record['filenames'] $record['filenames'] = $filedata; } return $record; } } PK �!�\�"� � Task/GetDBRoots.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the database roots (database definitions) * * @deprecated */ class GetDBRoots extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\A�� � Task/SetIncludedDB.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Set up or edit an extra database definition * * @deprecated */ class SetIncludedDB extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\_���� � Task/GetFSFilters.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the filesystem filters * * @deprecated */ class GetFSFilters extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\��� Task/AbstractTask.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Site\Model\Json\TaskInterface; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; class AbstractTask implements TaskInterface { /** * The container of the component we belong to * * @var MVCFactoryInterface */ protected $factory = null; /** * The method name * * @var string */ protected $methodName = ''; /** * Public constructor * * @param MVCFactoryInterface $factory The container of the component we belong to */ public function __construct(MVCFactoryInterface $factory) { $this->factory = $factory; $path = explode('\\', get_class($this)); $shortName = array_pop($path); $this->methodName = lcfirst($shortName); } /** * Return the JSON API task's name ("method" name). Remote clients will use it to call us. * * @return string */ public function getMethodName() { return $this->methodName; } /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \LogicException( sprintf( '%s has not implemented its execute() method yet.', self::class ) ); } } PK �!�\<��� � Task/DeleteProfile.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use RuntimeException; /** * Delete a backup profile * * @deprecated */ class DeleteProfile extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\7�d�� � Task/StartBackup.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\BackupModel; use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use Joomla\CMS\Factory as JoomlaFactory; use Joomla\CMS\Filter\InputFilter; use RuntimeException; /** * Start a backup job */ class StartBackup extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException In case of an error */ public function execute(array $parameters = []) { $filter = InputFilter::getInstance(); // Get the passed configuration values $defConfig = [ 'profile' => 1, 'description' => '', 'comment' => '', 'backupid' => null, 'overrides' => [], ]; $defConfig = array_merge($defConfig, $parameters); $profile = (int) $defConfig['profile']; $profile = max(1, $profile); // Make sure $profile is a positive integer >= 1 $description = $filter->clean($defConfig['description'], 'string'); $comment = $filter->clean($defConfig['comment'], 'string'); $overrides = $filter->clean($defConfig['overrides'], 'array'); if (empty($description)) { /** @var BackupModel $backupModel */ $backupModel = $this->factory->createModel('Backup', 'Administrator', ['ignore_request' => true]); $description = $backupModel->getDefaultDescription() . ' (JSON API)'; } JoomlaFactory::getApplication()->getSession()->set('akeebabackup.profile', $profile); define('AKEEBA_PROFILE', $profile); /** * DO NOT REMOVE! * * The Model will only try to load the configuration after nuking the factory. This causes Profile 1 to be * loaded first. Then it figures out it needs to load a different profile and it does – but the protected keys * are NOT replaced, meaning that certain configuration parameters are not replaced. Most notably, the chain. * This causes backups to behave weirdly. So, DON'T REMOVE THIS UNLESS WE REFACTOR THE MODEL. */ Platform::getInstance()->load_configuration($profile); /** @var BackupModel $model */ $model = $this->factory->createModel('Backup', 'Administrator', ['ignore_request' => true]); $model->setState('tag', 'json'); $model->setState('description', $description); $model->setState('comment', $comment); $model->setState('profile', $profile); $array = $model->startBackup($overrides); if ($array['Error'] != '') { throw new RuntimeException('A backup error has occurred: ' . $array['Error'], 500); } // BackupID contains the numeric backup record ID. backupid contains the backup id (usually in the form id123) $statistics = Factory::getStatistics(); $array['BackupID'] = $statistics->getId(); // Remote clients expect a boolean, not an integer. $array['HasRun'] = ($array['HasRun'] === 0); $array['Profile'] = Platform::getInstance()->get_active_profile(); return $array; } } PK �!�\nBIy y Task/ImportConfiguration.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Component\AkeebaBackup\Administrator\Model\ProfilesModel; use Exception; use RuntimeException; /** * Import the profile's configuration */ class ImportConfiguration extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws RuntimeException|Exception In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'profile' => 0, 'data' => null, ]; $defConfig = array_merge($defConfig, $parameters); $data = $defConfig['data']; /** @var ProfilesModel $profileModel */ $profileModel = $this->factory->createModel('Profiles', 'Administrator', ['ignore_request' => true]); $profileModel->import($data); return true; } } PK �!�\�yƪ� � Task/GetIncludedDBs.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the extra included databases * * @deprecated */ class GetIncludedDBs extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\�Sʉ� � Task/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK �!�\�ѶSX X Task/DownloadDirect.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; /** * Download an entire backup archive directly over HTTP */ class DownloadDirect extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { // Get the passed configuration values $defConfig = [ 'backup_id' => 0, 'part_id' => 1, ]; $defConfig = array_merge($defConfig, $parameters); $backup_id = (int) $defConfig['backup_id']; $part_id = (int) $defConfig['part_id']; $backup_stats = Platform::getInstance()->get_statistics($backup_id); if (empty($backup_stats)) { // Backup record doesn't exist @ob_end_clean(); header('HTTP/1.1 500 Invalid backup record identifier'); flush(); \Joomla\CMS\Factory::getApplication()->close(); } $files = Factory::getStatistics()->get_all_filenames($backup_stats); if ((($files === null ? 0 : count($files)) < $part_id) || ($part_id <= 0)) { // Invalid part @ob_end_clean(); header('HTTP/1.1 500 Invalid backup part'); flush(); \Joomla\CMS\Factory::getApplication()->close(); } $filename = $files[$part_id - 1]; @clearstatcache(); // For a certain unmentionable browser if (function_exists('ini_get') && function_exists('ini_set')) { if (ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } } // Remove php's time limit if (function_exists('ini_get') && function_exists('set_time_limit')) { if (!ini_get('safe_mode')) { @set_time_limit(0); } } $basename = @basename($filename); $fileSize = @filesize($filename); $extension = strtolower(str_replace(".", "", strrchr($filename, "."))); while (@ob_end_clean()) { ; } @clearstatcache(); // Send MIME headers header('MIME-Version: 1.0'); header('Content-Disposition: attachment; filename="' . $basename . '"'); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); switch ($extension) { case 'zip': // ZIP MIME type header('Content-Type: application/zip'); break; default: // Generic binary data MIME type header('Content-Type: application/octet-stream'); break; } // Notify of file size, if this info is available if ($fileSize > 0) { header('Content-Length: ' . @filesize($filename)); } // Disable caching header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); header('Pragma: no-cache'); flush(); if ($fileSize > 0) { // If the filesize is reported, use 1M chunks for echoing the data to the browser $blockSize = 1048576; //1M chunks $handle = @fopen($filename, "r"); // Now we need to loop through the file and echo out chunks of file data if ($handle !== false) { while (!@feof($handle)) { echo @fread($handle, $blockSize); @ob_flush(); flush(); } } if ($handle !== false) { @fclose($handle); } } else { // If the filesize is not reported, hope that readfile works @readfile($filename); } flush(); \Joomla\CMS\Factory::getApplication()->close(); // Totally ignored, only added to make static analysis happy return null; } } PK �!�\���� � Task/GetRegexDBFilters.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json\Task; // Protect from unauthorized access defined('_JEXEC') || die(); /** * Get the regex database filters * * @deprecated */ class GetRegexDBFilters extends AbstractTask { /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []) { throw new \RuntimeException('This method is no longer supported by the Akeeba Remote JSON API', 501); } } PK �!�\�˦� � Task.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json; // Protect from unauthorized access use DirectoryIterator; use Joomla\CMS\Factory; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use RuntimeException; defined('_JEXEC') || die(); /** * Handles task execution */ class Task { /** @var TaskInterface[] The task handlers known to us */ protected $handlers = []; /** * The MVC Factory of the extension. * * This is used by tasks to instantiate the various Models we need. * * @var MVCFactoryInterface */ protected $factory; private static ?self $instance = null; /** * Returns a static instance of this object * * @param MVCFactoryInterface|null $factory The MVCFactory of the Akeeba Backup component * * @return Task * @throws \Exception * @since 9.6.0 */ public static function getInstance(?MVCFactoryInterface $factory = null): self { if (!self::$instance) { $factory = $factory ?? Factory::getApplication()->bootComponent('com_akeebabackup')->getMVCFactory(); self::$instance = new self($factory); } return self::$instance; } /** * Public constructor. Populates the list of task handlers. * * @param MVCFactoryInterface $factory */ public function __construct(MVCFactoryInterface $factory) { $this->factory = $factory; // Populate the list of task handlers $this->initialiseHandlers(); } /** * Do I have a specific task handling method? * * @param string $method The method to check for * * @return bool */ public function hasMethod($method) { $method = strtolower($method); return isset($this->handlers[$method]); } public function getMethods(): array { return array_keys($this->handlers); } /** * Execute a JSON API method * * @param string $method The method's name * @param array $parameters The parameters to the method (optional) * * @return mixed * * @throws RuntimeException When the method requested is not known to us */ public function execute($method, $parameters = []) { if (!defined('AKEEBABACKUP_PRO') || !AKEEBABACKUP_PRO) { throw new RuntimeException('Access denied', 503); } if (!$this->hasMethod($method)) { throw new RuntimeException("Invalid method $method", 405); } $method = strtolower($method); return $this->handlers[$method]->execute($parameters); } /** * Initialises the encapsulation handlers * * @return void */ protected function initialiseHandlers() { // Reset the array $this->handlers = []; // Look all files in the Task handlers' directory $dh = new DirectoryIterator(__DIR__ . '/Task'); /** @var DirectoryIterator $entry */ foreach ($dh as $entry) { $fileName = $entry->getFilename(); // Ignore non-PHP files if (substr($fileName, -4) != '.php') { continue; } // Ignore the Base class if ($fileName == 'AbstractTask.php') { continue; } // Get the class name $className = __NAMESPACE__ . '\\Task\\' . substr($fileName, 0, -4); // Check if the class really exists if (!class_exists($className, true)) { continue; } /** @var TaskInterface $o */ $o = new $className($this->factory); $name = $o->getMethodName(); $name = strtolower($name); $this->handlers[$name] = $o; } } } PK �!�\��� � � TaskInterface.phpnu �[��� <?php /** * @package akeebabackup * @copyright Copyright 2006-2026 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Site\Model\Json; // Protect from unauthorized access use Joomla\CMS\MVC\Factory\MVCFactoryInterface; defined('_JEXEC') || die(); /** * Interface for JSON API tasks */ interface TaskInterface { /** * Public constructor * * @param MVCFactoryInterface $factory The container of the component we belong to */ public function __construct(MVCFactoryInterface $factory); /** * Return the JSON API task's name ("method" name). Remote clients will use it to call us. * * @return string */ public function getMethodName(); /** * Execute the JSON API task * * @param array $parameters The parameters to this task * * @return mixed * * @throws \RuntimeException In case of an error */ public function execute(array $parameters = []); } PK �!�\�Sʉ� � .htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK �!�\��=� � Task/SetRegexFSFilter.phpnu �[��� PK �!�\dZT0/ / D Task/GetFSEntities.phpnu �[��� PK �!�\}��q� � � Task/SetRegexDBFilter.phpnu �[��� PK �!�\�qt] ] � Task/Delete.phpnu �[��� PK �!�\�v� � � Task/GetRegexFSFilters.phpnu �[��� PK �!�\~�;� � � Task/GetIncludedDirectories.phpnu �[��� PK �!�\vJ�% % ! Task/TestDBConnection.phpnu �[��� PK �!�\���> � Task/RemoveIncludedDirectory.phpnu �[��� PK �!�\ �% � Task/SetFSFilter.phpnu �[��� PK �!�\�˝�� � ? Task/GetProfiles.phpnu �[��� PK �!�\$�pe d% Task/SaveConfiguration.phpnu �[��� PK �!�\��� �( Task/GetGUIConfiguration.phpnu �[��� PK �!�\���x , Task/SetDBFilter.phpnu �[��� PK �!�\0W��� � w/ Task/Browse.phpnu �[��� PK �!�\8�s�C C �2 Task/DeleteFiles.phpnu �[��� PK �!�\.�� � %8 Task/StepBackup.phpnu �[��� PK �!�\�\� � �A Task/ListBackups.phpnu �[��� PK �!�\w�˧ �F Task/Download.phpnu �[��� PK �!�\�G =P Task/SaveProfile.phpnu �[��� PK �!�\qZ$ � � �S Task/Log.phpnu �[��� PK �!�\#� � �V Task/GetDBFilters.phpnu �[��� PK �!�\P.,� �Y Task/GetFSRoots.phpnu �[��� PK �!�\�lE- - H] Task/GetDBEntities.phpnu �[��� PK �!�\���' ' �` Task/RemoveIncludedDB.phpnu �[��� PK �!�\w�\� � +d Task/ExportConfiguration.phpnu �[��� PK �!�\�*M/K K �k Task/GetVersion.phpnu �[��� PK �!�\��� �o Task/SetIncludedDirectory.phpnu �[��� PK �!�\ͤ��� � �r Task/GetBackupInfo.phpnu �[��� PK �!�\�"� � z Task/GetDBRoots.phpnu �[��� PK �!�\A�� � N} Task/SetIncludedDB.phpnu �[��� PK �!�\_���� � �� Task/GetFSFilters.phpnu �[��� PK �!�\��� �� Task/AbstractTask.phpnu �[��� PK �!�\<��� � "� Task/DeleteProfile.phpnu �[��� PK �!�\7�d�� � g� Task/StartBackup.phpnu �[��� PK �!�\nBIy y ;� Task/ImportConfiguration.phpnu �[��� PK �!�\�yƪ� � � Task/GetIncludedDBs.phpnu �[��� PK �!�\�Sʉ� � 8� Task/.htaccessnu �7��m PK �!�\�ѶSX X c� Task/DownloadDirect.phpnu �[��� PK �!�\���� � � Task/GetRegexDBFilters.phpnu �[��� PK �!�\�˦� � @� Task.phpnu �[��� PK �!�\��� � � � TaskInterface.phpnu �[��� PK �!�\�Sʉ� � @� .htaccessnu �7��m PK * * f�
| ver. 1.4 |
Github
|
.
| PHP 8.2.32 | Generation time: 0.06 |
proxy
|
phpinfo
|
Settings