. */ namespace SP\Modules\Web\Controllers\ConfigEncryption; use Exception; use JsonException; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Exceptions\SessionTimeout; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Crypt\Ports\TemporaryMasterPassServiceInterface; use SP\Http\JsonResponse; use SP\Modules\Web\Controllers\SimpleControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Mvc\Controller\SimpleControllerHelper; /** * Class ConfigEncryptionController * * @package SP\Modules\Web\Controllers */ final class SaveTempController extends SimpleControllerBase { use JsonTrait; private TemporaryMasterPassServiceInterface $temporaryMasterPassService; public function __construct( Application $application, SimpleControllerHelper $simpleControllerHelper, TemporaryMasterPassServiceInterface $temporaryMasterPassService ) { parent::__construct($application, $simpleControllerHelper); $this->temporaryMasterPassService = $temporaryMasterPassService; } /** * Create a temporary master pass * * @return bool * @throws JsonException */ public function saveTempAction(): bool { try { $key = $this->temporaryMasterPassService->create( $this->request->analyzeInt('temporary_masterpass_maxtime', 3600) ); $groupId = $this->request->analyzeInt('temporary_masterpass_group', 0); $sendEmail = $this->configData->isMailEnabled() && $this->request->analyzeBool('temporary_masterpass_email'); if ($sendEmail) { try { if ($groupId > 0) { $this->temporaryMasterPassService->sendByEmailForGroup($groupId, $key); } else { $this->temporaryMasterPassService->sendByEmailForAllUsers($key); } return $this->returnJsonResponse( JsonResponse::JSON_SUCCESS, __u('Temporary password generated'), [__u('Email sent')] ); } catch (Exception $e) { processException($e); $this->eventDispatcher->notify('exception', new Event($e)); return $this->returnJsonResponse( JsonResponse::JSON_WARNING, __u('Temporary password generated'), [__u('Error while sending the email')] ); } } return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Temporary password generated')); } catch (Exception $e) { processException($e); $this->eventDispatcher->notify('exception', new Event($e)); return $this->returnJsonResponseException($e); } } /** * @return void * @throws JsonException * @throws SessionTimeout */ protected function initialize(): void { try { $this->checks(); $this->checkAccess(AclActionsInterface::CONFIG_CRYPT); } catch (UnauthorizedPageException $e) { $this->eventDispatcher->notify('exception', new Event($e)); $this->returnJsonResponseException($e); } } }