Files
DomFramework/src/Authsession.php
2022-11-25 21:21:30 +01:00

137 lines
4.8 KiB
PHP

<?php
/** DomFramework
* @package domframework
* @author Dominique Fournier <dominique@fournier38.fr>
* @license BSD
*/
namespace Domframework;
/** User authentication against SESSION */
class Authsession extends Auth
{
/** Check if there is already a session or the user can not be authenticated
*/
public function __construct()
{
if (!isset($_SESSION)) {
throw new \Exception("No session previously opened", 401);
}
}
/** No connection to session */
public function connect()
{
return true;
}
/** Try to authenticate the email/password of the user
* @param string $email Email to authenticate
* @param string $password Password to authenticate
*/
public function authentication($email, $password)
{
if (
!isset($_SESSION["domframework"]["auth"]["email"]) ||
!isset($_SESSION["domframework"]["auth"]["password"])
) {
throw new \Exception("No previous email in session", 401);
}
if ($_SESSION["domframework"]["auth"]["email"] !== $email) {
throw new \Exception("Unable to authenticate user '$email'", 401);
}
if ($_SESSION["domframework"]["auth"]["password"] !== $password) {
throw new \Exception("Bad password for '$email'", 401);
}
}
/** Return all the parameters recorded for the authenticate user */
public function getdetails()
{
if (! isset($_SESSION["domframework"]["auth"]["email"])) {
return array("lastname" => "anonymous",
"firstname" => "",
"email" => "anonymous");
}
return array("lastname" => $_SESSION["domframework"]["auth"]["lastname"],
"firstname" => $_SESSION["domframework"]["auth"]["firstname"],
"email" => $_SESSION["domframework"]["auth"]["email"]);
}
/** Method to change the password : unavailable in SESSION auth
* @param string $oldpassword The old password (to check if the user have the
* rights to change the password)
* @param string $newpassword The new password to be recorded
*/
public function changepassword($oldpassword, $newpassword)
{
throw new \Exception(
dgettext(
"domframework",
"The password can't be change for SESSION users"
),
405
);
}
/** Method to overwrite the password (without oldpassword check)
* Must be reserved to the administrators. For the users, use changepassword
* method
* @param string $email the user identifier to select
* @param string $newpassword The new password to be recorded
*/
public function overwritepassword($email, $newpassword)
{
throw new \Exception(
dgettext(
"domframework",
"The password can't be overwrite for SESSION users"
),
405
);
}
/** Save the data in session
* @param string $email The email to store in the session
* @param string $password The password to store in the session
* @param string $lastname The lastname to store in the session
* @param string $firstname The firstname to store in the session
* @deprecated 0.23 */
public function savedatas($email, $password, $lastname, $firstname)
{
return $this->savedata($email, $password, $lastname, $firstname);
}
/** Save the data in session
* @param string $email The email to store in the session
* @param string $password The password to store in the session
* @param string $lastname The lastname to store in the session
* @param string $firstname The firstname to store in the session
*/
public function savedata($email, $password, $lastname, $firstname)
{
$_SESSION["domframework"]["auth"]["lastname"] = $lastname;
$_SESSION["domframework"]["auth"]["firstname"] = $firstname;
$_SESSION["domframework"]["auth"]["email"] = $email;
$_SESSION["domframework"]["auth"]["password"] = $password;
}
/** Remove the information from the session */
public function logout()
{
if (isset($_SESSION["domframework"]["auth"]["lastname"])) {
unset($_SESSION["domframework"]["auth"]["lastname"]);
}
if (isset($_SESSION["domframework"]["auth"]["firstname"])) {
unset($_SESSION["domframework"]["auth"]["firstname"]);
}
if (isset($_SESSION["domframework"]["auth"]["email"])) {
unset($_SESSION["domframework"]["auth"]["email"]);
}
if (isset($_SESSION["domframework"]["auth"]["password"])) {
unset($_SESSION["domframework"]["auth"]["password"]);
}
}
}