diff --git a/app/modules/web/Controllers/ConfigAccountController.php b/app/modules/web/Controllers/ConfigAccountController.php index 257aebba..68d9e19b 100644 --- a/app/modules/web/Controllers/ConfigAccountController.php +++ b/app/modules/web/Controllers/ConfigAccountController.php @@ -27,7 +27,7 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; -use SP\Core\Exceptions\SPException; +use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; @@ -42,11 +42,14 @@ class ConfigAccountController extends SimpleControllerBase use ConfigTrait; /** + * saveAction */ public function saveAction() { $configData = clone $this->config->getConfigData(); + $eventMessage = EventMessage::factory(); + // Accounts $globalSearchEnabled = Request::analyze('globalsearch', false, false, true); $accountPassToImageEnabled = Request::analyze('account_passtoimage', false, false, true); @@ -67,12 +70,18 @@ class ConfigAccountController extends SimpleControllerBase $filesAllowedSize = Request::analyze('files_allowed_size', 1024); $filesAllowedExts = Request::analyze('files_allowed_exts'); - if ($filesEnabled && $filesAllowedSize >= 16384) { - $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('El tamaño máximo por archivo es de 16MB')); + if ($filesEnabled) { + if ($filesAllowedSize >= 16384) { + $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('El tamaño máximo por archivo es de 16MB')); + } elseif ($configData->isFilesEnabled() === false) { + $eventMessage->addDescription(__u('Archivos habilitados')); + } + } elseif ($filesEnabled === false && $configData->isFilesEnabled()) { + $eventMessage->addDescription(__u('Archivos deshabilitados')); } - $configData->setFilesAllowedExts($filesAllowedExts); $configData->setFilesEnabled($filesEnabled); + $configData->setFilesAllowedExts($filesAllowedExts); $configData->setFilesAllowedSize($filesAllowedSize); // Public Links @@ -86,18 +95,25 @@ class ConfigAccountController extends SimpleControllerBase $configData->setPublinksMaxTime($pubLinksMaxTime * 60); $configData->setPublinksMaxViews($pubLinksMaxViews); - $this->eventDispatcher->notifyEvent('save.config.account', new Event($this)); + if ($pubLinksEnabled === true && $configData->isPublinksEnabled() === false) { + $eventMessage->addDescription(__u('Enlaces públicos habilitados')); + } elseif ($pubLinksEnabled === false && $configData->isPublinksEnabled()) { + $eventMessage->addDescription(__u('Enlaces públicos deshabilitados')); + } - $this->saveConfig($configData, $this->config); + + $this->saveConfig($configData, $this->config, function () use ($eventMessage) { + $this->eventDispatcher->notifyEvent('save.config.account', new Event($this, $eventMessage)); + }); } protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::ACCOUNT_CONFIG)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::ACCOUNT_CONFIG); } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } } diff --git a/app/modules/web/Controllers/ConfigBackupController.php b/app/modules/web/Controllers/ConfigBackupController.php index f975ec9d..a3b36276 100644 --- a/app/modules/web/Controllers/ConfigBackupController.php +++ b/app/modules/web/Controllers/ConfigBackupController.php @@ -28,7 +28,6 @@ use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; -use SP\Core\Exceptions\SPException; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; @@ -113,10 +112,10 @@ class ConfigBackupController extends SimpleControllerBase protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::BACKUP_CONFIG)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::BACKUP_CONFIG); } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } } diff --git a/app/modules/web/Controllers/ConfigEncryptionController.php b/app/modules/web/Controllers/ConfigEncryptionController.php index bb440f1a..11b43c9c 100644 --- a/app/modules/web/Controllers/ConfigEncryptionController.php +++ b/app/modules/web/Controllers/ConfigEncryptionController.php @@ -31,7 +31,6 @@ use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Crypt\Hash; use SP\Core\Crypt\Session as CryptSession; use SP\Core\Events\Event; -use SP\Core\Exceptions\SPException; use SP\Core\TaskFactory; use SP\Http\JsonResponse; use SP\Http\Request; @@ -200,10 +199,10 @@ class ConfigEncryptionController extends SimpleControllerBase protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::ENCRYPTION_CONFIG)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::ENCRYPTION_CONFIG); } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } } diff --git a/app/modules/web/Controllers/ConfigGeneralController.php b/app/modules/web/Controllers/ConfigGeneralController.php index 234c4c7d..56d152f1 100644 --- a/app/modules/web/Controllers/ConfigGeneralController.php +++ b/app/modules/web/Controllers/ConfigGeneralController.php @@ -27,7 +27,7 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; -use SP\Core\Exceptions\SPException; +use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; @@ -42,12 +42,12 @@ class ConfigGeneralController extends SimpleControllerBase use ConfigTrait; /** - * @throws \SP\Core\Exceptions\InvalidArgumentException + * saveAction */ public function saveAction() { - $messages = []; $configData = clone $this->config->getConfigData(); + $eventMessage = EventMessage::factory(); // General $siteLang = Request::analyze('sitelang'); @@ -80,18 +80,22 @@ class ConfigGeneralController extends SimpleControllerBase $configData->setLogEnabled($logEnabled); $configData->setSyslogEnabled($syslogEnabled); - if ($remoteSyslogEnabled && (!$syslogServer || !$syslogPort)) { - $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Faltan parámetros de syslog remoto')); - } - if ($remoteSyslogEnabled) { - $configData->setSyslogRemoteEnabled($remoteSyslogEnabled); + if (!$syslogServer || !$syslogPort) { + $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Faltan parámetros de syslog remoto')); + } + + $configData->setSyslogRemoteEnabled(true); $configData->setSyslogServer($syslogServer); $configData->setSyslogPort($syslogPort); - } elseif ($configData->isSyslogEnabled()) { + + if ($configData->isSyslogRemoteEnabled() === false) { + $eventMessage->addDescription(__u('Syslog remoto habilitado')); + } + } elseif ($remoteSyslogEnabled === false && $configData->isSyslogEnabled()) { $configData->setSyslogRemoteEnabled(false); - $messages[] = __u('Syslog remoto deshabilitado'); + $eventMessage->addDescription(__u('Syslog remoto deshabilitado')); } // Proxy @@ -114,16 +118,18 @@ class ConfigGeneralController extends SimpleControllerBase $configData->setProxyUser($proxyUser); $configData->setProxyPass($proxyPass); - $messages[] = __u('Proxy habiltado'); - } elseif ($configData->isProxyEnabled()) { + if ($configData->isProxyEnabled() === false) { + $eventMessage->addDescription(__u('Proxy habiltado')); + } + } elseif ($proxyEnabled === false && $configData->isProxyEnabled()) { $configData->setProxyEnabled(false); - $messages[] = __u('Proxy deshabilitado'); + $eventMessage->addDescription(__u('Proxy deshabilitado')); } // Autentificación $authBasicEnabled = Request::analyze('authbasic_enabled', false, false, true); - $authBasicAutologinEnabled = Request::analyze('authbasic_enabled', false, false, true); + $authBasicAutologinEnabled = Request::analyze('authbasicautologin_enabled', false, false, true); $authBasicDomain = Request::analyze('authbasic_domain'); $authSsoDefaultGroup = Request::analyze('sso_defaultgroup', false, false, true); $authSsoDefaultProfile = Request::analyze('sso_defaultprofile', false, false, true); @@ -136,26 +142,28 @@ class ConfigGeneralController extends SimpleControllerBase $configData->setSsoDefaultGroup($authSsoDefaultGroup); $configData->setSsoDefaultProfile($authSsoDefaultProfile); - $messages[] = __u('Auth Basic habilitada'); - } elseif ($configData->isAuthBasicEnabled()) { + if ($configData->isAuthBasicEnabled() === false) { + $eventMessage->addDescription(__u('Auth Basic habilitada')); + } + } elseif ($authBasicEnabled === false && $configData->isAuthBasicEnabled()) { $configData->setAuthBasicEnabled(false); $configData->setAuthBasicAutoLoginEnabled(false); - $messages[] = __u('Auth Basic deshabiltada'); + $eventMessage->addDescription(__u('Auth Basic deshabiltada')); } - $this->eventDispatcher->notifyEvent('save.config.general', new Event($this, $messages)); - - $this->saveConfig($configData, $this->config); + $this->saveConfig($configData, $this->config, function () use ($eventMessage) { + $this->eventDispatcher->notifyEvent('save.config.general', new Event($this, $eventMessage)); + }); } protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::CONFIG_GENERAL)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::CONFIG_GENERAL); } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } } diff --git a/app/modules/web/Controllers/ConfigImportController.php b/app/modules/web/Controllers/ConfigImportController.php index ec438941..528ab1f4 100644 --- a/app/modules/web/Controllers/ConfigImportController.php +++ b/app/modules/web/Controllers/ConfigImportController.php @@ -26,6 +26,8 @@ namespace SP\Modules\Web\Controllers; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; +use SP\Core\Acl\ActionsInterface; +use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; @@ -86,4 +88,15 @@ class ConfigImportController extends SimpleControllerBase $this->returnJsonResponseException($e); } } + + protected function initialize() + { + try { + $this->checkAccess(ActionsInterface::IMPORT_CONFIG); + } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + $this->returnJsonResponseException($e); + } + } } \ No newline at end of file diff --git a/app/modules/web/Controllers/ConfigLdapController.php b/app/modules/web/Controllers/ConfigLdapController.php index 5c8be8e2..189c4143 100644 --- a/app/modules/web/Controllers/ConfigLdapController.php +++ b/app/modules/web/Controllers/ConfigLdapController.php @@ -27,7 +27,7 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; -use SP\Core\Exceptions\SPException; +use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; @@ -42,11 +42,11 @@ class ConfigLdapController extends SimpleControllerBase use ConfigTrait; /** - * @throws \SP\Core\Exceptions\InvalidArgumentException + * saveAction */ public function saveAction() { - $messages = []; + $eventMessage = EventMessage::factory(); $configData = clone $this->config->getConfigData(); // LDAP @@ -76,25 +76,27 @@ class ConfigLdapController extends SimpleControllerBase $configData->setLdapBindUser($ldapBindUser); $configData->setLdapBindPass($ldapBindPass); - $messages[] = __u('LDAP habiltado'); - } elseif ($configData->isLdapEnabled()) { + if ($configData->isLdapEnabled() === false) { + $eventMessage->addDescription(__u('LDAP habiltado')); + } + } elseif ($ldapEnabled === false && $configData->isLdapEnabled()) { $configData->setLdapEnabled(false); - $messages[] = __u('LDAP deshabilitado'); + $eventMessage->addDescription(__u('LDAP deshabilitado')); } - $this->eventDispatcher->notifyEvent('save.config.ldap', new Event($this, $messages)); - - $this->saveConfig($configData, $this->config); + $this->saveConfig($configData, $this->config, function () use ($eventMessage) { + $this->eventDispatcher->notifyEvent('save.config.ldap', new Event($this, $eventMessage)); + }); } protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::LDAP_CONFIG)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::LDAP_CONFIG); } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } } diff --git a/app/modules/web/Controllers/ConfigMailController.php b/app/modules/web/Controllers/ConfigMailController.php index 89359b47..9a7a5c0e 100644 --- a/app/modules/web/Controllers/ConfigMailController.php +++ b/app/modules/web/Controllers/ConfigMailController.php @@ -27,7 +27,7 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; -use SP\Core\Exceptions\SPException; +use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; @@ -42,11 +42,11 @@ class ConfigMailController extends SimpleControllerBase use ConfigTrait; /** - * @throws \SP\Core\Exceptions\InvalidArgumentException + * saveAction */ public function saveAction() { - $messages = []; + $eventMessage = EventMessage::factory(); $configData = clone $this->config->getConfigData(); // Mail @@ -79,27 +79,29 @@ class ConfigMailController extends SimpleControllerBase $configData->setMailPass($mailPass); } - $messages[] = __u('Correo habiltado'); - } elseif ($configData->isMailEnabled()) { + if ($configData->isMailEnabled() === false) { + $eventMessage->addDescription(__u('Correo habiltado')); + } + } elseif ($mailEnabled === false && $configData->isMailEnabled()) { $configData->setMailEnabled(false); $configData->setMailRequestsEnabled(false); $configData->setMailAuthenabled(false); - $messages[] = __u('Correo deshabilitado'); + $eventMessage->addDescription(__u('Correo deshabilitado')); } - $this->eventDispatcher->notifyEvent('save.config.mail', new Event($this, $messages)); - - $this->saveConfig($configData, $this->config); + $this->saveConfig($configData, $this->config, function () use ($eventMessage) { + $this->eventDispatcher->notifyEvent('save.config.mail', new Event($this, $eventMessage)); + }); } protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::MAIL_CONFIG)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::MAIL_CONFIG); } catch (UnauthorizedPageException $e) { + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + $this->returnJsonResponseException($e); } } diff --git a/app/modules/web/Controllers/ConfigWikiController.php b/app/modules/web/Controllers/ConfigWikiController.php index e38a1b6d..5c0a755d 100644 --- a/app/modules/web/Controllers/ConfigWikiController.php +++ b/app/modules/web/Controllers/ConfigWikiController.php @@ -27,7 +27,7 @@ namespace SP\Modules\Web\Controllers; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; -use SP\Core\Exceptions\SPException; +use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; @@ -42,11 +42,11 @@ class ConfigWikiController extends SimpleControllerBase use ConfigTrait; /** - * @throws \SP\Core\Exceptions\InvalidArgumentException + * saveAction */ public function saveAction() { - $messages = []; + $eventMessage = EventMessage::factory(); $configData = clone $this->config->getConfigData(); // Wiki @@ -66,11 +66,13 @@ class ConfigWikiController extends SimpleControllerBase $configData->setWikiPageurl($wikiPageUrl); $configData->setWikiFilter(explode(',', $wikiFilter)); - $messages[] = __u('Wiki habiltada'); - } elseif ($configData->isWikiEnabled()) { + if ($configData->isWikiEnabled() === false) { + $eventMessage->addDescription(__u('Wiki habiltada')); + } + } elseif ($wikiEnabled === false && $configData->isWikiEnabled()) { $configData->setWikiEnabled(false); - $messages[] = __u('Wiki deshabilitada'); + $eventMessage->addDescription(__u('Wiki deshabilitada')); } // DokuWiki @@ -94,26 +96,28 @@ class ConfigWikiController extends SimpleControllerBase $configData->setDokuwikiPass($dokuWikiPass); $configData->setDokuwikiNamespace($dokuWikiNamespace); - $messages[] = __u('DokuWiki habilitada'); - } elseif ($configData->isDokuwikiEnabled()) { + if ($configData->isDokuwikiEnabled() === false) { + $eventMessage->addDescription(__u('DokuWiki habilitada')); + } + } elseif ($dokuWikiEnabled === false && $configData->isDokuwikiEnabled()) { $configData->setDokuwikiEnabled(false); - $messages[] = __u('DokuWiki deshabilitada'); + $eventMessage->addDescription(__u('DokuWiki deshabilitada')); } - $this->eventDispatcher->notifyEvent('save.config.wiki', new Event($this, $messages)); - - $this->saveConfig($configData, $this->config); + $this->saveConfig($configData, $this->config, function () use ($eventMessage) { + $this->eventDispatcher->notifyEvent('save.config.wiki', new Event($this, $eventMessage)); + }); } protected function initialize() { try { - if (!$this->checkAccess(ActionsInterface::WIKI_CONFIG)) { - throw new UnauthorizedPageException(SPException::INFO); - } + $this->checkAccess(ActionsInterface::WIKI_CONFIG); } catch (UnauthorizedPageException $e) { - $this->returnJsonResponse(JsonResponse::JSON_ERROR, $e->getMessage(), [$e->getHint()]); + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + $this->returnJsonResponseException($e); } } } \ No newline at end of file diff --git a/app/modules/web/Controllers/SimpleControllerBase.php b/app/modules/web/Controllers/SimpleControllerBase.php index bb5f8f49..1ff950cb 100644 --- a/app/modules/web/Controllers/SimpleControllerBase.php +++ b/app/modules/web/Controllers/SimpleControllerBase.php @@ -29,6 +29,7 @@ use Interop\Container\ContainerInterface; use Klein\Klein; use SP\Config\Config; use SP\Core\Acl\Acl; +use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\EventDispatcher; use SP\Core\Session\Session; use SP\Core\UI\Theme; @@ -120,10 +121,12 @@ abstract class SimpleControllerBase * Comprobar si está permitido el acceso al módulo/página. * * @param null $action La acción a comprobar - * @return bool + * @throws UnauthorizedPageException */ protected function checkAccess($action) { - return $this->session->getUserData()->getIsAdminApp() || $this->acl->checkUserAccess($action); + if (!$this->session->getUserData()->getIsAdminApp() || !$this->acl->checkUserAccess($action)) { + throw new UnauthorizedPageException(UnauthorizedPageException::INFO); + } } } \ No newline at end of file diff --git a/app/modules/web/Controllers/Traits/ConfigTrait.php b/app/modules/web/Controllers/Traits/ConfigTrait.php index 004a0842..6fbb0224 100644 --- a/app/modules/web/Controllers/Traits/ConfigTrait.php +++ b/app/modules/web/Controllers/Traits/ConfigTrait.php @@ -42,10 +42,11 @@ trait ConfigTrait /** * Guardar la configuración * - * @param ConfigData $configData - * @param Config $config + * @param ConfigData $configData + * @param Config $config + * @param callable|null $onSuccess */ - protected function saveConfig(ConfigData $configData, Config $config) + protected function saveConfig(ConfigData $configData, Config $config, callable $onSuccess = null) { try { if ($configData->isDemoEnabled()) { @@ -60,8 +61,14 @@ trait ConfigTrait Util::unlockApp(false); } + if ($onSuccess !== null) { + $onSuccess(); + } + $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Configuración actualizada')); } catch (\Exception $e) { + processException($e); + $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Error al guardar la configuración')); } }