. */ namespace SP\Modules\Web\Controllers\Account; use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Domain\Account\Ports\AccountService; use SP\Domain\Common\Attributes\Action; use SP\Domain\Common\Dtos\ActionResponse; use SP\Domain\Common\Enums\ResponseType; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\CryptException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Core\Exceptions\SPException; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Modules\Web\Controllers\Helpers\Account\AccountPasswordHelper; use SP\Modules\Web\Controllers\Helpers\HelperException; use SP\Mvc\Controller\WebControllerHelper; use function SP\__u; /** * Class CopyPassHistoryController */ final class CopyPassHistoryController extends AccountControllerBase { public function __construct( Application $application, WebControllerHelper $webControllerHelper, private readonly AccountService $accountService, private readonly AccountPasswordHelper $accountPasswordHelper ) { parent::__construct( $application, $webControllerHelper ); } /** * Copy account's password * * @param int $id Account's ID * * @return ActionResponse * @throws ConstraintException * @throws HelperException * @throws NoSuchItemException * @throws QueryException * @throws CryptException * @throws SPException */ #[Action(ResponseType::JSON)] public function copyPassHistoryAction(int $id): ActionResponse { $account = $this->accountService->getPasswordHistoryForId($id); $data = [ 'accpass' => $this->accountPasswordHelper->getPasswordClear($account), ]; $this->eventDispatcher->notify( 'copy.account.pass.history', new Event( $this, EventMessage::build(__u('Password copied')) ->addDetail(__u('Account'), $account->getName()) ) ); return ActionResponse::ok(__u('Password copied'), $data); } }