From 687781a55784372ef920ca789aa7f9edf576c40e Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Fri, 6 Jan 2017 12:06:23 +0100 Subject: [PATCH] * [DEV] Config actions refactoring & code cleanup --- ajax/ajax_configSave.php | 435 +------------- .../ConfigActionController.class.php | 536 ++++++++++++++++++ .../Controller/ItemActionController.class.php | 8 +- inc/SP/Controller/MainController.class.php | 1 + .../material-blue/views/config/general.inc | 7 +- .../material-blue/views/config/import.inc | 14 + .../material-blue/views/config/ldap.inc | 4 +- js/app-actions.js | 18 +- js/app-actions.min.js | 20 +- js/app-main.min.js | 2 +- 10 files changed, 587 insertions(+), 458 deletions(-) create mode 100644 inc/SP/Controller/ConfigActionController.class.php diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php index 992ed0ba..00ed8a56 100644 --- a/ajax/ajax_configSave.php +++ b/ajax/ajax_configSave.php @@ -23,26 +23,8 @@ * */ -use SP\Account\Account; -use SP\Account\AccountHistory; -use SP\Config\Config; -use SP\Config\ConfigDB; -use SP\Core\ActionsInterface; -use SP\Core\Crypt; -use SP\Core\CryptMasterPass; -use SP\Core\Init; -use SP\Core\Session; -use SP\Core\SessionUtil; -use SP\Core\Exceptions\SPException; -use SP\Html\Html; -use SP\Http\JsonResponse; +use SP\Controller\ConfigActionController; use SP\Http\Request; -use SP\Log\Email; -use SP\Log\Log; -use SP\Mgmt\CustomFields\CustomFieldsUtil; -use SP\Mgmt\Users\UserPass; -use SP\Util\Checks; -use SP\Util\Json; define('APP_ROOT', '..'); @@ -50,416 +32,5 @@ require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Bas Request::checkReferer('POST'); -$Json = new JsonResponse(); - -if (!Init::isLoggedIn()) { - $Json->setStatus(10); - $Json->setDescription(_('La sesión no se ha iniciado o ha caducado')); - Json::returnJson($Json); -} - -$sk = Request::analyze('sk', false); - - -if (!$sk || !SessionUtil::checkSessionKey($sk)) { - $Json->setDescription(_('CONSULTA INVÁLIDA')); - Json::returnJson($Json); -} elseif (Checks::demoIsEnabled()) { - $Json->setDescription(_('Ey, esto es una DEMO!!')); - Json::returnJson($Json); -} - -// Variables POST del formulario -$actionId = Request::analyze('actionId', 0); -$activeTab = Request::analyze('activeTab', 0); - -if ($actionId === ActionsInterface::ACTION_CFG_GENERAL - || $actionId === ActionsInterface::ACTION_CFG_WIKI - || $actionId === ActionsInterface::ACTION_CFG_LDAP - || $actionId === ActionsInterface::ACTION_CFG_MAIL -) { - $Log = Log::newLog(_('Modificar Configuración')); - $Config = Session::getConfig(); - - if ($actionId === ActionsInterface::ACTION_CFG_GENERAL) { - // General - $siteLang = Request::analyze('sitelang'); - $siteTheme = Request::analyze('sitetheme', 'material-blue'); - $sessionTimeout = Request::analyze('session_timeout', 300); - $httpsEnabled = Request::analyze('https_enabled', false, false, true); - $debugEnabled = Request::analyze('debug', false, false, true); - $maintenanceEnabled = Request::analyze('maintenance', false, false, true); - $checkUpdatesEnabled = Request::analyze('updates', false, false, true); - $checkNoticesEnabled = Request::analyze('notices', false, false, true); - - $Config->setSiteLang($siteLang); - $Config->setSiteTheme($siteTheme); - $Config->setSessionTimeout($sessionTimeout); - $Config->setHttpsEnabled($httpsEnabled); - $Config->setDebug($debugEnabled); - $Config->setMaintenance($maintenanceEnabled); - $Config->setCheckUpdates($checkUpdatesEnabled); - $Config->setChecknotices($checkNoticesEnabled); - - // Events - $logEnabled = Request::analyze('log_enabled', false, false, true); - $syslogEnabled = Request::analyze('syslog_enabled', false, false, true); - $remoteSyslogEnabled = Request::analyze('remotesyslog_enabled', false, false, true); - $syslogServer = Request::analyze('remotesyslog_server'); - $syslogPort = Request::analyze('remotesyslog_port', 0); - - $Config->setLogEnabled($logEnabled); - $Config->setSyslogEnabled($syslogEnabled); - - if ($remoteSyslogEnabled && (!$syslogServer || !$syslogPort)) { - $Json->setDescription(_('Faltan parámetros de syslog remoto')); - Json::returnJson($Json); - } elseif ($remoteSyslogEnabled) { - $Config->setSyslogRemoteEnabled($remoteSyslogEnabled); - $Config->setSyslogServer($syslogServer); - $Config->setSyslogPort($syslogPort); - } else { - $Config->setSyslogRemoteEnabled(false); - - $Log->addDescription(_('Syslog remoto deshabilitado')); - } - - // Accounts - $globalSearchEnabled = Request::analyze('globalsearch', false, false, true); - $accountPassToImageEnabled = Request::analyze('account_passtoimage', false, false, true); - $accountLinkEnabled = Request::analyze('account_link', false, false, true); - $accountCount = Request::analyze('account_count', 10); - $resultsAsCardsEnabled = Request::analyze('resultsascards', false, false, true); - - $Config->setGlobalSearch($globalSearchEnabled); - $Config->setAccountPassToImage($accountPassToImageEnabled); - $Config->setAccountLink($accountLinkEnabled); - $Config->setAccountCount($accountCount); - $Config->setResultsAsCards($resultsAsCardsEnabled); - - // Files - $filesEnabled = Request::analyze('files_enabled', false, false, true); - $filesAllowedSize = Request::analyze('files_allowed_size', 1024); - $filesAllowedExts = Request::analyze('files_allowed_exts'); - - if ($filesEnabled && $filesAllowedSize >= 16384) { - $Json->setDescription(_('El tamaño máximo por archivo es de 16MB')); - Json::returnJson($Json); - } - - if (!empty($filesAllowedExts)) { - $exts = explode(',', $filesAllowedExts); - array_walk($exts, function (&$value) use ($Json) { - if (preg_match('/[^a-z0-9_-]+/i', $value)) { - $Json->setDescription(sprintf('%s: %s', _('Extensión no permitida'), $value)); - Json::returnJson($Json); - } - }); - $Config->setFilesAllowedExts($exts); - } else { - $Config->setFilesAllowedExts([]); - } - - $Config->setFilesEnabled($filesEnabled); - $Config->setFilesAllowedSize($filesAllowedSize); - - // Public Links - $pubLinksEnabled = Request::analyze('publinks_enabled', false, false, true); - $pubLinksImageEnabled = Request::analyze('publinks_image_enabled', false, false, true); - $pubLinksMaxTime = Request::analyze('publinks_maxtime', 10); - $pubLinksMaxViews = Request::analyze('publinks_maxviews', 3); - - $Config->setPublinksEnabled($pubLinksEnabled); - $Config->setPublinksImageEnabled($pubLinksImageEnabled); - $Config->setPublinksMaxTime($pubLinksMaxTime * 60); - $Config->setPublinksMaxViews($pubLinksMaxViews); - - // Proxy - $proxyEnabled = Request::analyze('proxy_enabled', false, false, true); - $proxyServer = Request::analyze('proxy_server'); - $proxyPort = Request::analyze('proxy_port', 0); - $proxyUser = Request::analyze('proxy_user'); - $proxyPass = Request::analyzeEncrypted('proxy_pass'); - - - // Valores para Proxy - if ($proxyEnabled && (!$proxyServer || !$proxyPort)) { - $Json->setDescription(_('Faltan parámetros de Proxy')); - Json::returnJson($Json); - } elseif ($proxyEnabled) { - $Config->setProxyEnabled(true); - $Config->setProxyServer($proxyServer); - $Config->setProxyPort($proxyPort); - $Config->setProxyUser($proxyUser); - $Config->setProxyPass($proxyPass); - - $Log->addDescription(_('Proxy habiltado')); - } else { - $Config->setProxyEnabled(false); - - $Log->addDescription(_('Proxy deshabilitado')); - } - - $Log->addDetails(_('Sección'), _('General')); - } elseif ($actionId === ActionsInterface::ACTION_CFG_WIKI) { - // Wiki - $wikiEnabled = Request::analyze('wiki_enabled', false, false, true); - $wikiSearchUrl = Request::analyze('wiki_searchurl'); - $wikiPageUrl = Request::analyze('wiki_pageurl'); - $wikiFilter = Request::analyze('wiki_filter'); - - // Valores para la conexión a la Wiki - if ($wikiEnabled && (!$wikiSearchUrl || !$wikiPageUrl || !$wikiFilter)) { - $Json->setDescription(_('Faltan parámetros de Wiki')); - Json::returnJson($Json); - } elseif ($wikiEnabled) { - $Config->setWikiEnabled(true); - $Config->setWikiSearchurl($wikiSearchUrl); - $Config->setWikiPageurl($wikiPageUrl); - $Config->setWikiFilter(explode(',', $wikiFilter)); - - $Log->addDescription(_('Wiki habiltada')); - } else { - $Config->setWikiEnabled(false); - - $Log->addDescription(_('Wiki deshabilitada')); - } - - // DokuWiki - $dokuWikiEnabled = Request::analyze('dokuwiki_enabled', false, false, true); - $dokuWikiUrl = Request::analyze('dokuwiki_url'); - $dokuWikiUrlBase = Request::analyze('dokuwiki_urlbase'); - $dokuWikiUser = Request::analyze('dokuwiki_user'); - $dokuWikiPass = Request::analyzeEncrypted('dokuwiki_pass'); - $dokuWikiNamespace = Request::analyze('dokuwiki_namespace'); - - // Valores para la conexión a la API de DokuWiki - if ($dokuWikiEnabled && (!$dokuWikiUrl || !$dokuWikiUrlBase)) { - $Json->setDescription(_('Faltan parámetros de DokuWiki')); - Json::returnJson($Json); - } elseif ($dokuWikiEnabled) { - $Config->setDokuwikiEnabled(true); - $Config->setDokuwikiUrl($dokuWikiUrl); - $Config->setDokuwikiUrlBase(trim($dokuWikiUrlBase, '/')); - $Config->setDokuwikiUser($dokuWikiUser); - $Config->setDokuwikiPass($dokuWikiPass); - $Config->setDokuwikiNamespace($dokuWikiNamespace); - - $Log->addDescription(_('DokuWiki habiltada')); - } else { - $Config->setDokuwikiEnabled(false); - - $Log->addDescription(_('DokuWiki deshabilitada')); - } - - $Log->addDetails(_('Sección'), _('Wiki')); - } elseif ($actionId === ActionsInterface::ACTION_CFG_LDAP) { - // LDAP - $ldapEnabled = Request::analyze('ldap_enabled', false, false, true); - $ldapADSEnabled = Request::analyze('ldap_ads', false, false, true); - $ldapServer = Request::analyze('ldap_server'); - $ldapBase = Request::analyze('ldap_base'); - $ldapGroup = Request::analyze('ldap_group'); - $ldapDefaultGroup = Request::analyze('ldap_defaultgroup', 0); - $ldapDefaultProfile = Request::analyze('ldap_defaultprofile', 0); - $ldapBindUser = Request::analyze('ldap_binduser'); - $ldapBindPass = Request::analyzeEncrypted('ldap_bindpass'); - - // Valores para la configuración de LDAP - if ($ldapEnabled && (!$ldapServer || !$ldapBase || !$ldapBindUser)) { - $Json->setDescription(_('Faltan parámetros de LDAP')); - Json::returnJson($Json); - } elseif ($ldapEnabled) { - $Config->setLdapEnabled(true); - $Config->setLdapAds($ldapADSEnabled); - $Config->setLdapServer($ldapServer); - $Config->setLdapBase($ldapBase); - $Config->setLdapGroup($ldapGroup); - $Config->setLdapDefaultGroup($ldapDefaultGroup); - $Config->setLdapDefaultProfile($ldapDefaultProfile); - $Config->setLdapBindUser($ldapBindUser); - $Config->setLdapBindPass($ldapBindPass); - - $Log->addDescription(_('LDAP habiltado')); - } else { - $Config->setLdapEnabled(false); - - $Log->addDescription(_('LDAP deshabilitado')); - } - - $Log->addDetails(_('Sección'), _('LDAP')); - } elseif ($actionId === ActionsInterface::ACTION_CFG_MAIL) { - // Mail - $mailEnabled = Request::analyze('mail_enabled', false, false, true); - $mailServer = Request::analyze('mail_server'); - $mailPort = Request::analyze('mail_port', 25); - $mailUser = Request::analyze('mail_user'); - $mailPass = Request::analyzeEncrypted('mail_pass'); - $mailSecurity = Request::analyze('mail_security'); - $mailFrom = Request::analyze('mail_from'); - $mailRequests = Request::analyze('mail_requestsenabled', false, false, true); - $mailAuth = Request::analyze('mail_authenabled', false, false, true); - - // Valores para la configuración del Correo - if ($mailEnabled && (!$mailServer || !$mailFrom)) { - $Json->setDescription(_('Faltan parámetros de Correo')); - Json::returnJson($Json); - } elseif ($mailEnabled) { - $Config->setMailEnabled(true); - $Config->setMailRequestsEnabled($mailRequests); - $Config->setMailServer($mailServer); - $Config->setMailPort($mailPort); - $Config->setMailSecurity($mailSecurity); - $Config->setMailFrom($mailFrom); - - if ($mailAuth) { - $Config->setMailAuthenabled($mailAuth); - $Config->setMailUser($mailUser); - $Config->setMailPass($mailPass); - } - - $Log->addDescription(_('Correo habiltado')); - } else { - $Config->setMailEnabled(false); - $Config->setMailRequestsEnabled(false); - $Config->setMailAuthenabled(false); - - $Log->addDescription(_('Correo deshabilitado')); - } - - $Log->addDetails(_('Sección'), _('Correo')); - } - - try { - Config::saveConfig(); - } catch (SPException $e) { - $Log->addDescription(_('Error al guardar la configuración')); - $Log->addDetails($e->getMessage(), $e->getHint()); - $Log->writeLog(); - - Email::sendEmail($Log); - - $Json->setDescription($e->getMessage()); - Json::returnJson($Json); - } - - $Log->writeLog(); - - Email::sendEmail($Log); - - if ($actionId === ActionsInterface::ACTION_CFG_GENERAL) { - // Recargar la aplicación completa para establecer nuevos valores - \SP\Util\Util::reload(); - } - - $Json->setStatus(0); - $Json->setDescription(_('Configuración actualizada')); - Json::returnJson($Json); -} elseif ($actionId === ActionsInterface::ACTION_CFG_ENCRYPTION) { - $currentMasterPass = Request::analyzeEncrypted('curMasterPwd'); - $newMasterPass = Request::analyzeEncrypted('newMasterPwd'); - $newMasterPassR = Request::analyzeEncrypted('newMasterPwdR'); - $confirmPassChange = Request::analyze('confirmPassChange', 0, false, 1); - $noAccountPassChange = Request::analyze('chkNoAccountChange', 0, false, 1); - - if (!UserPass::getItem(Session::getUserData())->checkUserUpdateMPass()) { - $Json->setDescription(_('Clave maestra actualizada')); - $Json->addMessage(_('Reinicie la sesión para cambiarla')); - Json::returnJson($Json); - } elseif ($newMasterPass == '' && $currentMasterPass == '') { - $Json->setDescription(_('Clave maestra no indicada')); - Json::returnJson($Json); - } elseif ($confirmPassChange == 0) { - $Json->setDescription(_('Se ha de confirmar el cambio de clave')); - Json::returnJson($Json); - } - - if ($newMasterPass == $currentMasterPass) { - $Json->setDescription(_('Las claves son idénticas')); - Json::returnJson($Json); - } elseif ($newMasterPass != $newMasterPassR) { - $Json->setDescription(_('Las claves maestras no coinciden')); - Json::returnJson($Json); - } elseif (!Crypt::checkHashPass($currentMasterPass, ConfigDB::getValue('masterPwd'), true)) { - $Json->setDescription(_('La clave maestra actual no coincide')); - Json::returnJson($Json); - } - - $hashMPass = Crypt::mkHashPassword($newMasterPass); - - if (!$noAccountPassChange) { - $Account = new Account(); - - if (!$Account->updateAccountsMasterPass($currentMasterPass, $newMasterPass)) { - $Json->setDescription(_('Errores al actualizar las claves de las cuentas')); - Json::returnJson($Json); - } - - $AccountHistory = new AccountHistory(); - - if (!$AccountHistory->updateAccountsMasterPass($currentMasterPass, $newMasterPass, $hashMPass)) { - $Json->setDescription(_('Errores al actualizar las claves de las cuentas del histórico')); - Json::returnJson($Json); - } - - if (!CustomFieldsUtil::updateCustomFieldsCrypt($currentMasterPass, $newMasterPass)) { - $Json->setDescription(_('Errores al actualizar datos de campos personalizados')); - Json::returnJson($Json); - } - } - - if (Checks::demoIsEnabled()) { - $Json->setDescription(_('Ey, esto es una DEMO!!')); - Json::returnJson($Json); - } - -// ConfigDB::readConfig(); - ConfigDB::setCacheConfigValue('masterPwd', $hashMPass); - ConfigDB::setCacheConfigValue('lastupdatempass', time()); - - $Log = new Log(_('Actualizar Clave Maestra')); - - if (ConfigDB::writeConfig()) { - $Log->addDescription(_('Clave maestra actualizada')); - $Log->writeLog(); - - $Json->setStatus(0); - Email::sendEmail($Log); - } else { - $Log->setLogLevel(Log::ERROR); - $Log->addDescription(_('Error al guardar el hash de la clave maestra')); - $Log->writeLog(); - - Email::sendEmail($Log); - } - - $Json->setDescription($Log->getDescription()); - Json::returnJson($Json); -} elseif ($actionId === ActionsInterface::ACTION_CFG_ENCRYPTION_TEMPPASS) { - $tempMasterMaxTime = Request::analyze('tmpass_maxtime', 3600); - $tempMasterPass = CryptMasterPass::setTempMasterPass($tempMasterMaxTime); - - $Log = new Log('Generar Clave Temporal'); - - if ($tempMasterPass !== false && !empty($tempMasterPass)) { - $Log->addDescription(_('Clave Temporal Generada')); - $Log->addDetails(Html::strongText(_('Clave')), $tempMasterPass); - $Log->writeLog(); - - Email::sendEmail($Log); - - $Json->setStatus(0); - } else { - $Log->setLogLevel(Log::ERROR); - $Log->addDescription(_('Error al generar clave temporal')); - $Log->writeLog(); - - Email::sendEmail($Log); - } - - $Json->setDescription($Log->getDescription()); - Json::returnJson($Json); -} else { - $Json->setDescription(_('Acción Inválida')); - Json::returnJson($Json); -} \ No newline at end of file +$Controller = new ConfigActionController(); +$Controller->doAction(); diff --git a/inc/SP/Controller/ConfigActionController.class.php b/inc/SP/Controller/ConfigActionController.class.php new file mode 100644 index 00000000..bb956bec --- /dev/null +++ b/inc/SP/Controller/ConfigActionController.class.php @@ -0,0 +1,536 @@ +. + */ + +namespace SP\Controller; + +use SP\Account\Account; +use SP\Account\AccountHistory; +use SP\Config\Config; +use SP\Config\ConfigDB; +use SP\Core\ActionsInterface; +use SP\Core\Crypt; +use SP\Core\CryptMasterPass; +use SP\Core\Exceptions\SPException; +use SP\Core\Session; +use SP\Html\Html; +use SP\Http\Request; +use SP\Log\Email; +use SP\Log\Log; +use SP\Mgmt\CustomFields\CustomFieldsUtil; +use SP\Mgmt\Users\UserPass; +use SP\Util\Checks; +use SP\Util\Json; +use SP\Util\Util; + +/** + * Class ConfigActionController + * + * @package SP\Controller + */ +class ConfigActionController implements ItemControllerInterface +{ + use RequestControllerTrait; + + /** + * ConfigActionController constructor. + */ + public function __construct() + { + $this->init(); + } + + /** + * Realizar la acción solicitada en la la petición HTTP + * + * @throws \SP\Core\Exceptions\SPException + */ + public function doAction() + { + try { + switch ($this->actionId) { + case ActionsInterface::ACTION_CFG_GENERAL: + $this->generalAction(); + break; + case ActionsInterface::ACTION_CFG_WIKI: + $this->wikiAction(); + break; + case ActionsInterface::ACTION_CFG_LDAP: + $this->ldapAction(); + break; + case ActionsInterface::ACTION_CFG_MAIL: + $this->mailAction(); + break; + case ActionsInterface::ACTION_CFG_ENCRYPTION: + $this->masterPassAction(); + break; + case ActionsInterface::ACTION_CFG_ENCRYPTION_TEMPPASS: + $this->tempMasterPassAction(); + break; + default: + $this->invalidAction(); + } + } catch (\Exception $e) { + $this->jsonResponse->setDescription($e->getMessage()); + } + + Json::returnJson($this->jsonResponse); + } + + /** + * Accion para opciones configuración general + * + * @throws \SP\Core\Exceptions\SPException + */ + protected function generalAction() + { + $Log = Log::newLog(_('Modificar Configuración')); + $Config = Session::getConfig(); + + // General + $siteLang = Request::analyze('sitelang'); + $siteTheme = Request::analyze('sitetheme', 'material-blue'); + $sessionTimeout = Request::analyze('session_timeout', 300); + $httpsEnabled = Request::analyze('https_enabled', false, false, true); + $debugEnabled = Request::analyze('debug', false, false, true); + $maintenanceEnabled = Request::analyze('maintenance', false, false, true); + $checkUpdatesEnabled = Request::analyze('updates', false, false, true); + $checkNoticesEnabled = Request::analyze('notices', false, false, true); + + $Config->setSiteLang($siteLang); + $Config->setSiteTheme($siteTheme); + $Config->setSessionTimeout($sessionTimeout); + $Config->setHttpsEnabled($httpsEnabled); + $Config->setDebug($debugEnabled); + $Config->setMaintenance($maintenanceEnabled); + $Config->setCheckUpdates($checkUpdatesEnabled); + $Config->setChecknotices($checkNoticesEnabled); + + // Events + $logEnabled = Request::analyze('log_enabled', false, false, true); + $syslogEnabled = Request::analyze('syslog_enabled', false, false, true); + $remoteSyslogEnabled = Request::analyze('remotesyslog_enabled', false, false, true); + $syslogServer = Request::analyze('remotesyslog_server'); + $syslogPort = Request::analyze('remotesyslog_port', 0); + + $Config->setLogEnabled($logEnabled); + $Config->setSyslogEnabled($syslogEnabled); + + if ($remoteSyslogEnabled && (!$syslogServer || !$syslogPort)) { + $this->jsonResponse->setDescription(_('Faltan parámetros de syslog remoto')); + return; + } elseif ($remoteSyslogEnabled) { + $Config->setSyslogRemoteEnabled($remoteSyslogEnabled); + $Config->setSyslogServer($syslogServer); + $Config->setSyslogPort($syslogPort); + } else { + $Config->setSyslogRemoteEnabled(false); + + $Log->addDescription(_('Syslog remoto deshabilitado')); + } + + // Accounts + $globalSearchEnabled = Request::analyze('globalsearch', false, false, true); + $accountPassToImageEnabled = Request::analyze('account_passtoimage', false, false, true); + $accountLinkEnabled = Request::analyze('account_link', false, false, true); + $accountCount = Request::analyze('account_count', 10); + $resultsAsCardsEnabled = Request::analyze('resultsascards', false, false, true); + + $Config->setGlobalSearch($globalSearchEnabled); + $Config->setAccountPassToImage($accountPassToImageEnabled); + $Config->setAccountLink($accountLinkEnabled); + $Config->setAccountCount($accountCount); + $Config->setResultsAsCards($resultsAsCardsEnabled); + + // Files + $filesEnabled = Request::analyze('files_enabled', false, false, true); + $filesAllowedSize = Request::analyze('files_allowed_size', 1024); + $filesAllowedExts = Request::analyze('files_allowed_exts'); + + if ($filesEnabled && $filesAllowedSize >= 16384) { + $this->jsonResponse->setDescription(_('El tamaño máximo por archivo es de 16MB')); + Json::returnJson($this->jsonResponse); + } + + if (!empty($filesAllowedExts)) { + $exts = explode(',', $filesAllowedExts); + array_walk($exts, function (&$value) { + if (preg_match('/[^a-z0-9_-]+/i', $value)) { + $this->jsonResponse->setDescription(sprintf('%s: %s', _('Extensión no permitida'), $value)); + Json::returnJson($this->jsonResponse); + } + }); + $Config->setFilesAllowedExts($exts); + } else { + $Config->setFilesAllowedExts([]); + } + + $Config->setFilesEnabled($filesEnabled); + $Config->setFilesAllowedSize($filesAllowedSize); + + // Public Links + $pubLinksEnabled = Request::analyze('publinks_enabled', false, false, true); + $pubLinksImageEnabled = Request::analyze('publinks_image_enabled', false, false, true); + $pubLinksMaxTime = Request::analyze('publinks_maxtime', 10); + $pubLinksMaxViews = Request::analyze('publinks_maxviews', 3); + + $Config->setPublinksEnabled($pubLinksEnabled); + $Config->setPublinksImageEnabled($pubLinksImageEnabled); + $Config->setPublinksMaxTime($pubLinksMaxTime * 60); + $Config->setPublinksMaxViews($pubLinksMaxViews); + + // Proxy + $proxyEnabled = Request::analyze('proxy_enabled', false, false, true); + $proxyServer = Request::analyze('proxy_server'); + $proxyPort = Request::analyze('proxy_port', 0); + $proxyUser = Request::analyze('proxy_user'); + $proxyPass = Request::analyzeEncrypted('proxy_pass'); + + + // Valores para Proxy + if ($proxyEnabled && (!$proxyServer || !$proxyPort)) { + $this->jsonResponse->setDescription(_('Faltan parámetros de Proxy')); + return; + } elseif ($proxyEnabled) { + $Config->setProxyEnabled(true); + $Config->setProxyServer($proxyServer); + $Config->setProxyPort($proxyPort); + $Config->setProxyUser($proxyUser); + $Config->setProxyPass($proxyPass); + + $Log->addDescription(_('Proxy habiltado')); + } else { + $Config->setProxyEnabled(false); + + $Log->addDescription(_('Proxy deshabilitado')); + } + + $Log->addDetails(_('Sección'), _('General')); + + // Recargar la aplicación completa para establecer nuevos valores + Util::reload(); + + $this->saveConfig($Log); + } + + /** + * Guardar la configuración + * + * @param Log $Log instancia de Log + * @throws \SP\Core\Exceptions\SPException + */ + protected function saveConfig(Log $Log) + { + try { + Config::saveConfig(); + + $this->jsonResponse->setStatus(0); + $this->jsonResponse->setDescription(_('Configuración actualizada')); + } catch (SPException $e) { + $Log->addDescription(_('Error al guardar la configuración')); + $Log->addDetails($e->getMessage(), $e->getHint()); + + $this->jsonResponse->setDescription($e->getMessage()); + } + + $Log->writeLog(); + Email::sendEmail($Log); + } + + /** + * Acción para opciones de Wiki + * + * @throws \SP\Core\Exceptions\SPException + */ + protected function wikiAction() + { + $Log = Log::newLog(_('Modificar Configuración')); + $Config = Session::getConfig(); + + // Wiki + $wikiEnabled = Request::analyze('wiki_enabled', false, false, true); + $wikiSearchUrl = Request::analyze('wiki_searchurl'); + $wikiPageUrl = Request::analyze('wiki_pageurl'); + $wikiFilter = Request::analyze('wiki_filter'); + + // Valores para la conexión a la Wiki + if ($wikiEnabled && (!$wikiSearchUrl || !$wikiPageUrl || !$wikiFilter)) { + $this->jsonResponse->setDescription(_('Faltan parámetros de Wiki')); + return; + } elseif ($wikiEnabled) { + $Config->setWikiEnabled(true); + $Config->setWikiSearchurl($wikiSearchUrl); + $Config->setWikiPageurl($wikiPageUrl); + $Config->setWikiFilter(explode(',', $wikiFilter)); + + $Log->addDescription(_('Wiki habiltada')); + } else { + $Config->setWikiEnabled(false); + + $Log->addDescription(_('Wiki deshabilitada')); + } + + // DokuWiki + $dokuWikiEnabled = Request::analyze('dokuwiki_enabled', false, false, true); + $dokuWikiUrl = Request::analyze('dokuwiki_url'); + $dokuWikiUrlBase = Request::analyze('dokuwiki_urlbase'); + $dokuWikiUser = Request::analyze('dokuwiki_user'); + $dokuWikiPass = Request::analyzeEncrypted('dokuwiki_pass'); + $dokuWikiNamespace = Request::analyze('dokuwiki_namespace'); + + // Valores para la conexión a la API de DokuWiki + if ($dokuWikiEnabled && (!$dokuWikiUrl || !$dokuWikiUrlBase)) { + $this->jsonResponse->setDescription(_('Faltan parámetros de DokuWiki')); + return; + } elseif ($dokuWikiEnabled) { + $Config->setDokuwikiEnabled(true); + $Config->setDokuwikiUrl($dokuWikiUrl); + $Config->setDokuwikiUrlBase(trim($dokuWikiUrlBase, '/')); + $Config->setDokuwikiUser($dokuWikiUser); + $Config->setDokuwikiPass($dokuWikiPass); + $Config->setDokuwikiNamespace($dokuWikiNamespace); + + $Log->addDescription(_('DokuWiki habiltada')); + } else { + $Config->setDokuwikiEnabled(false); + + $Log->addDescription(_('DokuWiki deshabilitada')); + } + + $Log->addDetails(_('Sección'), _('Wiki')); + + $this->saveConfig($Log); + } + + /** + * Acción para opciones de LDAP + * + * @throws \SP\Core\Exceptions\SPException + */ + protected function ldapAction() + { + $Log = Log::newLog(_('Modificar Configuración')); + $Config = Session::getConfig(); + + // LDAP + $ldapEnabled = Request::analyze('ldap_enabled', false, false, true); + $ldapADSEnabled = Request::analyze('ldap_ads', false, false, true); + $ldapServer = Request::analyze('ldap_server'); + $ldapBase = Request::analyze('ldap_base'); + $ldapGroup = Request::analyze('ldap_group'); + $ldapDefaultGroup = Request::analyze('ldap_defaultgroup', 0); + $ldapDefaultProfile = Request::analyze('ldap_defaultprofile', 0); + $ldapBindUser = Request::analyze('ldap_binduser'); + $ldapBindPass = Request::analyzeEncrypted('ldap_bindpass'); + + // Valores para la configuración de LDAP + if ($ldapEnabled && (!$ldapServer || !$ldapBase || !$ldapBindUser)) { + $this->jsonResponse->setDescription(_('Faltan parámetros de LDAP')); + return; + } elseif ($ldapEnabled) { + $Config->setLdapEnabled(true); + $Config->setLdapAds($ldapADSEnabled); + $Config->setLdapServer($ldapServer); + $Config->setLdapBase($ldapBase); + $Config->setLdapGroup($ldapGroup); + $Config->setLdapDefaultGroup($ldapDefaultGroup); + $Config->setLdapDefaultProfile($ldapDefaultProfile); + $Config->setLdapBindUser($ldapBindUser); + $Config->setLdapBindPass($ldapBindPass); + + $Log->addDescription(_('LDAP habiltado')); + } else { + $Config->setLdapEnabled(false); + + $Log->addDescription(_('LDAP deshabilitado')); + } + + $Log->addDetails(_('Sección'), _('LDAP')); + + $this->saveConfig($Log); + } + + /** + * Accion para opciones de correo + * + * @throws \SP\Core\Exceptions\SPException + */ + protected function mailAction() + { + $Log = Log::newLog(_('Modificar Configuración')); + $Config = Session::getConfig(); + + // Mail + $mailEnabled = Request::analyze('mail_enabled', false, false, true); + $mailServer = Request::analyze('mail_server'); + $mailPort = Request::analyze('mail_port', 25); + $mailUser = Request::analyze('mail_user'); + $mailPass = Request::analyzeEncrypted('mail_pass'); + $mailSecurity = Request::analyze('mail_security'); + $mailFrom = Request::analyze('mail_from'); + $mailRequests = Request::analyze('mail_requestsenabled', false, false, true); + $mailAuth = Request::analyze('mail_authenabled', false, false, true); + + // Valores para la configuración del Correo + if ($mailEnabled && (!$mailServer || !$mailFrom)) { + $this->jsonResponse->setDescription(_('Faltan parámetros de Correo')); + return; + } elseif ($mailEnabled) { + $Config->setMailEnabled(true); + $Config->setMailRequestsEnabled($mailRequests); + $Config->setMailServer($mailServer); + $Config->setMailPort($mailPort); + $Config->setMailSecurity($mailSecurity); + $Config->setMailFrom($mailFrom); + + if ($mailAuth) { + $Config->setMailAuthenabled($mailAuth); + $Config->setMailUser($mailUser); + $Config->setMailPass($mailPass); + } + + $Log->addDescription(_('Correo habiltado')); + } else { + $Config->setMailEnabled(false); + $Config->setMailRequestsEnabled(false); + $Config->setMailAuthenabled(false); + + $Log->addDescription(_('Correo deshabilitado')); + } + + $Log->addDetails(_('Sección'), _('Correo')); + + $this->saveConfig($Log); + } + + /** + * Acción para cambio de clave maestra + * + * @throws \SP\Core\Exceptions\SPException + */ + protected function masterPassAction() + { + $currentMasterPass = Request::analyzeEncrypted('curMasterPwd'); + $newMasterPass = Request::analyzeEncrypted('newMasterPwd'); + $newMasterPassR = Request::analyzeEncrypted('newMasterPwdR'); + $confirmPassChange = Request::analyze('confirmPassChange', 0, false, 1); + $noAccountPassChange = Request::analyze('chkNoAccountChange', 0, false, 1); + + if (!UserPass::getItem(Session::getUserData())->checkUserUpdateMPass()) { + $this->jsonResponse->setDescription(_('Clave maestra actualizada')); + $this->jsonResponse->addMessage(_('Reinicie la sesión para cambiarla')); + return; + } elseif ($newMasterPass === '' && $currentMasterPass === '') { + $this->jsonResponse->setDescription(_('Clave maestra no indicada')); + return; + } elseif ($confirmPassChange === 0) { + $this->jsonResponse->setDescription(_('Se ha de confirmar el cambio de clave')); + return; + } + + if ($newMasterPass === $currentMasterPass) { + $this->jsonResponse->setDescription(_('Las claves son idénticas')); + return; + } elseif ($newMasterPass !== $newMasterPassR) { + $this->jsonResponse->setDescription(_('Las claves maestras no coinciden')); + return; + } elseif (!Crypt::checkHashPass($currentMasterPass, ConfigDB::getValue('masterPwd'), true)) { + $this->jsonResponse->setDescription(_('La clave maestra actual no coincide')); + return; + } + + if (Checks::demoIsEnabled()) { + $this->jsonResponse->setDescription(_('Ey, esto es una DEMO!!')); + return; + } + + $hashMPass = Crypt::mkHashPassword($newMasterPass); + + if (!$noAccountPassChange) { + $Account = new Account(); + + if (!$Account->updateAccountsMasterPass($currentMasterPass, $newMasterPass)) { + $this->jsonResponse->setDescription(_('Errores al actualizar las claves de las cuentas')); + return; + } + + $AccountHistory = new AccountHistory(); + + if (!$AccountHistory->updateAccountsMasterPass($currentMasterPass, $newMasterPass, $hashMPass)) { + $this->jsonResponse->setDescription(_('Errores al actualizar las claves de las cuentas del histórico')); + return; + } + + if (!CustomFieldsUtil::updateCustomFieldsCrypt($currentMasterPass, $newMasterPass)) { + $this->jsonResponse->setDescription(_('Errores al actualizar datos de campos personalizados')); + return; + } + } + + ConfigDB::setCacheConfigValue('masterPwd', $hashMPass); + ConfigDB::setCacheConfigValue('lastupdatempass', time()); + + $Log = new Log(_('Actualizar Clave Maestra')); + + if (ConfigDB::writeConfig()) { + $Log->addDescription(_('Clave maestra actualizada')); + + $this->jsonResponse->setStatus(0); + } else { + $Log->setLogLevel(Log::ERROR); + $Log->addDescription(_('Error al guardar el hash de la clave maestra')); + } + + $this->jsonResponse->setDescription($Log->getDescription()); + + $Log->writeLog(); + Email::sendEmail($Log); + } + + /** + * Acción para generarclave maestra temporal + */ + protected function tempMasterPassAction() + { + $tempMasterMaxTime = Request::analyze('tmpass_maxtime', 3600); + $tempMasterPass = CryptMasterPass::setTempMasterPass($tempMasterMaxTime); + + $Log = new Log('Generar Clave Temporal'); + + if ($tempMasterPass !== false && !empty($tempMasterPass)) { + $Log->addDescription(_('Clave Temporal Generada')); + $Log->addDetails(Html::strongText(_('Clave')), $tempMasterPass); + + $this->jsonResponse->setStatus(0); + } else { + $Log->setLogLevel(Log::ERROR); + $Log->addDescription(_('Error al generar clave temporal')); + + } + + $this->jsonResponse->setDescription($Log->getDescription()); + + $Log->writeLog(); + Email::sendEmail($Log); + } +} \ No newline at end of file diff --git a/inc/SP/Controller/ItemActionController.class.php b/inc/SP/Controller/ItemActionController.class.php index c98e9968..9985a00b 100644 --- a/inc/SP/Controller/ItemActionController.class.php +++ b/inc/SP/Controller/ItemActionController.class.php @@ -606,7 +606,7 @@ class ItemActionController implements ItemControllerInterface * @throws \SP\Core\Exceptions\ValidationException * @throws \SP\Core\Exceptions\SPException */ - private function favoriteAction() + protected function favoriteAction() { $userId = Session::getUserData()->getUserId(); @@ -629,7 +629,7 @@ class ItemActionController implements ItemControllerInterface /** * Importar usuarios de LDAP */ - private function ldapImportAction() + protected function ldapImportAction() { if (UserLdapSync::run()) { $this->jsonResponse->setStatus(0); @@ -645,8 +645,10 @@ class ItemActionController implements ItemControllerInterface /** * Acciones sobre plugins + * + * @throws \SP\Core\Exceptions\SPException */ - private function pluginAction() + protected function pluginAction() { $PluginData = new PluginData(); $PluginData->setPluginId($this->itemId); diff --git a/inc/SP/Controller/MainController.class.php b/inc/SP/Controller/MainController.class.php index 696456a9..ff143cb7 100644 --- a/inc/SP/Controller/MainController.class.php +++ b/inc/SP/Controller/MainController.class.php @@ -391,6 +391,7 @@ class MainController extends ControllerBase implements ActionsInterface $this->view->addTemplate('update'); $this->view->assign('hasUpdates', false); + $this->view->assign('updateStatus', null); if (Config::getConfig()->isCheckUpdates()) { $updates = Util::checkUpdates(); diff --git a/inc/themes/material-blue/views/config/general.inc b/inc/themes/material-blue/views/config/general.inc index dab45262..1cfcc2f8 100644 --- a/inc/themes/material-blue/views/config/general.inc +++ b/inc/themes/material-blue/views/config/general.inc @@ -5,8 +5,11 @@ ?>
-
+ includeTemplate('general-site');; ?> includeTemplate('general-events'); ?> diff --git a/inc/themes/material-blue/views/config/import.inc b/inc/themes/material-blue/views/config/import.inc index 2502945d..70bbb700 100644 --- a/inc/themes/material-blue/views/config/import.inc +++ b/inc/themes/material-blue/views/config/import.inc @@ -72,6 +72,20 @@ use SP\Core\Session; ?>
+ + + + + +
+ + +
+ + diff --git a/inc/themes/material-blue/views/config/ldap.inc b/inc/themes/material-blue/views/config/ldap.inc index dd66dcf6..6dbfa553 100644 --- a/inc/themes/material-blue/views/config/ldap.inc +++ b/inc/themes/material-blue/views/config/ldap.inc @@ -7,7 +7,9 @@
- diff --git a/js/app-actions.js b/js/app-actions.js index f1b0972e..74400d8f 100644 --- a/js/app-actions.js +++ b/js/app-actions.js @@ -420,9 +420,9 @@ sysPass.Actions = function (Common) { Common.msg.out(json); if (json.status === 0) { - if ($obj.data("nextaction-id") !== "undefined") { + if ($obj.data("nextaction-id") !== undefined) { doAction({actionId: $obj.data("nextaction-id"), itemId: $obj.data("activetab")}); - } else { + } else if ($obj.data("reload") !== undefined) { setTimeout(function () { Common.redirect("index.php"); }, 2000); @@ -440,7 +440,7 @@ sysPass.Actions = function (Common) { Common.appRequests().getActionCall(opts, function (json) { Common.msg.out(json); - if (json.status === 0 && $obj.data("nextaction-id") !== "undefined") { + if (json.status === 0 && $obj.data("nextaction-id") !== undefined) { doAction({actionId: $obj.data("nextaction-id"), itemId: $obj.data("activetab")}); } }); @@ -455,7 +455,7 @@ sysPass.Actions = function (Common) { Common.appRequests().getActionCall(opts, function (json) { Common.msg.out(json); - if (json.status === 0 && $obj.data("nextaction-id") !== "undefined") { + if (json.status === 0 && $obj.data("nextaction-id") !== undefined) { doAction({actionId: $obj.data("nextaction-id"), itemId: $obj.data("activetab")}); } }); @@ -470,7 +470,7 @@ sysPass.Actions = function (Common) { Common.appRequests().getActionCall(opts, function (json) { Common.msg.out(json); - if (json.status === 0 && typeof $obj.data("nextaction-id") !== "undefined") { + if (json.status === 0 && $obj.data("nextaction-id") !== undefined) { doAction({actionId: $obj.data("nextaction-id"), itemId: $obj.data("activetab")}); } }); @@ -492,7 +492,7 @@ sysPass.Actions = function (Common) { opts.data = {fileId: $obj.data("item-id"), sk: Common.sk.get(), actionId: $obj.data("action-id")}; Common.appRequests().getActionCall(opts, function (response) { - if (typeof response.status !== "undefined" && response.status === 1) { + if (response.status !== undefined && response.status === 1) { Common.msg.out(response); return; } @@ -733,7 +733,7 @@ sysPass.Actions = function (Common) { var response = Common.appRequests().getActionCall(opts); - if (typeof response.responseJSON.csrf !== "undefined") { + if (response.responseJSON.csrf !== undefined) { Common.sk.set(response.responseJSON.csrf); } @@ -873,7 +873,7 @@ sysPass.Actions = function (Common) { show: function ($obj) { log.info("appMgmt:show"); - if ($obj.data("item-dst") || $obj.data("activetab") === "undefined") { + if ($obj.data("item-dst") || $obj.data("activetab") === undefined) { log.info($obj.data("activetab")); appMgmt.refreshTab = false; @@ -1041,7 +1041,7 @@ sysPass.Actions = function (Common) { */ var eventlog = { nav: function ($obj) { - if (typeof $obj.data("start") === "undefined") { + if ($obj.data("start") === undefined) { return false; } diff --git a/js/app-actions.min.js b/js/app-actions.min.js index f71e7403..8580477e 100644 --- a/js/app-actions.min.js +++ b/js/app-actions.min.js @@ -11,24 +11,24 @@ a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);0==a.stat {show:function(a){d.info("account:show");g({actionId:a.data("action-id"),itemId:a.data("item-id")})},showHistory:function(a){d.info("account:showHistory");g({actionId:a.data("action-id"),itemId:a.val()})},edit:function(a){d.info("account:edit");g({actionId:a.data("action-id"),itemId:a.data("item-id")})},"delete":function(a){d.info("account:delete");var b='

'+c.config().LANG[3]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault(); c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a);l.search()})}}})},showpass:function(a){d.info("account:showpass");var b=a.data("parent-id"),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.show;f.data={itemId:0==b?a.data("item-id"):b,actionId:a.data("action-id"),isHistory:a.data("history"), isFull:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(f,function(b){0!==b.status?c.msg.out(b):(b=$(b.data.html),p(a,b),b.on("mouseleave",function(){clearTimeout(h);h=setTimeout(function(){$.magnificPopup.close()},3E4)}).on("mouseenter",function(){0!==h&&clearTimeout(h)}))})},copypass:function(a){d.info("account:copypass");var b=a.data("parent-id"),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.show;f.async=!1;f.data={itemId:0==b?a.data("item-id"):b,actionId:a.data("action-id"),isHistory:a.data("history"), -isFull:0,sk:c.sk.get(),isAjax:1};a=c.appRequests().getActionCall(f);"undefined"!==typeof a.responseJSON.csrf&&c.sk.set(a.responseJSON.csrf);return a},copy:function(a){d.info("account:copy");g({actionId:a.data("action-id"),itemId:a.data("item-id")})},savefavorite:function(a,b){d.info("account:saveFavorite");var f="on"===a.data("status"),k={actionId:f?a.data("action-id-off"):a.data("action-id-on"),itemId:a.data("item-id"),sk:c.sk.get(),isAjax:1},g=c.appRequests().getRequestOpts();g.url=e.account.saveFavorite; -g.data=k;c.appRequests().getActionCall(g,function(d){c.msg.out(d);0===d.status&&(a.data("status",f?"off":"on"),"function"===typeof b&&b())})},request:function(a){d.info("account:request");var b=c.appRequests().getRequestOpts();b.url=e.account.request;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){d.info("account:sort");var c=$("#frmSearch");c.find('input[name="skey"]').val(a.data("key")); +isFull:0,sk:c.sk.get(),isAjax:1};a=c.appRequests().getActionCall(f);void 0!==a.responseJSON.csrf&&c.sk.set(a.responseJSON.csrf);return a},copy:function(a){d.info("account:copy");g({actionId:a.data("action-id"),itemId:a.data("item-id")})},savefavorite:function(a,b){d.info("account:saveFavorite");var f="on"===a.data("status"),k={actionId:f?a.data("action-id-off"):a.data("action-id-on"),itemId:a.data("item-id"),sk:c.sk.get(),isAjax:1},g=c.appRequests().getRequestOpts();g.url=e.account.saveFavorite;g.data= +k;c.appRequests().getActionCall(g,function(d){c.msg.out(d);0===d.status&&(a.data("status",f?"off":"on"),"function"===typeof b&&b())})},request:function(a){d.info("account:request");var b=c.appRequests().getRequestOpts();b.url=e.account.request;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){d.info("account:sort");var c=$("#frmSearch");c.find('input[name="skey"]').val(a.data("key")); c.find('input[name="sorder"]').val(a.data("dir"));c.find('input[name="start"]').val(a.data("start"));l.search()},editpass:function(a){d.info("account:editpass");var c=a.data("parent-id");g({actionId:a.data("action-id"),itemId:0==c?a.data("item-id"):c})},restore:function(a){d.info("account:restore");l.save(a)},getfiles:function(a){d.info("account:getfiles");var b=c.appRequests().getRequestOpts();b.method="get";b.type="html";b.url=e.account.getFiles;b.data={id:a.data("item-id"),del:a.data("delete"), sk:c.sk.get()};c.appRequests().getActionCall(b,function(c){a.html(c)})},search:function(){d.info("account:search");var a=$("#frmSearch");a.find("input[name='sk']").val(c.sk.get());a.find("input[name='skey']").val();a.find("input[name='sorder']").val();var b=c.appRequests().getRequestOpts();b.url=e.account.search;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){10===b.status&&c.msg.out(b);c.sk.set(b.sk);$("#res-content").empty().html(b.html);a.find("input:first").focus()})},save:function(a){d.info("account:save"); -var b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},n={refreshTab:!0,show:function(a){d.info("appMgmt:show");if(a.data("item-dst")||"undefined"===a.data("activetab"))d.info(a.data("activetab")),n.refreshTab=!1;var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.show;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),activeTab:a.data("activetab"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b, +var b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},n={refreshTab:!0,show:function(a){d.info("appMgmt:show");if(a.data("item-dst")||void 0===a.data("activetab"))d.info(a.data("activetab")),n.refreshTab=!1;var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.show;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),activeTab:a.data("activetab"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b, function(b){0!==b.status?c.msg.out(b):p(a,b.data.html)})},"delete":function(a){d.info("appMgmt:delete");var b='

'+c.config().LANG[12]+"

",f=a.data("selection"),k=[];if(f&&($(f).find(".is-selected").each(function(a,c){var b=$(this);k.push(b.data("item-id"))}),0===k.length))return;showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault(); b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={itemId:f?k:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}})},save:function(a){d.info("appMgmt:save");var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&(!0===n.refreshTab&& g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")}),$.magnificPopup.close())})},search:function(a){d.info("appMgmt:search");var b=$(a.data("target")),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.search;f.data=a.serialize();c.appRequests().getActionCall(f,function(a){0===a.status?b.html(a.data.html):b.html(c.msg.html.error(a.description));c.sk.set(a.csrf)})},nav:function(a){d.info("appMgmt:nav");var b=$("#"+a.data("action-form"));b.find("[name='start']").val(a.data("start"));b.find("[name='count']").val(a.data("count")); b.find("[name='sk']").val(c.sk.get());n.search(b)},ldapSync:function(a){d.info("appMgmt:ldapSync");var b='

'+c.config().LANG[57]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b, -function(a){c.msg.out(a)})}}})}};return{doAction:g,appMgmt:n,account:l,file:{view:function(a){d.info("file:view");var b=c.appRequests().getRequestOpts();b.url=e.file;b.type="html";b.data={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};c.appRequests().getActionCall(b,function(b){"undefined"!==typeof b.status&&1===b.status?c.msg.out(b):b?r(a,b):c.msg.error(c.config().LANG[14])})},download:function(a){d.info("file:download");a={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")}; +function(a){c.msg.out(a)})}}})}};return{doAction:g,appMgmt:n,account:l,file:{view:function(a){d.info("file:view");var b=c.appRequests().getRequestOpts();b.url=e.file;b.type="html";b.data={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};c.appRequests().getActionCall(b,function(b){void 0!==b.status&&1===b.status?c.msg.out(b):b?r(a,b):c.msg.error(c.config().LANG[14])})},download:function(a){d.info("file:download");a={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")}; $.fileDownload(c.config().APP_ROOT+e.file,{httpMethod:"POST",data:a})},"delete":function(a){d.info("file:delete");var b='

'+c.config().LANG[15]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.file;b.data={fileId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()}; c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&(a=$("#list-account-files"),l.getfiles(a))})}}})}},checks:{ldap:function(a){d.info("checks:ldap");a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);var b=$("#ldap-results");b.find(".list-wrap").html(c.appTheme().html.getList(a.data));b.show("slow")})},wiki:function(a){d.info("checks:wiki"); -a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){d.info("config:save");var b=c.appRequests().getRequestOpts();b.url=e.config.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&("undefined"!==a.data("nextaction-id")?g({actionId:a.data("nextaction-id"), -itemId:a.data("activetab")}):setTimeout(function(){c.redirect("index.php")},2E3))})},backup:function(a){d.info("config:backup");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"export":function(a){d.info("config:export");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data= -a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"import":function(a){d.info("config:import");var b=c.appRequests().getRequestOpts();b.url=e.config["import"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}, +a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){d.info("config:save");var b=c.appRequests().getRequestOpts();b.url=e.config.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&(void 0!==a.data("nextaction-id")?g({actionId:a.data("nextaction-id"), +itemId:a.data("activetab")}):void 0!==a.data("reload")&&setTimeout(function(){c.redirect("index.php")},2E3))})},backup:function(a){d.info("config:backup");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&void 0!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"export":function(a){d.info("config:export");var b=c.appRequests().getRequestOpts();b.url= +e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&void 0!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"import":function(a){d.info("config:import");var b=c.appRequests().getRequestOpts();b.url=e.config["import"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&void 0!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}, main:q,user:{savePreferences:function(a){d.info("user:savePreferences");var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);setTimeout(function(){c.redirect("index.php")},2E3)})},saveSecurity:function(a){d.info("user:saveSecurity");var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);g({actionId:a.data("nextaction-id"), itemId:a.data("activetab")})})},password:function(a){d.info("user:password");var b=c.appRequests().getRequestOpts();b.type="html";b.method="get";b.url=e.user.password;b.data={actionId:a.data("action-id"),itemId:a.data("item-id"),sk:a.data("sk"),isAjax:1};c.appRequests().getActionCall(b,function(b){0===b.length?q.logout():p(a,b)})},passreset:function(a){d.info("user:passreset");var b=c.appRequests().getRequestOpts();b.url=e.user.passreset;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}}, link:{save:function(a){d.info("link:save");var b=c.appRequests().getRequestOpts();b.url=e.link;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};a='

'+c.config().LANG[48]+"

";showDialog({text:a,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},positive:{title:c.config().LANG[43],onClick:function(a){a.preventDefault();b.data.notify=1;c.appRequests().getActionCall(b, -function(a){c.msg.out(a)})}}})},refresh:function(a){d.info("link:refresh");var b={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.link;f.data=b;c.appRequests().getActionCall(f,function(b){c.msg.out(b);0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},eventlog:{nav:function(a){if("undefined"===typeof a.data("start"))return!1;var b=c.appRequests().getRequestOpts();b.url=e.eventlog; -b.type="html";b.data={start:a.data("start"),current:a.data("current")};c.appRequests().getActionCall(b,function(a){$("#content").html(a);c.scrollUp()})},clear:function(a){var b='

'+c.config().LANG[20]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.eventlog; -b.data={clear:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);0==b.status&&g({actionId:a.data("nextaction-id")})})}}})}},ajaxUrl:e,plugin:{toggle:function(a){d.info("plugin:enable");var b={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.appMgmt.save;f.data=b;c.appRequests().getActionCall(f,function(b){c.msg.out(b);0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}}}; +function(a){c.msg.out(a)})}}})},refresh:function(a){d.info("link:refresh");var b={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.link;f.data=b;c.appRequests().getActionCall(f,function(b){c.msg.out(b);0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},eventlog:{nav:function(a){if(void 0===a.data("start"))return!1;var b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.type= +"html";b.data={start:a.data("start"),current:a.data("current")};c.appRequests().getActionCall(b,function(a){$("#content").html(a);c.scrollUp()})},clear:function(a){var b='

'+c.config().LANG[20]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.data= +{clear:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);0==b.status&&g({actionId:a.data("nextaction-id")})})}}})}},ajaxUrl:e,plugin:{toggle:function(a){d.info("plugin:enable");var b={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.appMgmt.save;f.data=b;c.appRequests().getActionCall(f,function(b){c.msg.out(b);0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}}}; diff --git a/js/app-main.min.js b/js/app-main.min.js index 978d481c..1db774b5 100644 --- a/js/app-main.min.js +++ b/js/app-main.min.js @@ -1,4 +1,4 @@ -var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,f,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[f]=e.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; +var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,f,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[f]=e.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; $jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(a){return $jscomp.SYMBOL_PREFIX+(a||"")+$jscomp.symbolCounter_++}; $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var f=0;return $jscomp.iteratorPrototype(function(){return f