primo commit
This commit is contained in:
		
							
								
								
									
										119
									
								
								libraries/vendor/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								libraries/vendor/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | ||||
| <?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; | ||||
|  | ||||
| use Joomla\Authentication\Password\BCryptHandler; | ||||
| use Joomla\Authentication\Password\HandlerInterface; | ||||
|  | ||||
| /** | ||||
|  * Abstract AuthenticationStrategy for username/password based authentication | ||||
|  * | ||||
|  * @since  1.1.0 | ||||
|  */ | ||||
| abstract class AbstractUsernamePasswordAuthenticationStrategy implements AuthenticationStrategyInterface | ||||
| { | ||||
|     /** | ||||
|      * The password handler to validate the password against. | ||||
|      * | ||||
|      * @var    HandlerInterface | ||||
|      * @since  1.2.0 | ||||
|      */ | ||||
|     protected $passwordHandler; | ||||
|  | ||||
|     /** | ||||
|      * The last authentication status. | ||||
|      * | ||||
|      * @var    integer | ||||
|      * @since  1.1.0 | ||||
|      */ | ||||
|     protected $status; | ||||
|  | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
|      * @param   ?HandlerInterface  $passwordHandler  The password handler. | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public function __construct(?HandlerInterface $passwordHandler = null) | ||||
|     { | ||||
|         $this->passwordHandler = $passwordHandler ?: new BCryptHandler(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Attempt to authenticate the username and password pair. | ||||
|      * | ||||
|      * @param   string  $username  The username to authenticate. | ||||
|      * @param   string  $password  The password to attempt authentication with. | ||||
|      * | ||||
|      * @return  string|boolean  A string containing a username if authentication is successful, false otherwise. | ||||
|      * | ||||
|      * @since   1.1.0 | ||||
|      */ | ||||
|     protected function doAuthenticate($username, $password) | ||||
|     { | ||||
|         $hashedPassword = $this->getHashedPassword($username); | ||||
|  | ||||
|         if ($hashedPassword === false) { | ||||
|             $this->status = Authentication::NO_SUCH_USER; | ||||
|  | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         if (!$this->verifyPassword($username, $password, $hashedPassword)) { | ||||
|             $this->status = Authentication::INVALID_CREDENTIALS; | ||||
|  | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         $this->status = Authentication::SUCCESS; | ||||
|  | ||||
|         return $username; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 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 | ||||
|      */ | ||||
|     abstract protected function getHashedPassword($username); | ||||
|  | ||||
|     /** | ||||
|      * Get the status of the last authentication attempt. | ||||
|      * | ||||
|      * @return  integer  Authentication class constant result. | ||||
|      * | ||||
|      * @since   1.1.0 | ||||
|      */ | ||||
|     public function getResult() | ||||
|     { | ||||
|         return $this->status; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Attempt to verify the username and password pair. | ||||
|      * | ||||
|      * @param   string  $username        The username to authenticate. | ||||
|      * @param   string  $password        The password to attempt authentication with. | ||||
|      * @param   string  $hashedPassword  The hashed password to attempt authentication against. | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.1.0 | ||||
|      */ | ||||
|     protected function verifyPassword($username, $password, $hashedPassword) | ||||
|     { | ||||
|         return $this->passwordHandler->validatePassword($password, $hashedPassword); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										142
									
								
								libraries/vendor/joomla/authentication/src/Authentication.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								libraries/vendor/joomla/authentication/src/Authentication.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,142 @@ | ||||
| <?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; | ||||
|  | ||||
| /** | ||||
|  * Joomla Framework Authentication Class | ||||
|  * | ||||
|  * @since  1.0 | ||||
|  */ | ||||
| class Authentication | ||||
| { | ||||
|     /** | ||||
|      * Authentication was successful. | ||||
|      * | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     public const SUCCESS = 1; | ||||
|  | ||||
|     /** | ||||
|      * Credentials were provided but they were invalid. | ||||
|      * | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     public const INVALID_CREDENTIALS = 2; | ||||
|  | ||||
|     /** | ||||
|      * Credentials were provided but the user did not exist in the credential store. | ||||
|      * | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     public const NO_SUCH_USER = 3; | ||||
|  | ||||
|     /** | ||||
|      * There were no credentials found. | ||||
|      * | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     public const NO_CREDENTIALS = 4; | ||||
|  | ||||
|     /** | ||||
|      * There were partial credentials found but they were not complete. | ||||
|      * | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     public const INCOMPLETE_CREDENTIALS = 5; | ||||
|  | ||||
|     /** | ||||
|      * The array of strategies. | ||||
|      * | ||||
|      * @var    AuthenticationStrategyInterface[] | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     private $strategies = []; | ||||
|  | ||||
|     /** | ||||
|      * The array of results. | ||||
|      * | ||||
|      * @var    integer[] | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     private $results = []; | ||||
|  | ||||
|     /** | ||||
|      * Register a new strategy | ||||
|      * | ||||
|      * @param   string                           $strategyName  The name to use for the strategy. | ||||
|      * @param   AuthenticationStrategyInterface  $strategy      The authentication strategy object to add. | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      */ | ||||
|     public function addStrategy($strategyName, AuthenticationStrategyInterface $strategy) | ||||
|     { | ||||
|         $this->strategies[$strategyName] = $strategy; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Perform authentication | ||||
|      * | ||||
|      * @param   string[]  $strategies  Array of strategies to try - empty to try all strategies. | ||||
|      * | ||||
|      * @return  string|boolean  A string containing a username if authentication is successful, false otherwise. | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      * @throws  \RuntimeException | ||||
|      */ | ||||
|     public function authenticate(array $strategies = []) | ||||
|     { | ||||
|         if (empty($strategies)) { | ||||
|             $strategyObjects = $this->strategies; | ||||
|         } else { | ||||
|             $strategyObjects = []; | ||||
|  | ||||
|             foreach ($strategies as $strategy) { | ||||
|                 if (!isset($this->strategies[$strategy])) { | ||||
|                     throw new \RuntimeException('Authentication Strategy Not Found'); | ||||
|                 } | ||||
|  | ||||
|                 $strategyObjects[$strategy] = $this->strategies[$strategy]; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (empty($strategyObjects)) { | ||||
|             throw new \RuntimeException('No strategies have been set'); | ||||
|         } | ||||
|  | ||||
|         /** @var AuthenticationStrategyInterface $strategyObject */ | ||||
|         foreach ($strategyObjects as $strategy => $strategyObject) { | ||||
|             $username = $strategyObject->authenticate(); | ||||
|  | ||||
|             $this->results[$strategy] = $strategyObject->getResult(); | ||||
|  | ||||
|             if (\is_string($username)) { | ||||
|                 return $username; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get authentication results. | ||||
|      * | ||||
|      * Use this if you want to get more detailed information about the results of an authentication attempts. | ||||
|      * | ||||
|      * @return  integer[]  An array containing authentication results. | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      */ | ||||
|     public function getResults() | ||||
|     { | ||||
|         return $this->results; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								libraries/vendor/joomla/authentication/src/AuthenticationStrategyInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								libraries/vendor/joomla/authentication/src/AuthenticationStrategyInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| <?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; | ||||
|  | ||||
| /** | ||||
|  * Joomla Framework AuthenticationStrategy Interface | ||||
|  * | ||||
|  * @since  1.0 | ||||
|  */ | ||||
| interface AuthenticationStrategyInterface | ||||
| { | ||||
|     /** | ||||
|      * Attempt authentication. | ||||
|      * | ||||
|      * @return  string|boolean  A string containing a username if authentication is successful, false otherwise. | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      */ | ||||
|     public function authenticate(); | ||||
|  | ||||
|     /** | ||||
|      * Get last authentication result. | ||||
|      * | ||||
|      * @return  integer  An integer from Authentication class constants with the authentication result. | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      */ | ||||
|     public function getResult(); | ||||
| } | ||||
							
								
								
									
										19
									
								
								libraries/vendor/joomla/authentication/src/Exception/UnsupportedPasswordHandlerException.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								libraries/vendor/joomla/authentication/src/Exception/UnsupportedPasswordHandlerException.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| <?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\Exception; | ||||
|  | ||||
| /** | ||||
|  * Exception class defining an unsupported password handler | ||||
|  * | ||||
|  * @since  2.0.0 | ||||
|  */ | ||||
| class UnsupportedPasswordHandlerException extends \LogicException | ||||
| { | ||||
| } | ||||
							
								
								
									
										125
									
								
								libraries/vendor/joomla/authentication/src/Password/Argon2iHandler.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								libraries/vendor/joomla/authentication/src/Password/Argon2iHandler.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,125 @@ | ||||
| <?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\Password; | ||||
|  | ||||
| use Joomla\Authentication\Exception\UnsupportedPasswordHandlerException; | ||||
|  | ||||
| /** | ||||
|  * Password handler for Argon2i hashed passwords | ||||
|  * | ||||
|  * @since  1.2.0 | ||||
|  */ | ||||
| class Argon2iHandler implements HandlerInterface | ||||
| { | ||||
|     /** | ||||
|      * Generate a hash for a plaintext password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plaintext password to validate | ||||
|      * @param   array   $options    Options for the hashing operation | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      * @throws  UnsupportedPasswordHandlerException if the password handler is not supported | ||||
|      */ | ||||
|     public function hashPassword($plaintext, array $options = []) | ||||
|     { | ||||
|         // Use the password extension if able | ||||
|         if (\defined('PASSWORD_ARGON2I')) { | ||||
|             return password_hash($plaintext, \PASSWORD_ARGON2I, $options); | ||||
|         } | ||||
|  | ||||
|         // Use the sodium extension (PHP 7.2 native or PECL 2.x) if able | ||||
|         if (\function_exists('sodium_crypto_pwhash_str_verify')) { | ||||
|             $hash = sodium_crypto_pwhash_str( | ||||
|                 $plaintext, | ||||
|                 \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, | ||||
|                 \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE | ||||
|             ); | ||||
|             sodium_memzero($plaintext); | ||||
|  | ||||
|             return $hash; | ||||
|         } | ||||
|  | ||||
|         // Use the libsodium extension (PECL 1.x) if able | ||||
|         if (\extension_loaded('libsodium')) { | ||||
|             $hash = \Sodium\crypto_pwhash_str( | ||||
|                 $plaintext, | ||||
|                 \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, | ||||
|                 \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE | ||||
|             ); | ||||
|             \Sodium\memzero($plaintext); | ||||
|  | ||||
|             return $hash; | ||||
|         } | ||||
|  | ||||
|         throw new UnsupportedPasswordHandlerException('Argon2i algorithm is not supported.'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check that the password handler is supported in this environment | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public static function isSupported() | ||||
|     { | ||||
|         // Check for native PHP engine support in the password extension | ||||
|         if (\defined('PASSWORD_ARGON2I')) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         // Check if the sodium_compat polyfill is installed and look for compatibility through that | ||||
|         if (class_exists('\\ParagonIE_Sodium_Compat') && method_exists('\\ParagonIE_Sodium_Compat', 'crypto_pwhash_is_available')) { | ||||
|             return \ParagonIE_Sodium_Compat::crypto_pwhash_is_available(); | ||||
|         } | ||||
|  | ||||
|         // Check for support from the (lib)sodium extension | ||||
|         return \function_exists('sodium_crypto_pwhash_str') || \extension_loaded('libsodium'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Validate a password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plain text password to validate | ||||
|      * @param   string  $hashed     The password hash to validate against | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      * @throws  UnsupportedPasswordHandlerException if the password handler is not supported | ||||
|      */ | ||||
|     public function validatePassword($plaintext, $hashed) | ||||
|     { | ||||
|         // Use the password extension if able | ||||
|         if (\defined('PASSWORD_ARGON2I')) { | ||||
|             return password_verify($plaintext, $hashed); | ||||
|         } | ||||
|  | ||||
|         // Use the sodium extension (PHP 7.2 native or PECL 2.x) if able | ||||
|         if (\function_exists('sodium_crypto_pwhash_str_verify')) { | ||||
|             $valid = sodium_crypto_pwhash_str_verify($hashed, $plaintext); | ||||
|             sodium_memzero($plaintext); | ||||
|  | ||||
|             return $valid; | ||||
|         } | ||||
|  | ||||
|         // Use the libsodium extension (PECL 1.x) if able | ||||
|         if (\extension_loaded('libsodium')) { | ||||
|             $valid = \Sodium\crypto_pwhash_str_verify($hashed, $plaintext); | ||||
|             \Sodium\memzero($plaintext); | ||||
|  | ||||
|             return $valid; | ||||
|         } | ||||
|  | ||||
|         throw new UnsupportedPasswordHandlerException('Argon2i algorithm is not supported.'); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										79
									
								
								libraries/vendor/joomla/authentication/src/Password/Argon2idHandler.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								libraries/vendor/joomla/authentication/src/Password/Argon2idHandler.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,79 @@ | ||||
| <?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\Password; | ||||
|  | ||||
| use Joomla\Authentication\Exception\UnsupportedPasswordHandlerException; | ||||
|  | ||||
| /** | ||||
|  * Password handler for Argon2id hashed passwords | ||||
|  * | ||||
|  * @since  1.3.0 | ||||
|  */ | ||||
| class Argon2idHandler implements HandlerInterface | ||||
| { | ||||
|     /** | ||||
|      * Generate a hash for a plaintext password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plaintext password to validate | ||||
|      * @param   array   $options    Options for the hashing operation | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   1.3.0 | ||||
|      * @throws  UnsupportedPasswordHandlerException if the password handler is not supported | ||||
|      */ | ||||
|     public function hashPassword($plaintext, array $options = []) | ||||
|     { | ||||
|         // Use the password extension if able | ||||
|         if (version_compare(\PHP_VERSION, '7.3', '>=') && \defined('PASSWORD_ARGON2ID')) { | ||||
|             return password_hash($plaintext, \PASSWORD_ARGON2ID, $options); | ||||
|         } | ||||
|  | ||||
|         throw new UnsupportedPasswordHandlerException('Argon2id algorithm is not supported.'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check that the password handler is supported in this environment | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.3.0 | ||||
|      */ | ||||
|     public static function isSupported() | ||||
|     { | ||||
|         // Check for native PHP engine support in the password extension | ||||
|         if (version_compare(\PHP_VERSION, '7.3', '>=') && \defined('PASSWORD_ARGON2ID')) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Validate a password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plain text password to validate | ||||
|      * @param   string  $hashed     The password hash to validate against | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.3.0 | ||||
|      * @throws  UnsupportedPasswordHandlerException if the password handler is not supported | ||||
|      */ | ||||
|     public function validatePassword($plaintext, $hashed) | ||||
|     { | ||||
|         // Use the password extension if able | ||||
|         if (version_compare(\PHP_VERSION, '7.3', '>=') && \defined('PASSWORD_ARGON2ID')) { | ||||
|             return password_verify($plaintext, $hashed); | ||||
|         } | ||||
|  | ||||
|         throw new UnsupportedPasswordHandlerException('Argon2id algorithm is not supported.'); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										61
									
								
								libraries/vendor/joomla/authentication/src/Password/BCryptHandler.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								libraries/vendor/joomla/authentication/src/Password/BCryptHandler.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | ||||
| <?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\Password; | ||||
|  | ||||
| /** | ||||
|  * Password handler for BCrypt hashed passwords | ||||
|  * | ||||
|  * @since  1.2.0 | ||||
|  */ | ||||
| class BCryptHandler implements HandlerInterface | ||||
| { | ||||
|     /** | ||||
|      * Generate a hash for a plaintext password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plaintext password to validate | ||||
|      * @param   array   $options    Options for the hashing operation | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public function hashPassword($plaintext, array $options = []) | ||||
|     { | ||||
|         return password_hash($plaintext, \PASSWORD_BCRYPT, $options); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check that the password handler is supported in this environment | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public static function isSupported() | ||||
|     { | ||||
|         // Check the password_verify() function exists, either as part of PHP core or through a polyfill | ||||
|         return \function_exists('password_verify'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Validate a password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plain text password to validate | ||||
|      * @param   string  $hashed     The password hash to validate against | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public function validatePassword($plaintext, $hashed) | ||||
|     { | ||||
|         return password_verify($plaintext, $hashed); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										51
									
								
								libraries/vendor/joomla/authentication/src/Password/HandlerInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								libraries/vendor/joomla/authentication/src/Password/HandlerInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | ||||
| <?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\Password; | ||||
|  | ||||
| /** | ||||
|  * Interface defining a password handler | ||||
|  * | ||||
|  * @since  1.2.0 | ||||
|  */ | ||||
| interface HandlerInterface | ||||
| { | ||||
|     /** | ||||
|      * Generate a hash for a plaintext password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plaintext password to validate | ||||
|      * @param   array   $options    Options for the hashing operation | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public function hashPassword($plaintext, array $options = []); | ||||
|  | ||||
|     /** | ||||
|      * Check that the password handler is supported in this environment | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public static function isSupported(); | ||||
|  | ||||
|     /** | ||||
|      * Validate a password | ||||
|      * | ||||
|      * @param   string  $plaintext  The plain text password to validate | ||||
|      * @param   string  $hashed     The password hash to validate against | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   1.2.0 | ||||
|      */ | ||||
|     public function validatePassword($plaintext, $hashed); | ||||
| } | ||||
							
								
								
									
										123
									
								
								libraries/vendor/joomla/authentication/src/Strategies/DatabaseStrategy.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								libraries/vendor/joomla/authentication/src/Strategies/DatabaseStrategy.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,123 @@ | ||||
| <?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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										91
									
								
								libraries/vendor/joomla/authentication/src/Strategies/LocalStrategy.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								libraries/vendor/joomla/authentication/src/Strategies/LocalStrategy.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| <?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\Input\Input; | ||||
|  | ||||
| /** | ||||
|  * Joomla Framework Local Strategy Authentication class | ||||
|  * | ||||
|  * @since  1.0 | ||||
|  */ | ||||
| class LocalStrategy extends AbstractUsernamePasswordAuthenticationStrategy | ||||
| { | ||||
|     /** | ||||
|      * The credential store. | ||||
|      * | ||||
|      * @var    array | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     private $credentialStore; | ||||
|  | ||||
|     /** | ||||
|      * The Input object | ||||
|      * | ||||
|      * @var    Input | ||||
|      * @since  1.0 | ||||
|      */ | ||||
|     private $input; | ||||
|  | ||||
|     /** | ||||
|      * Strategy Constructor | ||||
|      * | ||||
|      * @param   Input              $input            The input object from which to retrieve the request credentials. | ||||
|      * @param   array              $credentialStore  Hash of username and hash pairs. | ||||
|      * @param   ?HandlerInterface  $passwordHandler  The password handler. | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      */ | ||||
|     public function __construct(Input $input, array $credentialStore = [], ?HandlerInterface $passwordHandler = null) | ||||
|     { | ||||
|         parent::__construct($passwordHandler); | ||||
|  | ||||
|         $this->credentialStore = $credentialStore; | ||||
|         $this->input           = $input; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Attempt to authenticate the username and password pair. | ||||
|      * | ||||
|      * @return  string|boolean  A string containing a username if authentication is successful, false otherwise. | ||||
|      * | ||||
|      * @since   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) | ||||
|     { | ||||
|         return $this->credentialStore[$username] ?? false; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user