Current File : /home/pacjaorg/.trash/administrator/components/com_admintools/Model/MasterPassword.php
<?php
/**
 * @package   admintools
 * @copyright Copyright (c)2010-2020 Nicholas K. Dionysopoulos / Akeeba Ltd
 * @license   GNU General Public License version 3, or later
 */

namespace Akeeba\AdminTools\Admin\Model;

defined('_JEXEC') or die;

use Akeeba\AdminTools\Admin\Helper\Storage;
use FOF30\Model\Model;

class MasterPassword extends Model
{
	public $views = [
		'AdminPassword'              => 'COM_ADMINTOOLS_TITLE_ADMINPW',
		'BadWords'                   => 'COM_ADMINTOOLS_TITLE_BADWORDS',
		'CleanTempDirectory'         => 'COM_ADMINTOOLS_TITLE_CLEANTMP',
		'ChangeDBCollation'          => 'COM_ADMINTOOLS_TITLE_DBCHCOL',
		'DatabaseTools'              => 'COM_ADMINTOOLS_TITLE_DBTOOLS',
		'EmergencyOffline'           => 'COM_ADMINTOOLS_TITLE_EOM',
		'FixPermissions'             => 'COM_ADMINTOOLS_TITLE_FIXPERMS',
		'ConfigureFixPermissions'    => 'COM_ADMINTOOLS_TITLE_FIXPERMSCONFIG',
		'HtaccessMaker'              => 'COM_ADMINTOOLS_TITLE_HTMAKER',
		'NginXConfMaker'             => 'COM_ADMINTOOLS_TITLE_NGINXMAKER',
		'WebConfigMaker'             => 'COM_ADMINTOOLS_TITLE_WCMAKER',
		'IPAutoBanHistories'         => 'COM_ADMINTOOLS_TITLE_IPAUTOBANHISTORY',
		'AutoBannedAddresses'        => 'COM_ADMINTOOLS_TITLE_IPAUTOBAN',
		'BlacklistedAddresses'       => 'COM_ADMINTOOLS_TITLE_IPBL',
		'WhitelistedAddresses'       => 'COM_ADMINTOOLS_TITLE_IPWL',
		'MasterPassword'             => 'COM_ADMINTOOLS_TITLE_MASTERPW',
		'QuickStart'                 => 'COM_ADMINTOOLS_TITLE_QUICKSTART',
		'Redirections'               => 'COM_ADMINTOOLS_TITLE_REDIRS',
		'Scanner'                    => 'COM_ADMINTOOLS_TITLE_SCANNER',
		'Scan'                       => 'COM_ADMINTOOLS_TITLE_SCANS',
		'SEOAndLinkTools'            => 'COM_ADMINTOOLS_TITLE_SEOANDLINK',
		'WebApplicationFirewall'     => 'COM_ADMINTOOLS_TITLE_WAF',
		'WAFBlacklistedRequests'     => 'COM_ADMINTOOLS_TITLE_WAFBLACKLISTS',
		'ConfigureWAF'               => 'COM_ADMINTOOLS_TITLE_WAFCONFIG',
		'ExceptionsFromWAF'          => 'COM_ADMINTOOLS_TITLE_WAFEXCEPTIONS',
		'WAFEmailTemplates'          => 'COM_ADMINTOOLS_TITLE_WAFEMAILTEMPLATES',
		'CheckTempAndLogDirectories' => 'COM_ADMINTOOLS_TITLE_TMPLOGCHECK',
		'SchedulingInformation'      => 'COM_ADMINTOOLS_TITLE_SCHEDULINGINFORMATION',
		'ImportAndExport'            => 'COM_ADMINTOOLS_TITLE_EXPORT_SETTINGS',
		'ScanAlerts'                 => 'COM_ADMINTOOLS_TITLE_SCANALERTS_MASTERPW',
		'SecurityExceptions'         => 'COM_ADMINTOOLS_TITLE_LOG',
		'UnblockIP'                  => 'COM_ADMINTOOLS_TITLE_UNBLOCKIP',
	];

	/**
	 * Checks if the user should be granted access to the current view,
	 * based on his Master Password setting.
	 *
	 * @param   string  $view  Optional. The string to check. Leave null to use the current view.
	 *
	 * @return  bool
	 */
	public function accessAllowed($view = null)
	{
		$params = Storage::getInstance();

		if (empty($view))
		{
			$view = $this->input->get('view', 'ControlPanel');
		}

		$inflector = $this->container->inflector;
		$altView   = $inflector->isPlural($view) ? $inflector->singularize($view) : $inflector->pluralize($view);

		if (!isset($this->views[$view]) && !isset($this->views[$altView]))
		{
			return true;
		}

		$masterHash = $params->getValue('masterpassword', '');

		if (!empty($masterHash))
		{
			$masterHash = md5($masterHash);

			// Compare the master pw with the one the user entered
			$userHash = $this->container->platform->getSessionVar('userpwhash', '', 'admintools');

			if ($userHash != $masterHash)
			{
				// The login is invalid. If the view is locked I'll have to kick the user out.
				$lockedviews_raw = $params->getValue('lockedviews', '');

				if (!empty($lockedviews_raw))
				{
					$lockedViews = explode(",", $lockedviews_raw);

					if (in_array($view, $lockedViews) || in_array($altView, $lockedViews))
					{
						return false;
					}
				}
			}
		}

		return true;
	}

	/**
	 * Compares the user-supplied password against the master password
	 *
	 * @return  bool  True if the passwords match
	 */
	public function hasValidPassword()
	{
		$params = Storage::getInstance();

		$masterHash = $params->getValue('masterpassword', '');

		if (empty($masterHash))
		{
			return true;
		}

		$masterHash = md5($masterHash);
		$userHash   = $this->container->platform->getSessionVar('userpwhash', '', 'admintools');

		return ($masterHash == $userHash);
	}

	/**
	 * Stores the hash of the user's password in the session
	 *
	 * @param   $passwd  string  The password supplied by the user
	 *
	 * @return  void
	 */
	public function setUserPassword($passwd)
	{
		$userHash = md5($passwd);
		$this->container->platform->setSessionVar('userpwhash', $userHash, 'admintools');
	}

	/**
	 * Saves the Master Password and the proteected views list
	 *
	 * @param   string  $masterPassword  The new master password
	 * @param   array   $protectedViews  A list of the views to protect
	 *
	 * @return  void
	 */
	public function saveSettings($masterPassword, array $protectedViews)
	{
		$params = Storage::getInstance();

		// Add the new master password
		$params->setValue('masterpassword', $masterPassword);

		// Add the protected views
		if (!in_array('MasterPassword', $protectedViews))
		{
			$protectedViews[] = 'MasterPassword';
		}

		$params->setValue('lockedviews', implode(',', $protectedViews));

		$params->save();
	}

	/**
	 * Get a list of the views which can be locked down and their lockdown status
	 *
	 * @return  array
	 */
	public function &getItemList()
	{
		$lockedViews = [];

		$params = Storage::getInstance();

		$lockedViewsRaw = $params->getValue('lockedviews', '');

		if (!empty($lockedViewsRaw))
		{
			$lockedViews = explode(",", $lockedViewsRaw);
		}

		$views = [];

		foreach ($this->views as $view => $langKey)
		{
			$views[$view] = [
				in_array($view, $lockedViews),
				$langKey,
			];
		}

		return $views;
	}

	/**
	 * Returns the stored master password
	 *
	 * @return  string
	 */
	public function getMasterPassword()
	{
		$params = Storage::getInstance();

		return $params->getValue('masterpassword', '');
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!