Current File : /home/pacjaorg/.trash/libraries.1/vendor/joomla/authentication/src/Strategies/DatabaseStrategy.php |
<?php
/**
* Part of the Joomla Framework Authentication Package
*
* @copyright Copyright (C) 2005 - 2021 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
namespace Joomla\Authentication\Strategies;
use Joomla\Authentication\AbstractUsernamePasswordAuthenticationStrategy;
use Joomla\Authentication\Authentication;
use Joomla\Authentication\Password\HandlerInterface;
use Joomla\Database\DatabaseInterface;
use Joomla\Input\Input;
/**
* Joomla Framework Database Strategy Authentication class
*
* @since 1.1.0
*/
class DatabaseStrategy extends AbstractUsernamePasswordAuthenticationStrategy
{
/**
* DatabaseInterface object
*
* @var DatabaseInterface
* @since 1.1.0
*/
private $db;
/**
* Database connection options
*
* @var array
* @since 1.1.0
*/
private $dbOptions;
/**
* The Input object
*
* @var Input
* @since 1.1.0
*/
private $input;
/**
* Strategy Constructor
*
* @param Input $input The input object from which to retrieve the request credentials.
* @param DatabaseInterface $database DatabaseDriver for retrieving user credentials.
* @param array $options Optional options array for configuring the credential storage connection.
* @param ?HandlerInterface $passwordHandler The password handler.
*
* @since 1.1.0
*/
public function __construct(Input $input, DatabaseInterface $database, array $options = [], ?HandlerInterface $passwordHandler = null)
{
parent::__construct($passwordHandler);
$this->input = $input;
$this->db = $database;
$options['database_table'] = $options['database_table'] ?? '#__users';
$options['username_column'] = $options['username_column'] ?? 'username';
$options['password_column'] = $options['password_column'] ?? 'password';
$this->dbOptions = $options;
}
/**
* Attempt to authenticate the username and password pair.
*
* @return string|boolean A string containing a username if authentication is successful, false otherwise.
*
* @since 1.1.0
*/
public function authenticate()
{
$username = $this->input->get('username', false, 'username');
$password = $this->input->get('password', false, 'raw');
if (!$username || !$password) {
$this->status = Authentication::NO_CREDENTIALS;
return false;
}
return $this->doAuthenticate($username, $password);
}
/**
* Retrieve the hashed password for the specified user.
*
* @param string $username Username to lookup.
*
* @return string|boolean Hashed password on success or boolean false on failure.
*
* @since 1.1.0
*/
protected function getHashedPassword($username)
{
try {
$password = $this->db->setQuery(
$this->db->getQuery(true)
->select($this->db->quoteName($this->dbOptions['password_column']))
->from($this->db->quoteName($this->dbOptions['database_table']))
->where($this->db->quoteName($this->dbOptions['username_column']) . ' = ?')
->bind(1, $username)
)->loadResult();
} catch (\RuntimeException $exception) {
return false;
}
if (!$password) {
return false;
}
return $password;
}
}