* [DEV] Config actions refactoring & code cleanup

This commit is contained in:
nuxsmin
2017-01-06 12:06:23 +01:00
parent 1e71cf3ada
commit 687781a557
10 changed files with 587 additions and 458 deletions

View File

@@ -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);
}
$Controller = new ConfigActionController();
$Controller->doAction();

View File

@@ -0,0 +1,536 @@
<?php
/**
* sysPass
*
* @author nuxsmin
* @link http://syspass.org
* @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
* sysPass is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* sysPass is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with sysPass. If not, see <http://www.gnu.org/licenses/>.
*/
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);
}
}

View File

@@ -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);

View File

@@ -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();

View File

@@ -5,8 +5,11 @@
?>
<div id="tabs-<?php echo $config_tabIndex; ?>" class="mdl-tabs__panel">
<div class="tab-data">
<form method="post" name="frmConfig" id="frmConfig" class="form-action" data-onsubmit="config/save"
data-type="general" data-hash="">
<form method="post" name="frmConfig" id="frmConfig" class="form-action"
data-onsubmit="config/save"
data-type="general"
data-reload="1"
data-hash="">
<?php include $this->includeTemplate('general-site');; ?>
<?php include $this->includeTemplate('general-events'); ?>

View File

@@ -72,6 +72,20 @@ use SP\Core\Session; ?>
</div>
</td>
</tr>
<tr>
<td class="descField">
<?php echo _('Clave Maestra'); ?>
</td>
<td class="valField">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
<input id="masterPwd" name="masterPwd" type="password"
class="mdl-textfield__input mdl-color-text--indigo-400 passwordfield__input-show"
maxlength="255" />
<label class="mdl-textfield__label"
for="masterPwd"><?php echo _('Clave Maestra'); ?></label>
</div>
</td>
</tr>
<tr>
<td class="descField">
<?php echo _('Delimitador CSV'); ?>

View File

@@ -7,7 +7,9 @@
<?php echo _('LDAP'); ?>
</div>
<form method="post" name="frmLdap" id="frmLdap" class="form-action" data-onsubmit="config/save" data-type="ldap"
<form method="post" name="frmLdap" id="frmLdap" class="form-action"
data-onsubmit="config/save"
data-type="ldap"
data-hash="">
<table id="tblLdap" class="data tblConfig round">
<?php if ($ldapIsAvailable || $isDemoMode): ?>

View File

@@ -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;
}

20
js/app-actions.min.js vendored
View File

@@ -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='<div id="alert"><p id="alert-text">'+c.config().LANG[3]+"</p></div>";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='<div id="alert"><p id="alert-text">'+c.config().LANG[12]+"</p></div>",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='<div id="alert"><p id="alert-text">'+c.config().LANG[57]+"</p></div>";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='<div id="alert"><p id="alert-text">'+c.config().LANG[15]+"</p></div>";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='<div id="alert"><p id="alert-text">'+c.config().LANG[48]+"</p></div>";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='<div id="alert"><p id="alert-text">'+c.config().LANG[20]+"</p></div>";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='<div id="alert"><p id="alert-text">'+c.config().LANG[20]+"</p></div>";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")})})}}}};

2
js/app-main.min.js vendored
View File

@@ -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<a.length?{done:!1,value:a[f++]}:{done:!0}})};
$jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};$jscomp.array=$jscomp.array||{};$jscomp.iteratorFromArray=function(a,f){$jscomp.initSymbolIterator();a instanceof String&&(a+="");var e=0,c={next:function(){if(e<a.length){var g=e++;return{value:f(g,a[g]),done:!1}}c.next=function(){return{done:!0,value:void 0}};return c.next()}};c[Symbol.iterator]=function(){return c};return c};