shell bypass 403
<?php
/**
* @package RSForm! Pro
* @copyright (C) 2022 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
namespace Rsjoomla\Plugin\System\Rsformconsole;
use Joomla\Console\Command\AbstractCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
defined('_JEXEC') or die;
class PurgesubmissionsCommand extends AbstractCommand
{
protected static $defaultName = 'rsform:purge-submissions';
protected function doExecute(InputInterface $input, OutputInterface $output): int
{
require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/rsform.php';
$symfonyStyle = new SymfonyStyle($input, $output);
$scriptStart = microtime(true);
try
{
$symfonyStyle->title(Text::_('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_TITLE'));
$symfonyStyle->info(Text::sprintf('PLG_SYSTEM_RSFORMCONSOLE_PHP_INFO', ini_get('memory_limit'), ini_get('max_execution_time')));
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select($db->qn('FormId'))
->select($db->qn('DeleteSubmissionsAfter'))
->from($db->qn('#__rsform_forms'))
->where($db->qn('DeleteSubmissionsAfter') . ' > ' . $db->q(0));
if ($forms = $db->setQuery($query)->loadObjectList())
{
$symfonyStyle->writeln('Found ' . count($forms) . ' forms.');
foreach ($forms as $form)
{
$symfonyStyle->write(Text::sprintf('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_DELETING_SUBMISSIONS_OLDER_THAN_FOR_FORM', $form->DeleteSubmissionsAfter, $form->FormId));
$date = Factory::getDate()->modify("-{$form->DeleteSubmissionsAfter} days")->toSql();
// Find all Submission IDs that need to get removed
$query->clear()
->select($db->qn('SubmissionId'))
->from($db->qn('#__rsform_submissions'))
->where($db->qn('FormId') . ' = ' . $db->q($form->FormId))
->where($db->qn('DateSubmitted') . ' < ' . $db->q($date));
if ($submissions = $db->setQuery($query)->loadColumn())
{
require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/submissions.php';
\RSFormProSubmissionsHelper::deleteSubmissions($submissions);
$symfonyStyle->writeln(Text::sprintf('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_REMOVED_SUBMISSIONS', count($submissions)));
}
else
{
$symfonyStyle->writeln(Text::_('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_NO_SUBMISSIONS_MATCH'));
}
}
}
else
{
$symfonyStyle->writeln(Text::_('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_NO_FORMS_HAVE_BEEN_CONFIGURED'));
}
}
catch (\Exception $e)
{
$symfonyStyle->error($e->getMessage());
return $e->getCode();
}
$time = number_format(microtime(true) - $scriptStart, 2, '.', '');
$symfonyStyle->writeln(Text::sprintf('PLG_SYSTEM_RSFORMCONSOLE_FINISHED_IN_SECONDS', $time));
return 0;
}
protected function configure(): void
{
$this->setDescription(Text::_('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_DESCRIPTION'));
$help = Text::_('PLG_SYSTEM_RSFORMCONSOLE_COMMAND_PURGE_SUBMISSIONS_HELP');
$this->setHelp(
<<<EOF
RSForm! Pro
###########
{$help}
php joomla.php rsform:purge-submissions
EOF
);
}
}