. */ namespace SP\Services\Account; use SP\Config\ConfigData; use SP\Core\Exceptions\ConstraintException; use SP\Core\Exceptions\NoSuchPropertyException; use SP\Core\Exceptions\QueryException; use SP\Core\Exceptions\ValidationException; use SP\DataModel\ItemPreset\Password; use SP\Mvc\Controller\Validators\PasswordValidator; use SP\Services\ItemPreset\ItemPresetInterface; use SP\Services\ItemPreset\ItemPresetService; /** * Class AccountPreset * * @package SP\Services\Account */ final class AccountPresetService { /** * @var ItemPresetService */ private $itemPresetService; /** * @var ConfigData */ private $configData; /** * AccountPreset constructor. * * @param ItemPresetService $itemPresetService * @param ConfigData $configData */ public function __construct(ItemPresetService $itemPresetService, ConfigData $configData) { $this->itemPresetService = $itemPresetService; $this->configData = $configData; } /** * @param AccountRequest $accountRequest * * @throws ValidationException * @throws ConstraintException * @throws NoSuchPropertyException * @throws QueryException */ public function checkPasswordPreset(AccountRequest $accountRequest) { $itemPreset = $this->itemPresetService->getForCurrentUser(ItemPresetInterface::ITEM_TYPE_ACCOUNT_PASSWORD); if ($itemPreset !== null && $itemPreset->getFixed() === 1) { $passwordPreset = $itemPreset->hydrate(Password::class); PasswordValidator::factory($passwordPreset)->validate($accountRequest->pass); if ($this->configData->isAccountExpireEnabled()) { $expireTimePreset = $passwordPreset->getExpireTime(); if ($expireTimePreset > 0 && ($accountRequest->passDateChange === 0 || $accountRequest->passDateChange < time() + $expireTimePreset) ) { $accountRequest->passDateChange = time() + $expireTimePreset; } } } } }