Sindbad~EG File Manager
<?php
/**
* @package RSDirectory!
* @copyright (c) 2013 - 2021 RSJoomla!
* @link https://www.rsjoomla.com
* @license GNU General Public License http://www.gnu.org/licenses/gpl-3.0.en.html
*/
defined('_JEXEC') or die;
class RsdirectoryControllerRemovedata extends JControllerForm
{
public function request()
{
$this->checkToken();
try
{
$user = JFactory::getUser();
if ($user->guest)
{
throw new Exception(JText::_('COM_RSDIRECTORY_MUST_BE_LOGGED_IN'));
}
$config = RSDirectoryConfig::getInstance();
if (!$config->get('allow_self_anonymisation', 0))
{
throw new Exception(JText::_('COM_RSDIRECTORY_THIS_FEATURE_MUST_BE_ENABLED'));
}
if ($user->authorise('core.admin'))
{
throw new Exception(JText::_('COM_RSDIRECTORY_THIS_FEATURE_IS_NOT_AVAILABLE_FOR_SUPER_USERS'));
}
// Get JConfig
$config = JFactory::getConfig();
// Create a token
$token = JApplicationHelper::getHash(JUserHelper::genRandomPassword(10));
$hashedToken = JUserHelper::hashPassword($token);
// Save the token
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('*')
->from($db->qn('#__rsdirectory_tokens'))
->where($db->qn('user_id') . ' = ' . $db->q($user->id));
if ($db->setQuery($query)->loadObject())
{
$query->clear()
->update($db->qn('#__rsdirectory_tokens'))
->set($db->qn('token') . ' = ' . $db->q($hashedToken))
->where($db->qn('user_id') . ' = ' . $db->q($user->id));
}
else
{
$query->clear()
->insert($db->qn('#__rsdirectory_tokens'))
->columns(array($db->qn('user_id'), $db->qn('token')))
->values(implode(', ', array($db->q($user->id), $db->q($hashedToken))));
}
$db->setQuery($query)->execute();
// Create the URL
$uri = JUri::getInstance();
$base = $uri->toString(array('scheme', 'user', 'pass', 'host', 'port'));
$url = $base . JRoute::_('index.php?option=com_rsdirectory&task=removedata.process&token=' . $token, false);
JFactory::getMailer()->sendMail($config->get('mailfrom'), $config->get('fromname'), $user->email, JText::sprintf('COM_RSDIRECTORY_REMOVE_REQUEST_EMAIL_SUBJECT', $user->username, $config->get('sitename')), JText::sprintf('COM_RSDIRECTORY_REMOVE_REQUEST_EMAIL_BODY', $user->name, $url), true);
}
catch (Exception $e)
{
jexit($e->getMessage());
}
jexit(JText::_('COM_RSDIRECTORY_LINK_HAS_BEEN_SENT'));
}
public function process()
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
try
{
if ($user->guest)
{
$link = base64_encode((string) JUri::getInstance());
$app->redirect(JRoute::_('index.php?option=com_users&view=login&return=' . $link, false), JText::_('COM_RSDIRECTORY_MUST_BE_LOGGED_IN'));
}
$config = RSDirectoryConfig::getInstance();
if (!$config->get('allow_self_anonymisation', 0))
{
throw new Exception(JText::_('COM_RSDIRECTORY_THIS_FEATURE_MUST_BE_ENABLED'));
}
if ($user->authorise('core.admin'))
{
throw new Exception(JText::_('COM_RSDIRECTORY_THIS_FEATURE_IS_NOT_AVAILABLE_FOR_SUPER_USERS'));
}
$token = $app->input->getCmd('token');
if (!$token || strlen($token) != 32)
{
throw new Exception(JText::_('COM_RSDIRECTORY_TOKEN_IS_INCORRECT'));
}
// Let's see if the token matches
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->qn('token'))
->from($db->qn('#__rsdirectory_tokens'))
->where($db->qn('user_id') . ' = ' . $db->q($user->id));
$dbToken = $db->setQuery($query)->loadResult();
if (!$dbToken || !JUserHelper::verifyPassword($token, $dbToken))
{
throw new Exception(JText::_('COM_RSDIRECTORY_TOKEN_IS_INCORRECT'));
}
// Delete the token
$query->clear()
->delete($db->qn('#__rsdirectory_tokens'))
->where($db->qn('user_id') . ' = ' . $db->q($user->id));
$db->setQuery($query)->execute();
// Anonymise data
RSDirectoryHelper::anonymise($user->id);
$app->logout();
$app->redirect(JRoute::_('index.php?option=com_rsdirectory&view=removedata', false));
}
catch (Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'error');
$this->setRedirect(JRoute::_('index.php', false));
}
}
public function processreport() {
$app = JFactory::getApplication();
try
{
$config = RSDirectoryConfig::getInstance();
if (!$config->get('send_report_deletion_email', 1)) {
throw new Exception(JText::_('COM_RSDIRECTORY_THIS_FEATURE_MUST_BE_ENABLED'));
}
$token = $app->input->getCmd('token');
if (!$token || strlen($token) != 32)
{
throw new Exception(JText::_('COM_RSDIRECTORY_TOKEN_IS_INCORRECT'));
}
// Get Dbo object
$db = JFactory::getDbo();
// Escape the token
$token = $db->escape($token);
// Let's see if the token matches
$query = $db->getQuery(true)
->select($db->qn('token'))
->from($db->qn('#__rsdirectory_entries_reported'))
->where($db->qn('token') . ' = ' . $db->q($token));
$dbToken = $db->setQuery($query)->loadResult();
if (!$dbToken)
{
throw new Exception(JText::_('COM_RSDIRECTORY_TOKEN_IS_INCORRECT'));
}
// Delete the report
$query->clear()
->delete($db->qn('#__rsdirectory_entries_reported'))
->where($db->qn('token') . ' = ' . $db->q($token));
$db->setQuery($query)->execute();
$app->redirect(JRoute::_('index.php?option=com_rsdirectory&view=removedata&layout=report', false));
}
catch (Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'error');
$this->setRedirect(JRoute::_('index.php', false));
}
}
public function processreview(){
$app = JFactory::getApplication();
try
{
$config = RSDirectoryConfig::getInstance();
if (!$config->get('send_report_deletion_email', 1)) {
throw new Exception(JText::_('COM_RSDIRECTORY_THIS_FEATURE_MUST_BE_ENABLED'));
}
$token = $app->input->getCmd('token');
if (!$token || strlen($token) != 32)
{
throw new Exception(JText::_('COM_RSDIRECTORY_TOKEN_IS_INCORRECT'));
}
// Get Dbo object
$db = JFactory::getDbo();
// Escape the token
$token = $db->escape($token);
// Let's see if the token matches
$query = $db->getQuery(true)
->select($db->qn('token'))
->from($db->qn('#__rsdirectory_reviews'))
->where($db->qn('token') . ' = ' . $db->q($token));
$dbToken = $db->setQuery($query)->loadResult();
if (!$dbToken)
{
throw new Exception(JText::_('COM_RSDIRECTORY_TOKEN_IS_INCORRECT'));
}
// Anonymise the review
$fake_text = JText::_('COM_RSDIRECTORY_DATA_HAS_BEEN_ANONYMISED');
$fake_ip = '0.0.0.0';
$fake_email = JUserHelper::genRandomPassword(mt_rand(10, 16)) . '@' . JUserHelper::genRandomPassword(mt_rand(10, 16));
$query->clear()
->update($db->qn('#__rsdirectory_reviews'))
->set($db->qn('ip') . ' = ' . $db->q($fake_ip))
->set($db->qn('name') . ' = ' . $db->q($fake_text))
->set($db->qn('email') . ' = ' . $db->q($fake_email))
->set($db->qn('subject') . ' = ' . $db->q(''))
->set($db->qn('review') . ' = ' . $db->q(''))
->set($db->qn('token') . ' = ' . $db->q(''))
->set($db->qn('published') . ' = ' . $db->q(0))
->where($db->qn('token') . ' = ' . $db->q($token));
$db->setQuery($query)->execute();
$app->redirect(JRoute::_('index.php?option=com_rsdirectory&view=removedata&layout=review', false));
}
catch (Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'error');
$this->setRedirect(JRoute::_('index.php', false));
}
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists