Files
ms1inscription-v5/rapports/components/security/user_self_management.php
2026-05-13 09:43:32 -04:00

68 lines
2.1 KiB
PHP

<?php
include_once dirname(__FILE__) . '/' . 'secure_application.php';
include_once dirname(__FILE__) . '/' . 'table_based_user_grants_manager.php';
include_once dirname(__FILE__) . '/' . '../captions.php';
class UserSelfManagement
{
/** @var SecureApplication */
private $app;
/** @var IUserManager */
private $userManager;
/** @var IdentityCheckStrategy */
private $identityCheckStrategy;
public function __construct(SecureApplication $app, IUserManager $um = null,
IdentityCheckStrategy $identityCheckStrategy = null)
{
$this->app = $app;
$this->userManager = $um;
$this->identityCheckStrategy = $identityCheckStrategy;
}
/**
* @param string $currentPassword
* @param string $newPassword
* @throws Exception
*/
public function ValidateAndChangePassword($currentPassword, $newPassword)
{
if (!$this->CheckSecurityManagementObjects())
throw new Exception('This configuration is not secure');
$this->ValidateCurrentPassword($currentPassword);
$this->ChangePassword($newPassword);
}
private function CheckSecurityManagementObjects() {
return !(is_null($this->userManager) || is_null($this->identityCheckStrategy) ||
is_null($this->app->GetUserAuthorizationStrategy()) ||
!$this->app->GetUserAuthorizationStrategy()->IsCurrentUserLoggedIn());
}
/**
* @param string $currentPassword
* @throws Exception
*/
private function ValidateCurrentPassword($currentPassword)
{
$errorMessage = '';
if (!$this->identityCheckStrategy->CheckUsernameAndPassword(
$this->app->GetUserAuthorizationStrategy()->GetCurrentUser(), $currentPassword, $errorMessage)
) {
throw new Exception(GetCaptions('UTF-8')->GetMessageString('UsernamePasswordWasInvalid'));
}
}
/**
* @param string $newPassword
*/
private function ChangePassword($newPassword)
{
$this->userManager->ChangeUserPassword($this->app->GetUserAuthorizationStrategy()->GetCurrentUserId(),
$newPassword);
}
}