diff --git a/app/modules/web/Controllers/AccessManagerController.php b/app/modules/web/Controllers/AccessManagerController.php index ee1e3fa3..1d829e8a 100644 --- a/app/modules/web/Controllers/AccessManagerController.php +++ b/app/modules/web/Controllers/AccessManagerController.php @@ -182,4 +182,13 @@ class AccessManagerController extends ControllerBase { return $this->tabsGridHelper; } + /** + * @throws \Psr\Container\ContainerExceptionInterface + * @throws \Psr\Container\NotFoundExceptionInterface + * @throws \SP\Services\Auth\AuthException + */ + protected function initialize() + { + $this->checkLoggedIn(); + } } \ No newline at end of file diff --git a/app/modules/web/Controllers/ConfigEncryptionController.php b/app/modules/web/Controllers/ConfigEncryptionController.php index 16a02e4b..bd9cb236 100644 --- a/app/modules/web/Controllers/ConfigEncryptionController.php +++ b/app/modules/web/Controllers/ConfigEncryptionController.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link https://syspass.org + * @author nuxsmin + * @link https://syspass.org * @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. @@ -32,15 +32,17 @@ use SP\Core\Crypt\Hash; use SP\Core\Crypt\Session as CryptSession; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; +use SP\Core\Messages\MailMessage; use SP\Core\TaskFactory; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\JsonTrait; +use SP\Providers\Mail\MailProvider; use SP\Services\Config\ConfigService; use SP\Services\Crypt\MasterPassService; use SP\Services\Crypt\TemporaryMasterPassService; use SP\Services\Crypt\UpdateMasterPassRequest; -use SP\Services\ServiceException; +use SP\Services\User\UserService; use SP\Util\Util; /** @@ -98,7 +100,7 @@ class ConfigEncryptionController extends SimpleControllerBase $configService = $this->dic->get(ConfigService::class); if (!$noAccountPassChange) { - Util::lockApp(); + Util::lockApp($this->session->getUserData()->getId(), 'masterpass'); $request = new UpdateMasterPassRequest( $currentMasterPass, @@ -108,12 +110,18 @@ class ConfigEncryptionController extends SimpleControllerBase ); try { + $this->eventDispatcher->notifyEvent('update.masterPassword.start', new Event($this)); + $mastePassService->changeMasterPassword($request); $configService->save('masterPwd', $request->getHash()); $configService->save('lastupdatempass', time()); + + $this->eventDispatcher->notifyEvent('update.masterPassword.end', new Event($this)); } catch (\Exception $e) { processException($e); + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } finally { Util::unlockApp(); @@ -127,6 +135,8 @@ class ConfigEncryptionController extends SimpleControllerBase } catch (\Exception $e) { processException($e); + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Error al guardar el hash de la clave maestra')); } } @@ -154,6 +164,9 @@ class ConfigEncryptionController extends SimpleControllerBase } catch (\Exception $e) { processException($e); + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Error al actualizar el hash de la clave maestra')); } } @@ -165,37 +178,47 @@ class ConfigEncryptionController extends SimpleControllerBase { try { $temporaryMasterPassService = $this->dic->get(TemporaryMasterPassService::class); - $temporaryMasterPassService->create(Request::analyzeInt('tmpass_maxtime', 3600)); + $key = $temporaryMasterPassService->create(Request::analyzeInt('tmpass_maxtime', 3600)); + + $groupId = Request::analyzeInt('tmpass_group'); + $sendEmail = Request::analyzeBool('tmpass_chkSendEmail'); + + if ($sendEmail && $groupId) { + $mailMessage = new MailMessage(); + $mailMessage->setTitle(sprintf(__('Clave Maestra %s'), Util::getAppInfo('appname'))); + $mailMessage->addDescription(__('Se ha generado una nueva clave para el acceso a sysPass y se solicitará en el siguiente inicio.')); + $mailMessage->addDescriptionLine(); + $mailMessage->addDescription(sprintf(__('La nueva clave es: %s'), $key)); + $mailMessage->addDescriptionLine(); + $mailMessage->addDescription(sprintf(__('Esta clave estará activa hasta: %s'), date('r', $temporaryMasterPassService->getMaxTime()))); + $mailMessage->addDescriptionLine(); + $mailMessage->addDescription(__('No olvide acceder lo antes posible para guardar los cambios.')); + + try { + $emails = array_map(function ($value) { + return $value->email; + }, $this->dic->get(UserService::class)->getUserEmailForGroup($groupId)); + + $this->dic->get(MailProvider::class)->sendBatch($mailMessage->getTitle(), $emails, $mailMessage); + + $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Clave Temporal Generada'), [__u('Email enviado')]); + } catch (\Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + $this->returnJsonResponse(JsonResponse::JSON_WARNING, __u('Clave Temporal Generada'), [__u('Error al enviar email')]); + } + } $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Clave Temporal Generada')); - } catch (ServiceException $e) { + } catch (\Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } - - -// $tempMasterGroup = Request::analyze('tmpass_group', 0); -// $tempMasterEmail = Request::analyze('tmpass_chkSendEmail', 0, false, 1); -// -// $this->LogMessage->addDescription(__('Clave Temporal Generada', false)); -// -// if ($tempMasterEmail) { -// $Message = new NoticeMessage(); -// $Message->setTitle(sprintf(__('Clave Maestra %s'), Util::getAppInfo('appname'))); -// $Message->addDescription(__('Se ha generado una nueva clave para el acceso a sysPass y se solicitará en el siguiente inicio.')); -// $Message->addDescription(''); -// $Message->addDescription(sprintf(__('La nueva clave es: %s'), $tempMasterPass)); -// $Message->addDescription(''); -// $Message->addDescription(__('No olvide acceder lo antes posible para guardar los cambios.')); -// -// if ($tempMasterGroup !== 0) { -// Email::sendEmailBatch($Message, UserUtil::getUserGroupEmail($tempMasterGroup)); -// } else { -// Email::sendEmailBatch($Message, UserUtil::getUsersEmail()); -// } -// } -// -// $this->JsonResponse->setStatus(0); - } protected function initialize() diff --git a/app/modules/web/Controllers/ConfigImportController.php b/app/modules/web/Controllers/ConfigImportController.php index da70db22..3d13e3ac 100644 --- a/app/modules/web/Controllers/ConfigImportController.php +++ b/app/modules/web/Controllers/ConfigImportController.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link https://syspass.org + * @author nuxsmin + * @link https://syspass.org * @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. @@ -64,12 +64,11 @@ class ConfigImportController extends SimpleControllerBase $importParams->setCsvDelimiter(Request::analyzeString('csvDelimiter')); try { - $importService = $this->dic->get(ImportService::class); - $counter = $importService->doImport($importParams, new FileImport($this->router->request()->files()->get('inFile'))); + $counter = $this->dic->get(ImportService::class) + ->doImport($importParams, new FileImport($this->router->request()->files()->get('inFile'))); - $this->eventDispatcher->notifyEvent('run.import', new Event($this, - EventMessage::factory() - ->addDetail(__u('Cuentas importadas'), $counter)) + $this->eventDispatcher->notifyEvent('run.import.end', + new Event($this, EventMessage::factory()->addDetail(__u('Cuentas importadas'), $counter)) ); if ($counter > 0) { diff --git a/app/modules/web/Controllers/ConfigManagerController.php b/app/modules/web/Controllers/ConfigManagerController.php index 4ebb1dd3..7d65032e 100644 --- a/app/modules/web/Controllers/ConfigManagerController.php +++ b/app/modules/web/Controllers/ConfigManagerController.php @@ -337,4 +337,14 @@ class ConfigManagerController extends ControllerBase { return $this->tabsHelper; } + + /** + * @throws \Psr\Container\ContainerExceptionInterface + * @throws \Psr\Container\NotFoundExceptionInterface + * @throws \SP\Services\Auth\AuthException + */ + protected function initialize() + { + $this->checkLoggedIn(); + } } \ No newline at end of file diff --git a/app/modules/web/Controllers/ControllerBase.php b/app/modules/web/Controllers/ControllerBase.php index 2df6bb64..0cca1509 100644 --- a/app/modules/web/Controllers/ControllerBase.php +++ b/app/modules/web/Controllers/ControllerBase.php @@ -281,7 +281,7 @@ abstract class ControllerBase } } - $this->checkLoggedInSession($this->session); + $this->checkLoggedInSession($this->session, $this->router); } /** diff --git a/app/modules/web/Controllers/CustomFieldController.php b/app/modules/web/Controllers/CustomFieldController.php index f04be587..292e15e9 100644 --- a/app/modules/web/Controllers/CustomFieldController.php +++ b/app/modules/web/Controllers/CustomFieldController.php @@ -133,7 +133,7 @@ class CustomFieldController extends ControllerBase implements CrudControllerInte $customField = $customFieldId ? $this->customFieldService->getById($customFieldId) : new CustomFieldDefinitionData(); // FIXME - $customFieldTypeService = new CustomFieldTypeRepository(); + $customFieldTypeService = $this->dic->get(CustomFieldTypeRepository::class); $this->view->assign('field', $customField); $this->view->assign('types', $customFieldTypeService->getAll()); diff --git a/app/modules/web/Controllers/Helpers/Account/AccountHelper.php b/app/modules/web/Controllers/Helpers/Account/AccountHelper.php index a32eb485..06eed2bf 100644 --- a/app/modules/web/Controllers/Helpers/Account/AccountHelper.php +++ b/app/modules/web/Controllers/Helpers/Account/AccountHelper.php @@ -25,7 +25,6 @@ namespace SP\Modules\Web\Controllers\Helpers\Account; use SP\Account\AccountAcl; -use SP\Bootstrap; use SP\Core\Acl\AccountPermissionException; use SP\Core\Acl\Acl; use SP\Core\Acl\ActionsInterface; @@ -156,7 +155,7 @@ class AccountHelper extends HelperBase $this->view->assign('accountData', $accountData); $this->view->assign('gotData', true); - $this->view->assign('accountActions', Bootstrap::getContainer()->get(AccountActionsHelper::class)->getActionsForAccount($this->accountAcl, $accountActionsDto)); + $this->view->assign('accountActions', $this->dic->get(AccountActionsHelper::class)->getActionsForAccount($this->accountAcl, $accountActionsDto)); $this->setViewCommon(); } @@ -281,7 +280,7 @@ class AccountHelper extends HelperBase $this->view->assign('accountId', 0); $this->view->assign('gotData', false); - $this->view->assign('accountActions', Bootstrap::getContainer()->get(AccountActionsHelper::class)->getActionsForAccount($this->accountAcl, new AccountActionsDto($this->accountId))); + $this->view->assign('accountActions', $this->dic->get(AccountActionsHelper::class)->getActionsForAccount($this->accountAcl, new AccountActionsDto($this->accountId))); $this->setViewCommon(); } @@ -311,7 +310,7 @@ class AccountHelper extends HelperBase $this->view->assign('accountId', $accountData->getId()); $this->view->assign('accountData', $accountDetailsResponse->getAccountVData()); - $this->view->assign('accountActions', Bootstrap::getContainer()->get(AccountActionsHelper::class)->getActionsForAccount($this->accountAcl, new AccountActionsDto($this->accountId, null, $accountData->getParentId()))); + $this->view->assign('accountActions', $this->dic->get(AccountActionsHelper::class)->getActionsForAccount($this->accountAcl, new AccountActionsDto($this->accountId, null, $accountData->getParentId()))); return true; } diff --git a/app/modules/web/Controllers/Helpers/ItemsGridHelper.php b/app/modules/web/Controllers/Helpers/ItemsGridHelper.php index d746418e..2de77cff 100644 --- a/app/modules/web/Controllers/Helpers/ItemsGridHelper.php +++ b/app/modules/web/Controllers/Helpers/ItemsGridHelper.php @@ -26,7 +26,6 @@ namespace SP\Modules\Web\Controllers\Helpers; defined('APP_ROOT') || die(); -use SP\Bootstrap; use SP\Core\Acl\Acl; use SP\Core\Acl\ActionsInterface; use SP\Core\UI\ThemeIconsBase; @@ -1477,7 +1476,7 @@ class ItemsGridHelper extends HelperBase */ protected function initialize() { - $this->acl = Bootstrap::getContainer()->get(Acl::class); + $this->acl = $this->dic->get(Acl::class); $this->icons = $this->view->getTheme()->getIcons(); } } \ No newline at end of file diff --git a/app/modules/web/Controllers/Helpers/LayoutHelper.php b/app/modules/web/Controllers/Helpers/LayoutHelper.php index 78940074..73ead596 100644 --- a/app/modules/web/Controllers/Helpers/LayoutHelper.php +++ b/app/modules/web/Controllers/Helpers/LayoutHelper.php @@ -369,7 +369,7 @@ class LayoutHelper extends HelperBase */ protected function initialize() { - $this->theme = Bootstrap::getContainer()->get(Theme::class); + $this->theme = $this->dic->get(Theme::class); $this->loggedIn = $this->session->isLoggedIn(); diff --git a/app/modules/web/Controllers/InstallController.php b/app/modules/web/Controllers/InstallController.php index cef9ff7a..e8cb11a7 100644 --- a/app/modules/web/Controllers/InstallController.php +++ b/app/modules/web/Controllers/InstallController.php @@ -120,7 +120,7 @@ class InstallController extends ControllerBase try { Installer::run($installData); - $this->returnJsonResponse(JsonResponse::JSON_SUCCESS_STICKY, __('Instalación finalizada')); + $this->returnJsonResponse(JsonResponse::JSON_SUCCESS_STICKY, __u('Instalación finalizada')); } catch (\Exception $e) { $this->returnJsonResponseException($e); } diff --git a/app/modules/web/Controllers/ItemManagerController.php b/app/modules/web/Controllers/ItemManagerController.php index d4341950..a6b02c8b 100644 --- a/app/modules/web/Controllers/ItemManagerController.php +++ b/app/modules/web/Controllers/ItemManagerController.php @@ -236,4 +236,14 @@ class ItemManagerController extends ControllerBase { return $this->tabsGridHelper; } + + /** + * @throws \Psr\Container\ContainerExceptionInterface + * @throws \Psr\Container\NotFoundExceptionInterface + * @throws \SP\Services\Auth\AuthException + */ + protected function initialize() + { + $this->checkLoggedIn(); + } } \ No newline at end of file diff --git a/app/modules/web/Controllers/SimpleControllerBase.php b/app/modules/web/Controllers/SimpleControllerBase.php index c86196a5..bbfe40ea 100644 --- a/app/modules/web/Controllers/SimpleControllerBase.php +++ b/app/modules/web/Controllers/SimpleControllerBase.php @@ -113,7 +113,7 @@ abstract class SimpleControllerBase */ protected function checks() { - $this->checkLoggedInSession($this->session); + $this->checkLoggedInSession($this->session, $this->router); $this->checkSecurityToken($this->session); } diff --git a/app/modules/web/Controllers/Traits/ConfigTrait.php b/app/modules/web/Controllers/Traits/ConfigTrait.php index 85dee11b..c269cf5e 100644 --- a/app/modules/web/Controllers/Traits/ConfigTrait.php +++ b/app/modules/web/Controllers/Traits/ConfigTrait.php @@ -55,10 +55,8 @@ trait ConfigTrait $config->saveConfig($configData); - if ($configData->isMaintenance()) { - Util::lockApp(false); - } elseif (Bootstrap::$LOCK > 0) { - Util::unlockApp(false); + if ($configData->isMaintenance() === false && Bootstrap::$LOCK !== false) { + Util::unlockApp(); } if ($onSuccess !== null) { diff --git a/app/modules/web/Controllers/UserController.php b/app/modules/web/Controllers/UserController.php index 6db2180d..bc367cd0 100644 --- a/app/modules/web/Controllers/UserController.php +++ b/app/modules/web/Controllers/UserController.php @@ -39,7 +39,7 @@ use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\UserForm; use SP\Mvc\Controller\CrudControllerInterface; use SP\Mvc\View\Components\SelectItemAdapter; -use SP\Providers\Mail\MailHandler; +use SP\Providers\Mail\MailProvider; use SP\Services\User\UserService; use SP\Services\UserGroup\UserGroupService; use SP\Services\UserPassRecover\UserPassRecoverService; @@ -308,14 +308,14 @@ class UserController extends ControllerBase implements CrudControllerInterface * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException - * @throws \SP\Providers\Mail\MailHandlerException + * @throws \SP\Providers\Mail\MailProviderException * @throws \SP\Services\ServiceException */ protected function checkChangeUserPass(UserData $userData) { if ($userData->isChangePass()) { $hash = $this->dic->get(UserPassRecoverService::class)->requestForUserId($userData->getId()); - $this->dic->get(MailHandler::class)->send(__('Cambio de Clave'), $userData->getEmail(), UserPassRecoverService::getMailMessage($hash)); + $this->dic->get(MailProvider::class)->send(__('Cambio de Clave'), $userData->getEmail(), UserPassRecoverService::getMailMessage($hash)); // $this->returnJsonResponse( // JsonResponse::JSON_WARNING, diff --git a/app/modules/web/Controllers/UserPassResetController.php b/app/modules/web/Controllers/UserPassResetController.php index 3d338a93..675de258 100644 --- a/app/modules/web/Controllers/UserPassResetController.php +++ b/app/modules/web/Controllers/UserPassResetController.php @@ -32,7 +32,7 @@ use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Helpers\LayoutHelper; use SP\Modules\Web\Controllers\Traits\JsonTrait; -use SP\Providers\Mail\MailHandler; +use SP\Providers\Mail\MailProvider; use SP\Repositories\Track\TrackRequest; use SP\Services\Track\TrackService; use SP\Services\User\UserService; @@ -103,7 +103,7 @@ class UserPassResetController extends ControllerBase ->addDetail(__u('Solicitado para'), sprintf('%s (%s)', $login, $email))) ); - $this->dic->get(MailHandler::class)->send(__('Cambio de Clave'), $email, UserPassRecoverService::getMailMessage($hash)); + $this->dic->get(MailProvider::class)->send(__('Cambio de Clave'), $email, UserPassRecoverService::getMailMessage($hash)); $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Solicitud enviada'), [__u('En breve recibirá un correo para completar la solicitud.')]); } catch (\Exception $e) { diff --git a/app/modules/web/themes/material-blue/views/config/mail.inc b/app/modules/web/themes/material-blue/views/config/mail.inc index f20ddb55..77b6515d 100644 --- a/app/modules/web/themes/material-blue/views/config/mail.inc +++ b/app/modules/web/themes/material-blue/views/config/mail.inc @@ -4,7 +4,8 @@ -