diff --git a/app/modules/web/Controllers/ConfigGeneralController.php b/app/modules/web/Controllers/ConfigGeneralController.php index 9fd68834..5761702b 100644 --- a/app/modules/web/Controllers/ConfigGeneralController.php +++ b/app/modules/web/Controllers/ConfigGeneralController.php @@ -76,7 +76,7 @@ final class ConfigGeneralController extends SimpleControllerBase $configData->setDebug($debugEnabled); $configData->setMaintenance($maintenanceEnabled); $configData->setCheckUpdates($checkUpdatesEnabled); - $configData->setChecknotices($checkNoticesEnabled); + $configData->setCheckNotices($checkNoticesEnabled); $configData->setEncryptSession($encryptSessionEnabled); // Events diff --git a/app/modules/web/Controllers/ConfigLdapController.php b/app/modules/web/Controllers/ConfigLdapController.php index 00a2b9ff..f8576182 100644 --- a/app/modules/web/Controllers/ConfigLdapController.php +++ b/app/modules/web/Controllers/ConfigLdapController.php @@ -84,6 +84,10 @@ final class ConfigLdapController extends SimpleControllerBase $configData->setLdapDefaultGroup($ldapDefaultGroup); $configData->setLdapDefaultProfile($ldapDefaultProfile); $configData->setLdapBindUser($ldapParams->getBindDn()); + $configData->setLdapFilterUserObject($ldapParams->getFilterUserObject()); + $configData->setLdapFilterGroupObject($ldapParams->getFilterGroupObject()); + $configData->setLdapFilterUserAttributes($ldapParams->getFilterUserAttributes()); + $configData->setLdapFilterGroupAttributes($ldapParams->getFilterGroupAttributes()); if ($ldapParams->getBindPass() !== '***') { $configData->setLdapBindPass($ldapParams->getBindPass()); @@ -124,15 +128,21 @@ final class ConfigLdapController extends SimpleControllerBase throw new ValidationException(__u('Wrong LDAP parameters')); } - return (new LdapParams()) - ->setServer($data['server']) - ->setPort(isset($data['port']) ? $data['port'] : 389) - ->setSearchBase($this->request->analyzeString('ldap_base')) - ->setGroup($this->request->analyzeString('ldap_group')) - ->setBindDn($this->request->analyzeString('ldap_binduser')) - ->setBindPass($this->request->analyzeEncrypted('ldap_bindpass')) - ->setType($this->request->analyzeInt('ldap_server_type', LdapTypeInterface::LDAP_STD)) - ->setTlsEnabled($this->request->analyzeBool('ldap_tls_enabled', false)); + $params = new LdapParams(); + $params->setServer($data['server']); + $params->setPort(isset($data['port']) ? $data['port'] : 389); + $params->setSearchBase($this->request->analyzeString('ldap_base')); + $params->setGroup($this->request->analyzeString('ldap_group')); + $params->setBindDn($this->request->analyzeString('ldap_binduser')); + $params->setBindPass($this->request->analyzeEncrypted('ldap_bindpass')); + $params->setType($this->request->analyzeInt('ldap_server_type', LdapTypeInterface::LDAP_STD)); + $params->setTlsEnabled($this->request->analyzeBool('ldap_tls_enabled', false)); + $params->setFilterUserObject($this->request->analyzeString('ldap_filter_user_object', null)); + $params->setFilterGroupObject($this->request->analyzeString('ldap_filter_group_object', null)); + $params->setFilterUserAttributes($this->request->analyzeArray('ldap_filter_user_attributes')); + $params->setFilterGroupAttributes($this->request->analyzeArray('ldap_filter_group_attributes')); + + return $params; } /** @@ -144,8 +154,14 @@ final class ConfigLdapController extends SimpleControllerBase $ldapParams = $this->getLdapParamsFromRequest(); // Valores para la configuración de LDAP - if (!($ldapParams->getServer() || $ldapParams->getSearchBase() || $ldapParams->getBindDn())) { - return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Missing LDAP parameters')); + if (!($ldapParams->getServer() + || $ldapParams->getSearchBase() + || $ldapParams->getBindDn()) + ) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('Missing LDAP parameters') + ); } $ldapCheckService = $this->dic->get(LdapCheckService::class); @@ -181,8 +197,14 @@ final class ConfigLdapController extends SimpleControllerBase $ldapParams = $this->getLdapParamsFromRequest(); // Valores para la configuración de LDAP - if (!($ldapParams->getServer() || $ldapParams->getSearchBase() || $ldapParams->getBindDn())) { - return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Missing LDAP parameters')); + if (!($ldapParams->getServer() + || $ldapParams->getSearchBase() + || $ldapParams->getBindDn()) + ) { + return $this->returnJsonResponse( + JsonResponse::JSON_ERROR, + __u('Missing LDAP parameters') + ); } $ldapCheckService = $this->dic->get(LdapCheckService::class); diff --git a/app/modules/web/Controllers/ConfigManagerController.php b/app/modules/web/Controllers/ConfigManagerController.php index 94aa8f53..5cf40182 100644 --- a/app/modules/web/Controllers/ConfigManagerController.php +++ b/app/modules/web/Controllers/ConfigManagerController.php @@ -43,6 +43,8 @@ use SP\Modules\Web\Controllers\Helpers\TabsHelper; use SP\Mvc\View\Components\DataTab; use SP\Mvc\View\Components\SelectItemAdapter; use SP\Plugin\PluginManager; +use SP\Providers\Auth\Ldap\LdapMsAds; +use SP\Providers\Auth\Ldap\LdapStd; use SP\Providers\Auth\Ldap\LdapTypeInterface; use SP\Providers\Log\LogInterface; use SP\Providers\Mail\MailHandler; @@ -231,9 +233,14 @@ final class ConfigManagerController extends ControllerBase $template->setBase('config'); $template->addTemplate('ldap'); - $template->assign('ldapIsAvailable', $this->extensionChecker->checkIsAvailable('ldap')); - $template->assign('userGroups', SelectItemAdapter::factory(UserGroupService::getItemsBasic())->getItemsFromModel()); - $template->assign('userProfiles', SelectItemAdapter::factory(UserProfileService::getItemsBasic())->getItemsFromModel()); + $template->assign('ldapIsAvailable', + $this->extensionChecker->checkIsAvailable('ldap')); + $template->assign('userGroups', + SelectItemAdapter::factory(UserGroupService::getItemsBasic()) + ->getItemsFromModel()); + $template->assign('userProfiles', + SelectItemAdapter::factory(UserProfileService::getItemsBasic()) + ->getItemsFromModel()); $serverTypes = [ LdapTypeInterface::LDAP_STD => 'Standard', @@ -241,7 +248,29 @@ final class ConfigManagerController extends ControllerBase LdapTypeInterface::LDAP_AZURE => 'Azure Active Directory', ]; - $template->assign('serverTypes', SelectItemAdapter::factory($serverTypes)->getItemsFromArraySelected([$this->configData->getLdapType()])); + $template->assign('serverTypes', + SelectItemAdapter::factory($serverTypes) + ->getItemsFromArraySelected([$this->configData->getLdapType()])); + + $userAttributes = array_merge( + LdapStd::DEFAULT_FILTER_USER_ATTRIBUTES, + LdapMsAds::DEFAULT_FILTER_USER_ATTRIBUTES, + $this->configData->getLdapFilterUserAttributes() + ); + + $template->assign('userAttributes', + SelectItemAdapter::factory($userAttributes) + ->getItemsFromArraySelected($this->configData->getLdapFilterUserAttributes())); + + $groupAttributes = array_merge( + LdapStd::DEFAULT_FILTER_GROUP_ATTRIBUTES, + LdapMsAds::DEFAULT_FILTER_GROUP_ATTRIBUTES, + $this->configData->getLdapFilterGroupAttributes() + ); + + $template->assign('groupAttributes', + SelectItemAdapter::factory($groupAttributes) + ->getItemsFromArraySelected($this->configData->getLdapFilterGroupAttributes())); return new DataTab(__('LDAP'), $template); } diff --git a/app/modules/web/themes/material-blue/css/styles.css b/app/modules/web/themes/material-blue/css/styles.css index dcb3316c..e2ad1de4 100644 --- a/app/modules/web/themes/material-blue/css/styles.css +++ b/app/modules/web/themes/material-blue/css/styles.css @@ -281,6 +281,14 @@ body.userpassreset { min-height: 0; margin: 5em auto; } +#content tr.header td, #box-popup tr.header td { + width: 100%; + padding: 7px; + background-color: #eceff1; + color: #607d8b; + font-size: 17px; + letter-spacing: .2em; + font-weight: bold; } #content td.descField, #box-popup td.descField { text-align: right; padding-right: 20px; @@ -1051,7 +1059,8 @@ fieldset.warning { width: 100%; /*margin: auto auto 50px;*/ line-height: 2em; - margin-bottom: 5em; } + margin-bottom: 5em; + padding-bottom: 5em; } #actions #logo { display: flex; width: 100%; diff --git a/app/modules/web/themes/material-blue/css/styles.css.map b/app/modules/web/themes/material-blue/css/styles.css.map index ce91de07..81766a5e 100644 --- a/app/modules/web/themes/material-blue/css/styles.css.map +++ b/app/modules/web/themes/material-blue/css/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["_elements.scss","_base.scss","_noheader.scss","styles.scss","_login.scss"], "names": [], "file": "styles.css" diff --git a/app/modules/web/themes/material-blue/css/styles.min.css b/app/modules/web/themes/material-blue/css/styles.min.css index dc1cf4f2..d02e34f0 100644 --- a/app/modules/web/themes/material-blue/css/styles.min.css +++ b/app/modules/web/themes/material-blue/css/styles.min.css @@ -1 +1 @@ -html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box;max-width:100%}*{font-family:"Roboto Regular",Verdana,Tahoma,sans-serif;box-sizing:inherit}*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr{height:20px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover,table tr.odd:hover{background-color:#e8ff99}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}form .form-field{display:flex;justify-content:space-between}form .form-field>label{min-width:12em;padding:.5em 0;font-size:16px;align-self:center}form .form-field>div{width:100%;align-self:center}a{text-decoration:none;color:#536dfe}a:visited{text-decoration:none;color:#536dfe}a:hover,a:active,a:focus{text-decoration:none;cursor:pointer}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}body.login,body.logout,body.userpassreset{background:#607d8b}body.login #wrap,body.logout #wrap,body.userpassreset #wrap{background:transparent}body.login #container,body.logout #container,body.userpassreset #container{padding-top:5%}body.login footer,body.logout footer,body.userpassreset footer{background:#78909c}body.login footer a,body.logout footer a,body.userpassreset footer a{color:#f2f2f2}#box-pub-noheader{background:transparent url("public/images/logo_full_nobg_outline.png") no-repeat top center;background-size:75% auto;width:40em;min-height:20em;margin:0 auto}#box-pub-noheader>div{width:100%;padding:1em;margin:0 auto}#box-pub-noheader .box-spacer{height:15em;background-color:transparent}#box-pub-noheader .box-header{width:100%;color:#f2f2f2;font-size:16px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form{-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}#box-pub-noheader .box-form form fieldset#box-data{height:100%;min-height:14em;text-align:left;background-color:transparent;margin-bottom:2em}#box-pub-noheader .box-form form fieldset#box-data legend{width:100%;color:#607d8b;font-size:14px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form form fieldset#box-data .form-control>i{margin-right:.5em;opacity:.5}#box-pub-noheader .box-form form fieldset#box-data .extra-hidden{display:none}#box-pub-noheader .box-form div#box-buttons{margin-top:2em;text-align:center}@media screen and (max-width:600px){#box-pub-noheader{width:25em}#box-pub-noheader .box-spacer{height:10em}#box-pub-noheader form fieldset#box-data .mdl-textfield{width:100%}}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:#ef5350;color:white;font-weight:bold;font-size:14px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5;padding-bottom:5em}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,0.8);display:none;border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}#wrap-loading.overlay-full{top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.5)}#wrap-loading.overlay-full #loading{position:absolute;top:50%;left:50%}#wrap-loading.overlay-full #taskStatus{display:none}#wrap-loading #taskStatus{display:none;position:absolute;left:0;top:55%;width:100%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);padding:1em 0}#container{margin:auto;width:100%}#container.error,#container.install{width:100%}#container .logo{height:64px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:2em auto 8em auto}#container #content.public-link{width:70%;min-height:0;margin:5em auto}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;border-right:1px solid #d9d9d9;color:#999;font-size:12px;font-weight:bold}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:none;width:100%;color:#607d8b;font-size:12px}#content td.valField .notification-description,#box-popup td.valField .notification-description{font-size:16px;max-width:100%}#content td.valField .notification-description .event-description,#content td.valField .notification-description .event-details,#box-popup td.valField .notification-description .event-description,#box-popup td.valField .notification-description .event-details{padding:.5em 0}#content td.valField .notification-description .event-description,#box-popup td.valField .notification-description .event-description{color:#5c6bc0;border-bottom:1px solid #e9e9e9}#content td.valField .notification-description .event-details .detail,#box-popup td.valField .notification-description .event-details .detail{display:flex;padding:.2em 0}#content td.valField .notification-description .event-details .detail .detail-left,#box-popup td.valField .notification-description .event-details .detail .detail-left{flex:none;width:8em;font-weight:bold}#content td.valField .notification-description .event-details .detail .detail-right,#box-popup td.valField .notification-description .event-details .detail .detail-right{flex-grow:1}#content .pager{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;justify-content:space-between;align-content:space-between;flex-wrap:wrap;width:100%;margin-top:15px;padding:.5em;font-size:11px;color:#999;background-color:#fcfcfc}#content .pager img{margin-left:5px;vertical-align:middle}#content .pager a{margin-left:5px;font-size:12px;color:#999}#content #title{width:100%;padding:7px;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.2em}#content #title.titleNormal{background-color:#607d8b;color:#fff}#content .data-container{width:75%;margin:0 auto}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>div{display:none}#content fieldset.data>div table{width:100%}#content .data{width:100%;padding:10px;margin:0 auto;background-color:#fff;-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .dropzone{width:100%;padding:1em;border:2px dashed #26a69a;text-align:center;opacity:.3}#content .data .dropzone:hover{opacity:1}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .extra-info{margin-top:20px}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff8e1;color:#ffca28;font-weight:bold}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#5c6bc0}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-flow:row;flex-wrap:wrap;align-content:flex-start;justify-content:space-around;margin:0}#content .data-header-minimal li{min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-header-minimal li.search-filter-spacer{flex:0 0 18em}#content .data-table{width:100%}#content .data-table td:first-of-type,#content .data-table th:first-of-type{width:5em}#content .data-table thead th{background-color:#607d8b;color:#fff}#content .data-table tbody td.cell-data{text-align:left}#content .data-table tbody td.cell-nodata{padding:0 .5em;text-align:left}#content .data-table tbody td.cell-actions{text-align:right}#content .data-table tbody td.cell-actions i{opacity:.5}#content .data-table tbody td.cell-actions i:hover{opacity:1}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:left;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img{width:24px;height:24px;margin:0 .5em}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{background-color:#fcfcfc;vertical-align:middle;position:relative;height:auto;padding:.5em 1em;margin-bottom:2em}#content #searchbox form{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox .search-filters .filter-slider{width:10em}#content #searchbox .search-filters-tags{display:none;flex-grow:2}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content .actions-optional{display:none}#content .error{width:350px;padding:15px;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#content .data .user-list-action,#content .data .profile-list-action,#box-popup .user-list-action,#box-popup .profile-list-action{width:75%;margin:0 auto}#content .data .list-wrap,#box-popup .list-wrap{max-height:20em;overflow:auto;padding:.5em;margin:1em 0}#content .data .list-wrap ul,#box-popup .list-wrap ul{list-style-type:none;margin:0;padding:0}#content .data .list-wrap li,#box-popup .list-wrap li{display:flex;background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:.5em}#content .data .list-wrap li:hover,#box-popup .list-wrap li:hover{background:#e8eaf6;color:#000}#content .data .list-wrap div.files-item-info,#box-popup .list-wrap div.files-item-info{flex-grow:2}#content .data .list-wrap div.files-item-info img,#box-popup .list-wrap div.files-item-info img{margin:0 .5em}#content .data .list-wrap div.files-item-actions,#box-popup .list-wrap div.files-item-actions{padding:.3em 0}#content .data .list-actions i,#box-popup .list-actions i{opacity:.5}#content .data .list-actions i:hover,#box-popup .list-actions i:hover{opacity:1}#box-popup{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:30em}#box-popup>h2{position:relative;width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0;padding:.5em 0;line-height:1em}#box-popup>h2 .btn-popup-close{display:none;position:absolute;right:.5em;top:.2em}#box-popup>table{width:100%;padding-bottom:1em}#box-popup select{width:220px}#box-popup #resFancyAccion{display:none}#box-popup #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#box-popup.image{background-color:transparent;max-width:100%;margin:0 auto;border-radius:0 !important;-moz-border-radius:0 !important;-webkit-border-radius:0 !important}#box-popup.image img{width:auto;margin:0 auto}#box-popup.image>div.title{background-color:#607d8b;color:#fff;padding:.5em}#box-popup.help{min-height:100px;background-color:#f5f5f5}#box-popup.help p{font-size:14px;text-align:justify;line-height:2em}#box-complexity>div{text-align:justify;line-height:1.5em;margin-top:1em}#box-upload-files>*{margin:0 auto}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:#fff8e1;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.popup-data{width:100%;min-width:400px;border:0;text-align:left;margin:0;padding:1em .5em}.popup-data .descField{min-width:100px}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;-webkit-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);-moz-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14)}footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left{width:50%;margin:0 1em}footer #footer-right{width:50%;margin:0 1em;justify-content:flex-end;text-align:right}footer #updates,footer #notices{min-width:5em;text-align:center;cursor:pointer}footer #notices .notices-title{font-weight:bold;border-bottom:1px solid #c9c9c9;margin-bottom:1em}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a{color:#b9b9b9}footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round,.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}.noRes{width:60%;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-grey{background-color:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action-in-box{padding:1em;text-align:right}.action-in-box ul{list-style:none;margin:0;padding:0}.tab-data{margin:2em auto 0;width:75%}.item-actions{display:flex;justify-content:flex-end;position:relative;margin:1em auto}.item-actions>div{display:inline-block}.tab-actions{margin:2em 0}.item-actions>ul,.tab-actions>ul{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;list-style:none;margin:0;padding:0}.item-actions>ul>li,.tab-actions>ul>li{width:auto;min-width:2em;margin-left:.5em}.item-actions>ul>li.datagrid-action-search,.tab-actions>ul>li.datagrid-action-search{min-width:5em}.item-actions>ul>li.datagrid-action-search form,.tab-actions>ul>li.datagrid-action-search form{width:100%}h5.datagrid-header-title{padding:.7em;border-bottom:1px solid #d9d9d9}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;padding:.3em 1em}.global-on{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;padding:.3em 1em}.opacity50{filter:alpha(opacity=50);opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.password-level.strongest{color:#26a69a}.password-level.strong{color:#2196f3}.password-level.good{color:#ffca28}.password-level.weak{color:#ef5350}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-text,.dialog-user-text,.dialog-pass-text{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;padding:.5em;text-align:center;min-width:200px}.dialog-user-text{border-bottom:#d9d9d9 1px solid;color:#a9a9a9}.dialog-pass-text{border:transparent 1px solid;letter-spacing:.2em}.dialog-button{width:150px}.dialog-buttons{text-align:center;padding:.5em;border-top:1px solid #c9c9c9;line-height:2.5em}.dialog-clip-copy{color:#26a69a;background-color:#e0f2f1}.btn-help{cursor:pointer}.help-box{display:none;background-color:#fff !important;color:#607d8b}.help-box>*{font-weight:bold}.help-container ul{padding:0 .5em;list-style:none}.help-container ul li{padding:.5em 0}.help-container .help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.tooltip-text{padding:.5em}.tooltip-text .tooltip-header{text-transform:capitalize;font-weight:bold;border-bottom:1px solid #c9c9c9}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.form-control{position:relative}.form-control .password-actions{position:absolute;right:0;padding:20px}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{min-width:300px;max-width:100%}fieldset.warning{padding:8px;border-radius:5px;color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}fieldset.warning legend{color:#ef5350 !important}fieldset.warning a{color:#ef5350 !important;font-weight:bold}#actions{width:100%;line-height:2em;margin-bottom:5em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;align-items:center;background:url("public/images/logo_full_bg.png") left no-repeat;background-size:auto 150px;height:150px}#actions #page-title{width:100%;color:#607d8b;text-align:center}#actions #page-title h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40vw;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:3px;padding:1em .5em}#actions ul.errors>li.msg-critical{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}#actions ul.errors>li.msg-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;color:#555}#actions ul.errors>li.msg-ok{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#actions ul.errors>li>p.hint{color:#555;font-size:12px}#actions ul.errors>li>p.hint i{margin-right:.5em}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset{margin-bottom:2em}#actions form fieldset legend{width:100%;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin:1em 0;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !important}.opacity50{opacity:.5 !important}.msg-option-unvailable{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;border:0;padding:.5em;text-align:center;margin:1em 0;font-size:1.5em}div.tag-list-box{margin-bottom:1em}div.tag-list-box .tag-list-header{text-align:left;border-bottom:1px solid #d9d9d9;color:#607d8b;font-size:12px;font-weight:bold;margin-bottom:.5em}div.tag-list-box .tag-list-body .tags-list-items{display:inline-block;padding:.5em;width:95%;height:3em;border-bottom:1px solid rgba(0,0,0,0.12);border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}div.tag-list-box i.select-icon{margin-right:.5em;color:#607d8b;font-size:18px}div.tag-list-box span.tag,div.tags-box span.tag{margin:0 3px 3px 0;padding:3px;background:#5c6bc0;color:#fff;border:0;border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}#box-pub-noheader #box-login{position:relative;min-height:14em}#box-pub-noheader #box-login #box-buttons{position:absolute;top:2em;right:2em}#box-pub-noheader #box-login #box-actions{width:100%;text-align:right}#box-pub-noheader #box-login #box-actions a{color:#c9c9c9}#box-pub-noheader #box-updated{width:350px;margin:3em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#box-pub-noheader #demo-info{padding:.5em;margin:3em auto 0 auto;color:#c9c9c9;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9}#box-pub-noheader #demo-info ul{display:flex;justify-content:space-around;list-style:none}#box-pub-noheader #demo-info ul li>span{padding:0 1em}@media screen and (max-width:600px){#box-pub-noheader #box-login #box-buttons{position:relative;top:0;right:0;text-align:right}#box-pub-noheader #box-login #box-actions{margin-top:1em}#box-pub-noheader #demo-info ul{display:flex;flex-direction:column;align-items:center;list-style:none}#box-pub-noheader #demo-info ul li{width:11em;text-align:left}#box-pub-noheader #demo-info ul li>span{padding:0 1em}}@media screen and (max-width:1000px){#content #searchbox .search-filters>*{margin:.5em 1em .5em 0}footer{display:none;justify-content:space-between;flex-wrap:wrap}footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right{width:100%}footer .footer-parts>div{width:100%;padding:.5em 0}}@media screen and (max-width:600px){#content input,#box-popup input{width:100%}#content .mdl-textfield,#box-popup .mdl-textfield{width:100%}#content td.descField,#box-popup td.descField{display:none}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:block}#content #searchbox .mdl-textfield{width:90%}#content #searchbox .search-text{width:90%}#content #searchbox .search-filters .selectize-control{width:100%}#content .data-header-minimal li.search-filter-spacer{display:none}#content .data-container,#content .tab-data{width:100%}#content .data-container .selectize-control,#content .tab-data .selectize-control{width:100%}#content .mdl-tabs__tab-bar{flex-wrap:wrap;height:auto}#content .pager{flex-direction:column-reverse}#content .pager>div{text-align:center;width:100%}#box-popup h2>.btn-popup-close{display:inline-block}#actions ul.errors{max-width:90vw}.mdl-data-table{table-layout:fixed;width:100%}.table-responsive td,.table-responsive th{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.table-responsive .cell-actions i{display:block !important}} \ No newline at end of file +html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box;max-width:100%}*{font-family:"Roboto Regular",Verdana,Tahoma,sans-serif;box-sizing:inherit}*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr{height:20px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover,table tr.odd:hover{background-color:#e8ff99}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}form .form-field{display:flex;justify-content:space-between}form .form-field>label{min-width:12em;padding:.5em 0;font-size:16px;align-self:center}form .form-field>div{width:100%;align-self:center}a{text-decoration:none;color:#536dfe}a:visited{text-decoration:none;color:#536dfe}a:hover,a:active,a:focus{text-decoration:none;cursor:pointer}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}body.login,body.logout,body.userpassreset{background:#607d8b}body.login #wrap,body.logout #wrap,body.userpassreset #wrap{background:transparent}body.login #container,body.logout #container,body.userpassreset #container{padding-top:5%}body.login footer,body.logout footer,body.userpassreset footer{background:#78909c}body.login footer a,body.logout footer a,body.userpassreset footer a{color:#f2f2f2}#box-pub-noheader{background:transparent url("public/images/logo_full_nobg_outline.png") no-repeat top center;background-size:75% auto;width:40em;min-height:20em;margin:0 auto}#box-pub-noheader>div{width:100%;padding:1em;margin:0 auto}#box-pub-noheader .box-spacer{height:15em;background-color:transparent}#box-pub-noheader .box-header{width:100%;color:#f2f2f2;font-size:16px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form{-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}#box-pub-noheader .box-form form fieldset#box-data{height:100%;min-height:14em;text-align:left;background-color:transparent;margin-bottom:2em}#box-pub-noheader .box-form form fieldset#box-data legend{width:100%;color:#607d8b;font-size:14px;font-weight:bold;text-align:center;margin:1em 0;letter-spacing:.1em;padding:.2em 0}#box-pub-noheader .box-form form fieldset#box-data .form-control>i{margin-right:.5em;opacity:.5}#box-pub-noheader .box-form form fieldset#box-data .extra-hidden{display:none}#box-pub-noheader .box-form div#box-buttons{margin-top:2em;text-align:center}@media screen and (max-width:600px){#box-pub-noheader{width:25em}#box-pub-noheader .box-spacer{height:10em}#box-pub-noheader form fieldset#box-data .mdl-textfield{width:100%}}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:#ef5350;color:white;font-weight:bold;font-size:14px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5;padding-bottom:5em}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,0.8);display:none;border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}#wrap-loading.overlay-full{top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.5)}#wrap-loading.overlay-full #loading{position:absolute;top:50%;left:50%}#wrap-loading.overlay-full #taskStatus{display:none}#wrap-loading #taskStatus{display:none;position:absolute;left:0;top:55%;width:100%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);padding:1em 0}#container{margin:auto;width:100%}#container.error,#container.install{width:100%}#container .logo{height:64px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:2em auto 8em auto}#container #content.public-link{width:70%;min-height:0;margin:5em auto}#content tr.header td,#box-popup tr.header td{width:100%;padding:7px;background-color:#eceff1;color:#607d8b;font-size:17px;letter-spacing:.2em;font-weight:bold}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;border-right:1px solid #d9d9d9;color:#999;font-size:12px;font-weight:bold}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:none;width:100%;color:#607d8b;font-size:12px}#content td.valField .notification-description,#box-popup td.valField .notification-description{font-size:16px;max-width:100%}#content td.valField .notification-description .event-description,#content td.valField .notification-description .event-details,#box-popup td.valField .notification-description .event-description,#box-popup td.valField .notification-description .event-details{padding:.5em 0}#content td.valField .notification-description .event-description,#box-popup td.valField .notification-description .event-description{color:#5c6bc0;border-bottom:1px solid #e9e9e9}#content td.valField .notification-description .event-details .detail,#box-popup td.valField .notification-description .event-details .detail{display:flex;padding:.2em 0}#content td.valField .notification-description .event-details .detail .detail-left,#box-popup td.valField .notification-description .event-details .detail .detail-left{flex:none;width:8em;font-weight:bold}#content td.valField .notification-description .event-details .detail .detail-right,#box-popup td.valField .notification-description .event-details .detail .detail-right{flex-grow:1}#content .pager{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;justify-content:space-between;align-content:space-between;flex-wrap:wrap;width:100%;margin-top:15px;padding:.5em;font-size:11px;color:#999;background-color:#fcfcfc}#content .pager img{margin-left:5px;vertical-align:middle}#content .pager a{margin-left:5px;font-size:12px;color:#999}#content #title{width:100%;padding:7px;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.2em}#content #title.titleNormal{background-color:#607d8b;color:#fff}#content .data-container{width:75%;margin:0 auto}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>div{display:none}#content fieldset.data>div table{width:100%}#content .data{width:100%;padding:10px;margin:0 auto;background-color:#fff;-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .dropzone{width:100%;padding:1em;border:2px dashed #26a69a;text-align:center;opacity:.3}#content .data .dropzone:hover{opacity:1}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .extra-info{margin-top:20px}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff8e1;color:#ffca28;font-weight:bold}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#5c6bc0}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-flow:row;flex-wrap:wrap;align-content:flex-start;justify-content:space-around;margin:0}#content .data-header-minimal li{min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-header-minimal li.search-filter-spacer{flex:0 0 18em}#content .data-table{width:100%}#content .data-table td:first-of-type,#content .data-table th:first-of-type{width:5em}#content .data-table thead th{background-color:#607d8b;color:#fff}#content .data-table tbody td.cell-data{text-align:left}#content .data-table tbody td.cell-nodata{padding:0 .5em;text-align:left}#content .data-table tbody td.cell-actions{text-align:right}#content .data-table tbody td.cell-actions i{opacity:.5}#content .data-table tbody td.cell-actions i:hover{opacity:1}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:left;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img{width:24px;height:24px;margin:0 .5em}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{background-color:#fcfcfc;vertical-align:middle;position:relative;height:auto;padding:.5em 1em;margin-bottom:2em}#content #searchbox form{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox .search-filters .filter-slider{width:10em}#content #searchbox .search-filters-tags{display:none;flex-grow:2}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content .actions-optional{display:none}#content .error{width:350px;padding:15px;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#content .data .user-list-action,#content .data .profile-list-action,#box-popup .user-list-action,#box-popup .profile-list-action{width:75%;margin:0 auto}#content .data .list-wrap,#box-popup .list-wrap{max-height:20em;overflow:auto;padding:.5em;margin:1em 0}#content .data .list-wrap ul,#box-popup .list-wrap ul{list-style-type:none;margin:0;padding:0}#content .data .list-wrap li,#box-popup .list-wrap li{display:flex;background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:.5em}#content .data .list-wrap li:hover,#box-popup .list-wrap li:hover{background:#e8eaf6;color:#000}#content .data .list-wrap div.files-item-info,#box-popup .list-wrap div.files-item-info{flex-grow:2}#content .data .list-wrap div.files-item-info img,#box-popup .list-wrap div.files-item-info img{margin:0 .5em}#content .data .list-wrap div.files-item-actions,#box-popup .list-wrap div.files-item-actions{padding:.3em 0}#content .data .list-actions i,#box-popup .list-actions i{opacity:.5}#content .data .list-actions i:hover,#box-popup .list-actions i:hover{opacity:1}#box-popup{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:30em}#box-popup>h2{position:relative;width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0;padding:.5em 0;line-height:1em}#box-popup>h2 .btn-popup-close{display:none;position:absolute;right:.5em;top:.2em}#box-popup>table{width:100%;padding-bottom:1em}#box-popup select{width:220px}#box-popup #resFancyAccion{display:none}#box-popup #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#box-popup.image{background-color:transparent;max-width:100%;margin:0 auto;border-radius:0 !important;-moz-border-radius:0 !important;-webkit-border-radius:0 !important}#box-popup.image img{width:auto;margin:0 auto}#box-popup.image>div.title{background-color:#607d8b;color:#fff;padding:.5em}#box-popup.help{min-height:100px;background-color:#f5f5f5}#box-popup.help p{font-size:14px;text-align:justify;line-height:2em}#box-complexity>div{text-align:justify;line-height:1.5em;margin-top:1em}#box-upload-files>*{margin:0 auto}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:#fff8e1;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.popup-data{width:100%;min-width:400px;border:0;text-align:left;margin:0;padding:1em .5em}.popup-data .descField{min-width:100px}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;-webkit-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);-moz-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14)}footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left{width:50%;margin:0 1em}footer #footer-right{width:50%;margin:0 1em;justify-content:flex-end;text-align:right}footer #updates,footer #notices{min-width:5em;text-align:center;cursor:pointer}footer #notices .notices-title{font-weight:bold;border-bottom:1px solid #c9c9c9;margin-bottom:1em}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a{color:#b9b9b9}footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round,.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}.noRes{width:60%;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-grey{background-color:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action-in-box{padding:1em;text-align:right}.action-in-box ul{list-style:none;margin:0;padding:0}.tab-data{margin:2em auto 0;width:75%}.item-actions{display:flex;justify-content:flex-end;position:relative;margin:1em auto}.item-actions>div{display:inline-block}.tab-actions{margin:2em 0}.item-actions>ul,.tab-actions>ul{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;list-style:none;margin:0;padding:0}.item-actions>ul>li,.tab-actions>ul>li{width:auto;min-width:2em;margin-left:.5em}.item-actions>ul>li.datagrid-action-search,.tab-actions>ul>li.datagrid-action-search{min-width:5em}.item-actions>ul>li.datagrid-action-search form,.tab-actions>ul>li.datagrid-action-search form{width:100%}h5.datagrid-header-title{padding:.7em;border-bottom:1px solid #d9d9d9}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;padding:.3em 1em}.global-on{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;padding:.3em 1em}.opacity50{filter:alpha(opacity=50);opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.password-level.strongest{color:#26a69a}.password-level.strong{color:#2196f3}.password-level.good{color:#ffca28}.password-level.weak{color:#ef5350}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-text,.dialog-user-text,.dialog-pass-text{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;padding:.5em;text-align:center;min-width:200px}.dialog-user-text{border-bottom:#d9d9d9 1px solid;color:#a9a9a9}.dialog-pass-text{border:transparent 1px solid;letter-spacing:.2em}.dialog-button{width:150px}.dialog-buttons{text-align:center;padding:.5em;border-top:1px solid #c9c9c9;line-height:2.5em}.dialog-clip-copy{color:#26a69a;background-color:#e0f2f1}.btn-help{cursor:pointer}.help-box{display:none;background-color:#fff !important;color:#607d8b}.help-box>*{font-weight:bold}.help-container ul{padding:0 .5em;list-style:none}.help-container ul li{padding:.5em 0}.help-container .help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.tooltip-text{padding:.5em}.tooltip-text .tooltip-header{text-transform:capitalize;font-weight:bold;border-bottom:1px solid #c9c9c9}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.form-control{position:relative}.form-control .password-actions{position:absolute;right:0;padding:20px}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{min-width:300px;max-width:100%}fieldset.warning{padding:8px;border-radius:5px;color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}fieldset.warning legend{color:#ef5350 !important}fieldset.warning a{color:#ef5350 !important;font-weight:bold}#actions{width:100%;line-height:2em;margin-bottom:5em;padding-bottom:5em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;align-items:center;background:url("public/images/logo_full_bg.png") left no-repeat;background-size:auto 150px;height:150px}#actions #page-title{width:100%;color:#607d8b;text-align:center}#actions #page-title h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40vw;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:3px;padding:1em .5em}#actions ul.errors>li.msg-critical{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}#actions ul.errors>li.msg-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;color:#555}#actions ul.errors>li.msg-ok{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#actions ul.errors>li>p.hint{color:#555;font-size:12px}#actions ul.errors>li>p.hint i{margin-right:.5em}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset{margin-bottom:2em}#actions form fieldset legend{width:100%;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin:1em 0;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !important}.opacity50{opacity:.5 !important}.msg-option-unvailable{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;border:0;padding:.5em;text-align:center;margin:1em 0;font-size:1.5em}div.tag-list-box{margin-bottom:1em}div.tag-list-box .tag-list-header{text-align:left;border-bottom:1px solid #d9d9d9;color:#607d8b;font-size:12px;font-weight:bold;margin-bottom:.5em}div.tag-list-box .tag-list-body .tags-list-items{display:inline-block;padding:.5em;width:95%;height:3em;border-bottom:1px solid rgba(0,0,0,0.12);border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}div.tag-list-box i.select-icon{margin-right:.5em;color:#607d8b;font-size:18px}div.tag-list-box span.tag,div.tags-box span.tag{margin:0 3px 3px 0;padding:3px;background:#5c6bc0;color:#fff;border:0;border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}#box-pub-noheader #box-login{position:relative;min-height:14em}#box-pub-noheader #box-login #box-buttons{position:absolute;top:2em;right:2em}#box-pub-noheader #box-login #box-actions{width:100%;text-align:right}#box-pub-noheader #box-login #box-actions a{color:#c9c9c9}#box-pub-noheader #box-updated{width:350px;margin:3em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#box-pub-noheader #demo-info{padding:.5em;margin:3em auto 0 auto;color:#c9c9c9;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9}#box-pub-noheader #demo-info ul{display:flex;justify-content:space-around;list-style:none}#box-pub-noheader #demo-info ul li>span{padding:0 1em}@media screen and (max-width:600px){#box-pub-noheader #box-login #box-buttons{position:relative;top:0;right:0;text-align:right}#box-pub-noheader #box-login #box-actions{margin-top:1em}#box-pub-noheader #demo-info ul{display:flex;flex-direction:column;align-items:center;list-style:none}#box-pub-noheader #demo-info ul li{width:11em;text-align:left}#box-pub-noheader #demo-info ul li>span{padding:0 1em}}@media screen and (max-width:1000px){#content #searchbox .search-filters>*{margin:.5em 1em .5em 0}footer{display:none;justify-content:space-between;flex-wrap:wrap}footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right{width:100%}footer .footer-parts>div{width:100%;padding:.5em 0}}@media screen and (max-width:600px){#content input,#box-popup input{width:100%}#content .mdl-textfield,#box-popup .mdl-textfield{width:100%}#content td.descField,#box-popup td.descField{display:none}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:block}#content #searchbox .mdl-textfield{width:90%}#content #searchbox .search-text{width:90%}#content #searchbox .search-filters .selectize-control{width:100%}#content .data-header-minimal li.search-filter-spacer{display:none}#content .data-container,#content .tab-data{width:100%}#content .data-container .selectize-control,#content .tab-data .selectize-control{width:100%}#content .mdl-tabs__tab-bar{flex-wrap:wrap;height:auto}#content .pager{flex-direction:column-reverse}#content .pager>div{text-align:center;width:100%}#box-popup h2>.btn-popup-close{display:inline-block}#actions ul.errors{max-width:90vw}.mdl-data-table{table-layout:fixed;width:100%}.table-responsive td,.table-responsive th{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.table-responsive .cell-actions i{display:block !important}} \ No newline at end of file diff --git a/app/modules/web/themes/material-blue/css/styles.scss b/app/modules/web/themes/material-blue/css/styles.scss index aab4b687..4635b042 100644 --- a/app/modules/web/themes/material-blue/css/styles.scss +++ b/app/modules/web/themes/material-blue/css/styles.scss @@ -119,6 +119,18 @@ } #content, #box-popup { + tr.header { + td { + width: 100%; + padding: 7px; + background-color: $color-bluegrey-bg; + color: $color-bluegrey-fg; + font-size: 17px; + letter-spacing: .2em; + font-weight: bold; + } + } + td.descField { text-align: right; padding-right: 20px; @@ -1208,6 +1220,7 @@ fieldset.warning { /*margin: auto auto 50px;*/ line-height: 2em; margin-bottom: 5em; + padding-bottom: 5em; #logo { display: flex; diff --git a/app/modules/web/themes/material-blue/views/config/ldap.inc b/app/modules/web/themes/material-blue/views/config/ldap.inc index 80e1f234..2d4cb32f 100644 --- a/app/modules/web/themes/material-blue/views/config/ldap.inc +++ b/app/modules/web/themes/material-blue/views/config/ldap.inc @@ -92,7 +92,10 @@ use SP\Mvc\View\Template; + value="getId(); ?>" + isSelected() ? 'selected' : ''; ?>> + getName(); ?> + @@ -101,7 +104,9 @@ use SP\Mvc\View\Template;
@@ -134,7 +139,9 @@ use SP\Mvc\View\Template;
@@ -166,7 +173,9 @@ use SP\Mvc\View\Template;
@@ -187,7 +196,9 @@ use SP\Mvc\View\Template;
@@ -201,7 +212,9 @@ use SP\Mvc\View\Template;
@@ -233,7 +246,9 @@ use SP\Mvc\View\Template;
@@ -269,7 +284,9 @@ use SP\Mvc\View\Template;
@@ -286,7 +303,10 @@ use SP\Mvc\View\Template; + value="getId(); ?>" + getId() === $configData->getLdapDefaultGroup() ? 'selected' : ''; ?>> + getName(); ?> +
@@ -312,7 +334,132 @@ use SP\Mvc\View\Template; + value="getId(); ?>" + getId() === $configData->getLdapDefaultProfile()) ? 'selected' : ''; ?>> + getName(); ?> + + + +
+ +
++ +
++ +
++ +
+@@ -384,7 +533,9 @@ use SP\Mvc\View\Template;
@@ -431,7 +582,9 @@ use SP\Mvc\View\Template;
@@ -454,7 +607,9 @@ use SP\Mvc\View\Template;
diff --git a/lib/SP/Config/Config.php b/lib/SP/Config/Config.php
index a1d78ccc..d05b6c52 100644
--- a/lib/SP/Config/Config.php
+++ b/lib/SP/Config/Config.php
@@ -27,7 +27,7 @@ namespace SP\Config;
use Defuse\Crypto\Exception\EnvironmentIsBrokenException;
use Exception;
use Psr\Container\ContainerInterface;
-use ReflectionObject;
+use SP\Core\AppInfoInterface;
use SP\Core\Context\ContextInterface;
use SP\Core\Exceptions\ConfigException;
use SP\Services\Config\ConfigBackupService;
@@ -107,6 +107,12 @@ final class Config
) {
$this->configData = $this->fileCache->load();
+ if ($this->configData->count() === 0) {
+ $this->fileCache->delete();
+ $this->initialize();
+ return;
+ }
+
logger('Config cache loaded');
} else {
if (file_exists($this->fileStorage->getFileHandler()->getFile())) {
@@ -160,21 +166,28 @@ final class Config
* @throws FileException
*/
public function loadConfigFromFile()
+ {
+ return $this->configMapper($this->fileStorage->load('config')->getItems());
+ }
+
+ /**
+ * Map the config array keys with ConfigData class setters
+ *
+ * @param array $items
+ *
+ * @return ConfigData
+ */
+ private function configMapper(array $items)
{
$configData = new ConfigData();
- // Mapear el array de elementos de configuración con las propiedades de la clase configData
- $items = $this->fileStorage->load('config')->getItems();
- $reflectionObject = new ReflectionObject($configData);
+ foreach ($items as $item => $value) {
+ $methodName = 'set' . ucfirst($item);
- foreach ($reflectionObject->getProperties() as $property) {
- $property->setAccessible(true);
-
- if (isset($items[$property->getName()])) {
- $property->setValue($configData, $items[$property->getName()]);
+ if (method_exists($configData, $methodName)) {
+ $configData->$methodName($value);
}
- $property->setAccessible(false);
}
return $configData;
@@ -197,10 +210,12 @@ final class Config
}
$configData->setConfigDate(time());
- $configData->setConfigSaver($this->context->getUserData()->getLogin() ?: 'sysPass');
+ $configData->setConfigSaver($this->context->getUserData()->getLogin() ?: AppInfoInterface::APP_NAME);
$configData->setConfigHash();
- $this->fileStorage->save($configData, 'config');
+ // Save only attributes to avoid a parent attributes node within the XML
+ $this->fileStorage->save($configData->getAttributes(), 'config');
+ // Save the class object (serialized)
$this->fileCache->save($configData);
$this->configData = $configData;
diff --git a/lib/SP/Config/ConfigData.php b/lib/SP/Config/ConfigData.php
index 92de9aca..af1e7971 100644
--- a/lib/SP/Config/ConfigData.php
+++ b/lib/SP/Config/ConfigData.php
@@ -25,409 +25,56 @@
namespace SP\Config;
use JsonSerializable;
+use SP\Core\DataCollection;
/**
* Class configData
*
* @package SP\Config
*/
-final class ConfigData implements JsonSerializable
+final class ConfigData extends DataCollection implements JsonSerializable
{
- /**
- * @var string
- */
- private $upgradeKey;
- /**
- * @var bool
- */
- private $dokuwikiEnabled = false;
- /**
- * @var string
- */
- private $dokuwikiUrl;
- /**
- * @var string
- */
- private $dokuwikiUrlBase;
- /**
- * @var string
- */
- private $dokuwikiUser;
- /**
- * @var string
- */
- private $dokuwikiPass;
- /**
- * @var string
- */
- private $dokuwikiNamespace;
- /**
- * @var int
- */
- private $ldapDefaultGroup;
- /**
- * @var int
- */
- private $ldapDefaultProfile;
- /**
- * @var bool
- */
- private $proxyEnabled = false;
- /**
- * @var string
- */
- private $proxyServer;
- /**
- * @var int
- */
- private $proxyPort = 8080;
- /**
- * @var string
- */
- private $proxyUser;
- /**
- * @var string
- */
- private $proxyPass;
- /**
- * @var int
- */
- private $publinksMaxViews = 3;
- /**
- * @var int
- */
- private $publinksMaxTime = 600;
- /**
- * @var bool
- */
- private $publinksEnabled = false;
- /**
- * @var int
- */
- private $accountCount = 12;
- /**
- * @var bool
- */
- private $accountLink = true;
- /**
- * @var bool
- */
- private $checkUpdates = false;
- /**
- * @var bool
- */
- private $checknotices = false;
- /**
- * @var string
- */
- private $configHash;
- /**
- * @var string
- */
- private $dbHost;
- /**
- * @var string
- */
- private $dbSocket;
- /**
- * @var string
- */
- private $dbName;
- /**
- * @var string
- */
- private $dbPass;
- /**
- * @var string
- */
- private $dbUser;
- /**
- * @var int
- */
- private $dbPort = 3306;
- /**
- * @var bool
- */
- private $debug = false;
- /**
- * @var bool
- */
- private $demoEnabled = false;
- /**
- * @var array
- */
- private $filesAllowedExts = [];
- /**
- * @var array
- */
- private $filesAllowedMime = [];
- /**
- * @var int
- */
- private $filesAllowedSize = 1024;
- /**
- * @var bool
- */
- private $filesEnabled = true;
- /**
- * @var bool
- */
- private $globalSearch = true;
- /**
- * @var bool
- */
- private $installed = false;
- /**
- * @var string
- */
- private $ldapBase;
- /**
- * @var string
- */
- private $ldapBindUser;
- /**
- * @var string
- */
- private $ldapBindPass;
- /**
- * @var string
- */
- private $ldapProxyUser;
- /**
- * @var bool
- */
- private $ldapEnabled = false;
- /**
- * @var bool
- */
- private $ldapAds = false;
- /**
- * @var int
- */
- private $ldapType;
- /**
- * @var string
- */
- private $ldapGroup;
- /**
- * @var string
- */
- private $ldapServer;
- /**
- * @var bool
- */
- private $logEnabled = true;
- /**
- * @var array
- */
- private $logEvents = [];
- /**
- * @var bool
- */
- private $mailAuthenabled = false;
- /**
- * @var bool
- */
- private $mailEnabled = false;
- /**
- * @var string
- */
- private $mailFrom;
- /**
- * @var string
- */
- private $mailPass;
- /**
- * @var int
- */
- private $mailPort = 25;
- /**
- * @var bool
- */
- private $mailRequestsEnabled = false;
- /**
- * @var string
- */
- private $mailSecurity;
- /**
- * @var string
- */
- private $mailServer;
- /**
- * @var string
- */
- private $mailUser;
- /**
- * @var array
- */
- private $mailRecipients = [];
- /**
- * @var array
- */
- private $mailEvents = [];
- /**
- * @var bool
- */
- private $maintenance = false;
- /**
- * @var string
- */
- private $passwordSalt;
- /**
- * @var bool
- */
- private $resultsAsCards = false;
- /**
- * @var int
- */
- private $sessionTimeout = 300;
- /**
- * @var string
- */
- private $siteLang;
- /**
- * @var string
- */
- private $siteTheme = 'material-blue';
- /**
- * @var string
- */
- private $configVersion;
- /**
- * @var string
- */
- private $appVersion;
- /**
- * @var string
- */
- private $databaseVersion;
- /**
- * @var bool
- */
- private $wikiEnabled = false;
- /**
- * @var array
- */
- private $wikiFilter = [];
- /**
- * @var string
- */
- private $wikiPageurl;
- /**
- * @var string
- */
- private $wikiSearchurl;
- /**
- * @var int
- */
- private $configDate = 0;
- /**
- * @var bool
- */
- private $publinksImageEnabled = false;
- /**
- * @var string
- */
- private $backup_hash;
- /**
- * @var string
- */
- private $export_hash;
- /**
- * @var bool
- */
- private $httpsEnabled = false;
- /**
- * @var bool
- */
- private $syslogEnabled = false;
- /**
- * @var bool
- */
- private $syslogRemoteEnabled = false;
- /**
- * @var string
- */
- private $syslogServer;
- /**
- * @var int
- */
- private $syslogPort = 514;
- /**
- * @var bool
- */
- private $accountPassToImage = false;
- /**
- * @var string
- */
- private $configSaver;
- /**
- * @var bool
- */
- private $encryptSession = false;
- /**
- * @var bool
- */
- private $accountFullGroupAccess = false;
- /**
- * @var bool
- */
- private $authBasicEnabled = true;
- /**
- * @var bool
- */
- private $authBasicAutoLoginEnabled = true;
- /**
- * @var string
- */
- private $authBasicDomain;
- /**
- * @var int
- */
- private $ssoDefaultGroup;
- /**
- * @var int
- */
- private $ssoDefaultProfile;
- /**
- * @var bool
- */
- private $accountExpireEnabled = false;
- /**
- * @var int
- */
- private $accountExpireTime = 10368000;
- /**
- * @var bool
- */
- private $ldapTlsEnabled = false;
- /**
- * @var string
- */
- private $applicationUrl;
+ const PUBLIC_LINK_MAX_VIEWS = 3;
+ const PUBLIC_LINK_MAX_TIME = 600;
+ const ACCOUNT_COUNT = 12;
+ const DB_PORT = 3306;
+ const FILES_ALLOWED_SIZE = 1024;
+ const MAIL_PORT = 587;
+ const SESSION_TIMEOUT = 300;
+ const SITE_THEME = 'material-blue';
+ const SYSLOG_PORT = 514;
+ const ACCOUNT_EXPIRE_TIME = 10368000;
/**
* @return array
*/
- public function getLogEvents()
+ public function getAttributes(): array
{
- return is_array($this->logEvents) ? $this->logEvents : [];
+ return $this->attributes;
+ }
+
+ /**
+ * @return array
+ */
+ public function getLogEvents(): array
+ {
+ return $this->get('logEvents', []);
}
/**
* @param array $logEvents
*/
- public function setLogEvents(array $logEvents)
+ public function setLogEvents($logEvents)
{
- $this->logEvents = $logEvents;
+ $this->set('logEvents', $logEvents ?: []);
}
/**
* @return boolean
*/
- public function isDokuwikiEnabled()
+ public function isDokuwikiEnabled(): bool
{
- return $this->dokuwikiEnabled;
+ return $this->get('dokuwikiEnabled', false);
}
/**
@@ -437,7 +84,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDokuwikiEnabled($dokuwikiEnabled)
{
- $this->dokuwikiEnabled = (bool)$dokuwikiEnabled;
+ $this->set('dokuwikiEnabled', (bool)$dokuwikiEnabled);
return $this;
}
@@ -447,7 +94,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDokuwikiUrl()
{
- return $this->dokuwikiUrl;
+ return $this->get('dokuwikiUrl');
}
/**
@@ -457,7 +104,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDokuwikiUrl($dokuwikiUrl)
{
- $this->dokuwikiUrl = $dokuwikiUrl;
+ $this->set('dokuwikiUrl', $dokuwikiUrl);
return $this;
}
@@ -467,7 +114,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDokuwikiUrlBase()
{
- return $this->dokuwikiUrlBase;
+ return $this->get('dokuwikiUrlBase');
}
/**
@@ -477,7 +124,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDokuwikiUrlBase($dokuwikiUrlBase)
{
- $this->dokuwikiUrlBase = $dokuwikiUrlBase;
+ $this->set('dokuwikiUrlBase', $dokuwikiUrlBase);
return $this;
}
@@ -487,7 +134,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDokuwikiUser()
{
- return $this->dokuwikiUser;
+ return $this->get('dokuwikiUser');
}
/**
@@ -497,7 +144,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDokuwikiUser($dokuwikiUser)
{
- $this->dokuwikiUser = $dokuwikiUser;
+ $this->set('dokuwikiUser', $dokuwikiUser);
return $this;
}
@@ -507,7 +154,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDokuwikiPass()
{
- return $this->dokuwikiPass;
+ return $this->get('dokuwikiPass');
}
/**
@@ -517,7 +164,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDokuwikiPass($dokuwikiPass)
{
- $this->dokuwikiPass = $dokuwikiPass;
+ $this->set('dokuwikiPass', $dokuwikiPass);
return $this;
}
@@ -527,7 +174,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDokuwikiNamespace()
{
- return $this->dokuwikiNamespace;
+ return $this->get('dokuwikiNamespace');
}
/**
@@ -537,7 +184,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDokuwikiNamespace($dokuwikiNamespace)
{
- $this->dokuwikiNamespace = $dokuwikiNamespace;
+ $this->set('dokuwikiNamespace', $dokuwikiNamespace);
return $this;
}
@@ -545,9 +192,9 @@ final class ConfigData implements JsonSerializable
/**
* @return int
*/
- public function getLdapDefaultGroup()
+ public function getLdapDefaultGroup(): int
{
- return (int)$this->ldapDefaultGroup;
+ return (int)$this->get('ldapDefaultGroup');
}
/**
@@ -557,7 +204,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapDefaultGroup($ldapDefaultGroup)
{
- $this->ldapDefaultGroup = (int)$ldapDefaultGroup;
+ $this->set('ldapDefaultGroup', (int)$ldapDefaultGroup);
return $this;
}
@@ -565,9 +212,9 @@ final class ConfigData implements JsonSerializable
/**
* @return int
*/
- public function getLdapDefaultProfile()
+ public function getLdapDefaultProfile(): int
{
- return (int)$this->ldapDefaultProfile;
+ return (int)$this->get('ldapDefaultProfile');
}
/**
@@ -577,7 +224,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapDefaultProfile($ldapDefaultProfile)
{
- $this->ldapDefaultProfile = (int)$ldapDefaultProfile;
+ $this->set('ldapDefaultProfile', (int)$ldapDefaultProfile);
return $this;
}
@@ -587,7 +234,7 @@ final class ConfigData implements JsonSerializable
*/
public function isProxyEnabled()
{
- return $this->proxyEnabled;
+ return $this->get('proxyEnabled', false);
}
/**
@@ -597,7 +244,7 @@ final class ConfigData implements JsonSerializable
*/
public function setProxyEnabled($proxyEnabled)
{
- $this->proxyEnabled = (bool)$proxyEnabled;
+ $this->set('proxyEnabled', (bool)$proxyEnabled);
return $this;
}
@@ -607,7 +254,7 @@ final class ConfigData implements JsonSerializable
*/
public function getProxyServer()
{
- return $this->proxyServer;
+ return $this->get('proxyServer');
}
/**
@@ -617,7 +264,7 @@ final class ConfigData implements JsonSerializable
*/
public function setProxyServer($proxyServer)
{
- $this->proxyServer = $proxyServer;
+ $this->set('proxyServer', $proxyServer);
return $this;
}
@@ -627,7 +274,7 @@ final class ConfigData implements JsonSerializable
*/
public function getProxyPort()
{
- return $this->proxyPort;
+ return $this->get('proxyPort', 8080);
}
/**
@@ -637,7 +284,7 @@ final class ConfigData implements JsonSerializable
*/
public function setProxyPort($proxyPort)
{
- $this->proxyPort = (int)$proxyPort;
+ $this->set('proxyPort', (int)$proxyPort);
return $this;
}
@@ -647,7 +294,7 @@ final class ConfigData implements JsonSerializable
*/
public function getProxyUser()
{
- return $this->proxyUser;
+ return $this->get('proxyUser');
}
/**
@@ -657,7 +304,7 @@ final class ConfigData implements JsonSerializable
*/
public function setProxyUser($proxyUser)
{
- $this->proxyUser = $proxyUser;
+ $this->set('proxyUser', $proxyUser);
return $this;
}
@@ -667,7 +314,7 @@ final class ConfigData implements JsonSerializable
*/
public function getProxyPass()
{
- return $this->proxyPass;
+ return $this->get('proxyPass');
}
/**
@@ -677,7 +324,7 @@ final class ConfigData implements JsonSerializable
*/
public function setProxyPass($proxyPass)
{
- $this->proxyPass = $proxyPass;
+ $this->set('proxyPass', $proxyPass);
return $this;
}
@@ -687,7 +334,7 @@ final class ConfigData implements JsonSerializable
*/
public function getPublinksMaxViews()
{
- return $this->publinksMaxViews;
+ return $this->get('publinksMaxViews', self::PUBLIC_LINK_MAX_VIEWS);
}
@@ -698,7 +345,7 @@ final class ConfigData implements JsonSerializable
*/
public function setPublinksMaxViews($publinksMaxViews)
{
- $this->publinksMaxViews = (int)$publinksMaxViews;
+ $this->set('publinksMaxViews', (int)$publinksMaxViews);
return $this;
}
@@ -708,7 +355,7 @@ final class ConfigData implements JsonSerializable
*/
public function getPublinksMaxTime()
{
- return $this->publinksMaxTime;
+ return $this->get('publinksMaxTime', self::PUBLIC_LINK_MAX_TIME);
}
/**
@@ -718,7 +365,7 @@ final class ConfigData implements JsonSerializable
*/
public function setPublinksMaxTime($publinksMaxTime)
{
- $this->publinksMaxTime = (int)$publinksMaxTime;
+ $this->set('publinksMaxTime', (int)$publinksMaxTime);
return $this;
}
@@ -728,7 +375,7 @@ final class ConfigData implements JsonSerializable
*/
public function isSyslogEnabled()
{
- return $this->syslogEnabled;
+ return $this->get('syslogEnabled', false);
}
/**
@@ -738,7 +385,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSyslogEnabled($syslogEnabled)
{
- $this->syslogEnabled = (bool)$syslogEnabled;
+ $this->set('syslogEnabled', (bool)$syslogEnabled);
return $this;
}
@@ -748,7 +395,7 @@ final class ConfigData implements JsonSerializable
*/
public function isSyslogRemoteEnabled()
{
- return $this->syslogRemoteEnabled;
+ return $this->get('syslogRemoteEnabled', false);
}
/**
@@ -758,7 +405,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSyslogRemoteEnabled($syslogRemoteEnabled)
{
- $this->syslogRemoteEnabled = (bool)$syslogRemoteEnabled;
+ $this->set('syslogRemoteEnabled', (bool)$syslogRemoteEnabled);
return $this;
}
@@ -768,7 +415,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSyslogServer()
{
- return $this->syslogServer;
+ return $this->get('syslogServer');
}
/**
@@ -778,7 +425,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSyslogServer($syslogServer)
{
- $this->syslogServer = $syslogServer;
+ $this->set('syslogServer', $syslogServer);
return $this;
}
@@ -788,7 +435,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSyslogPort()
{
- return $this->syslogPort;
+ return $this->get('syslogPort', self::SYSLOG_PORT);
}
/**
@@ -798,7 +445,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSyslogPort($syslogPort)
{
- $this->syslogPort = (int)$syslogPort;
+ $this->set('syslogPort', (int)$syslogPort);
return $this;
}
@@ -808,7 +455,7 @@ final class ConfigData implements JsonSerializable
*/
public function getBackupHash()
{
- return $this->backup_hash;
+ return $this->get('backup_hash');
}
/**
@@ -818,7 +465,7 @@ final class ConfigData implements JsonSerializable
*/
public function setBackupHash($backup_hash)
{
- $this->backup_hash = $backup_hash;
+ $this->set('backup_hash', $backup_hash);
return $this;
}
@@ -828,7 +475,7 @@ final class ConfigData implements JsonSerializable
*/
public function getExportHash()
{
- return $this->export_hash;
+ return $this->get('export_hash');
}
/**
@@ -838,7 +485,7 @@ final class ConfigData implements JsonSerializable
*/
public function setExportHash($export_hash)
{
- $this->export_hash = $export_hash;
+ $this->set('export_hash', $export_hash);
return $this;
}
@@ -848,7 +495,7 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapBindUser()
{
- return $this->ldapBindUser;
+ return $this->get('ldapBindUser');
}
/**
@@ -858,7 +505,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapBindUser($ldapBindUser)
{
- $this->ldapBindUser = $ldapBindUser;
+ $this->set('ldapBindUser', $ldapBindUser);
return $this;
}
@@ -868,7 +515,7 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapProxyUser()
{
- return $this->ldapProxyUser;
+ return $this->get('ldapProxyUser');
}
/**
@@ -878,7 +525,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapProxyUser($ldapProxyUser)
{
- $this->ldapProxyUser = $ldapProxyUser;
+ $this->get('ldapProxyUser', $ldapProxyUser);
return $this;
}
@@ -888,7 +535,7 @@ final class ConfigData implements JsonSerializable
*/
public function getAccountCount()
{
- return $this->accountCount;
+ return $this->get('accountCount', self::ACCOUNT_COUNT);
}
/**
@@ -898,7 +545,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAccountCount($accountCount)
{
- $this->accountCount = (int)$accountCount;
+ $this->set('accountCount', (int)$accountCount);
return $this;
}
@@ -908,7 +555,7 @@ final class ConfigData implements JsonSerializable
*/
public function isAccountLink()
{
- return $this->accountLink;
+ return $this->get('accountLink', true);
}
/**
@@ -918,7 +565,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAccountLink($accountLink)
{
- $this->accountLink = (bool)$accountLink;
+ $this->set('accountLink', (bool)$accountLink);
return $this;
}
@@ -928,7 +575,7 @@ final class ConfigData implements JsonSerializable
*/
public function isCheckUpdates()
{
- return $this->checkUpdates;
+ return $this->get('checkUpdates', false);
}
/**
@@ -938,7 +585,7 @@ final class ConfigData implements JsonSerializable
*/
public function setCheckUpdates($checkUpdates)
{
- $this->checkUpdates = (bool)$checkUpdates;
+ $this->set('checkUpdates', (bool)$checkUpdates);
return $this;
}
@@ -948,7 +595,7 @@ final class ConfigData implements JsonSerializable
*/
public function getConfigHash()
{
- return $this->configHash;
+ return $this->get('configHash');
}
/**
@@ -956,7 +603,7 @@ final class ConfigData implements JsonSerializable
*/
public function setConfigHash()
{
- $this->configHash = sha1(serialize($this));
+ $this->set('configHash', sha1(serialize($this->attributes)));
return $this;
}
@@ -966,7 +613,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDbHost()
{
- return $this->dbHost;
+ return $this->get('dbHost');
}
/**
@@ -976,7 +623,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDbHost($dbHost)
{
- $this->dbHost = $dbHost;
+ $this->set('dbHost', $dbHost);
return $this;
}
@@ -986,7 +633,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDbName()
{
- return $this->dbName;
+ return $this->get('dbName');
}
/**
@@ -996,7 +643,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDbName($dbName)
{
- $this->dbName = $dbName;
+ $this->set('dbName', $dbName);
return $this;
}
@@ -1006,7 +653,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDbPass()
{
- return $this->dbPass;
+ return $this->get('dbPass');
}
/**
@@ -1016,7 +663,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDbPass($dbPass)
{
- $this->dbPass = $dbPass;
+ $this->set('dbPass', $dbPass);
return $this;
}
@@ -1026,7 +673,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDbUser()
{
- return $this->dbUser;
+ return $this->get('dbUser');
}
/**
@@ -1036,7 +683,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDbUser($dbUser)
{
- $this->dbUser = $dbUser;
+ $this->set('dbUser', $dbUser);
return $this;
}
@@ -1046,7 +693,7 @@ final class ConfigData implements JsonSerializable
*/
public function isDebug()
{
- return $this->debug;
+ return $this->get('debug', false);
}
/**
@@ -1056,7 +703,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDebug($debug)
{
- $this->debug = (bool)$debug;
+ $this->set('debug', (bool)$debug);
return $this;
}
@@ -1066,7 +713,7 @@ final class ConfigData implements JsonSerializable
*/
public function isDemoEnabled()
{
- return $this->demoEnabled;
+ return $this->get('demoEnabled', false);
}
/**
@@ -1076,7 +723,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDemoEnabled($demoEnabled)
{
- $this->demoEnabled = (bool)$demoEnabled;
+ $this->set('demoEnabled', (bool)$demoEnabled);
return $this;
}
@@ -1084,9 +731,9 @@ final class ConfigData implements JsonSerializable
/**
* @return array
*/
- public function getFilesAllowedExts()
+ public function getFilesAllowedExts(): array
{
- return (array)$this->filesAllowedExts;
+ return $this->get('filesAllowedExts', []);
}
/**
@@ -1094,7 +741,7 @@ final class ConfigData implements JsonSerializable
*/
public function getFilesAllowedSize()
{
- return $this->filesAllowedSize;
+ return $this->get('filesAllowedSize', self::FILES_ALLOWED_SIZE);
}
/**
@@ -1104,7 +751,7 @@ final class ConfigData implements JsonSerializable
*/
public function setFilesAllowedSize($filesAllowedSize)
{
- $this->filesAllowedSize = (int)$filesAllowedSize;
+ $this->set('filesAllowedSize', (int)$filesAllowedSize);
return $this;
}
@@ -1114,7 +761,7 @@ final class ConfigData implements JsonSerializable
*/
public function isFilesEnabled()
{
- return $this->filesEnabled;
+ return $this->get('filesEnabled', true);
}
/**
@@ -1124,7 +771,7 @@ final class ConfigData implements JsonSerializable
*/
public function setFilesEnabled($filesEnabled)
{
- $this->filesEnabled = (bool)$filesEnabled;
+ $this->set('filesEnabled', (bool)$filesEnabled);
return $this;
}
@@ -1134,7 +781,7 @@ final class ConfigData implements JsonSerializable
*/
public function isGlobalSearch()
{
- return $this->globalSearch;
+ return $this->get('globalSearch', true);
}
/**
@@ -1144,7 +791,7 @@ final class ConfigData implements JsonSerializable
*/
public function setGlobalSearch($globalSearch)
{
- $this->globalSearch = (bool)$globalSearch;
+ $this->set('globalSearch', (bool)$globalSearch);
return $this;
}
@@ -1154,7 +801,7 @@ final class ConfigData implements JsonSerializable
*/
public function isInstalled()
{
- return $this->installed;
+ return $this->get('installed', false);
}
/**
@@ -1164,7 +811,7 @@ final class ConfigData implements JsonSerializable
*/
public function setInstalled($installed)
{
- $this->installed = (bool)$installed;
+ $this->set('installed', (bool)$installed);
return $this;
}
@@ -1174,7 +821,7 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapBase()
{
- return $this->ldapBase;
+ return $this->get('ldapBase');
}
/**
@@ -1184,7 +831,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapBase($ldapBase)
{
- $this->ldapBase = $ldapBase;
+ $this->set('ldapBase', $ldapBase);
return $this;
}
@@ -1194,7 +841,7 @@ final class ConfigData implements JsonSerializable
*/
public function isLdapEnabled()
{
- return $this->ldapEnabled;
+ return $this->get('ldapEnabled', false);
}
/**
@@ -1204,7 +851,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapEnabled($ldapEnabled)
{
- $this->ldapEnabled = (bool)$ldapEnabled;
+ $this->set('ldapEnabled', (bool)$ldapEnabled);
return $this;
}
@@ -1214,7 +861,7 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapGroup()
{
- return $this->ldapGroup;
+ return $this->get('ldapGroup');
}
/**
@@ -1224,7 +871,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapGroup($ldapGroup)
{
- $this->ldapGroup = $ldapGroup;
+ $this->set('ldapGroup', $ldapGroup);
return $this;
}
@@ -1234,7 +881,7 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapServer()
{
- return $this->ldapServer;
+ return $this->get('ldapServer');
}
/**
@@ -1244,7 +891,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapServer($ldapServer)
{
- $this->ldapServer = $ldapServer;
+ $this->set('ldapServer', $ldapServer);
return $this;
}
@@ -1254,7 +901,7 @@ final class ConfigData implements JsonSerializable
*/
public function isLogEnabled()
{
- return $this->logEnabled;
+ return $this->get('logEnabled', true);
}
/**
@@ -1264,7 +911,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLogEnabled($logEnabled)
{
- $this->logEnabled = (bool)$logEnabled;
+ $this->set('logEnabled', (bool)$logEnabled);
return $this;
}
@@ -1274,7 +921,7 @@ final class ConfigData implements JsonSerializable
*/
public function isMailAuthenabled()
{
- return $this->mailAuthenabled;
+ return $this->get('mailAuthenabled', false);
}
/**
@@ -1284,7 +931,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailAuthenabled($mailAuthenabled)
{
- $this->mailAuthenabled = (bool)$mailAuthenabled;
+ $this->set('mailAuthenabled', (bool)$mailAuthenabled);
return $this;
}
@@ -1294,7 +941,7 @@ final class ConfigData implements JsonSerializable
*/
public function isMailEnabled()
{
- return $this->mailEnabled;
+ return $this->get('mailEnabled', false);
}
/**
@@ -1304,7 +951,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailEnabled($mailEnabled)
{
- $this->mailEnabled = (bool)$mailEnabled;
+ $this->set('mailEnabled', (bool)$mailEnabled);
return $this;
}
@@ -1314,7 +961,7 @@ final class ConfigData implements JsonSerializable
*/
public function getMailFrom()
{
- return $this->mailFrom;
+ return $this->get('mailFrom');
}
/**
@@ -1324,7 +971,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailFrom($mailFrom)
{
- $this->mailFrom = $mailFrom;
+ $this->set('mailFrom', $mailFrom);
return $this;
}
@@ -1334,7 +981,7 @@ final class ConfigData implements JsonSerializable
*/
public function getMailPass()
{
- return $this->mailPass;
+ return $this->get('mailPass');
}
/**
@@ -1344,7 +991,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailPass($mailPass)
{
- $this->mailPass = $mailPass;
+ $this->set('mailPass', $mailPass);
return $this;
}
@@ -1354,7 +1001,7 @@ final class ConfigData implements JsonSerializable
*/
public function getMailPort()
{
- return $this->mailPort;
+ return $this->get('mailPort', self::MAIL_PORT);
}
/**
@@ -1364,7 +1011,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailPort($mailPort)
{
- $this->mailPort = (int)$mailPort;
+ $this->set('mailPort', (int)$mailPort);
return $this;
}
@@ -1374,7 +1021,7 @@ final class ConfigData implements JsonSerializable
*/
public function isMailRequestsEnabled()
{
- return $this->mailRequestsEnabled;
+ return $this->get('mailRequestsEnabled', false);
}
/**
@@ -1384,7 +1031,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailRequestsEnabled($mailRequestsEnabled)
{
- $this->mailRequestsEnabled = (bool)$mailRequestsEnabled;
+ $this->set('mailRequestsEnabled', (bool)$mailRequestsEnabled);
return $this;
}
@@ -1394,7 +1041,7 @@ final class ConfigData implements JsonSerializable
*/
public function getMailSecurity()
{
- return $this->mailSecurity;
+ return $this->get('mailSecurity');
}
/**
@@ -1404,7 +1051,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailSecurity($mailSecurity)
{
- $this->mailSecurity = $mailSecurity;
+ $this->set('mailSecurity', $mailSecurity);
return $this;
}
@@ -1414,7 +1061,7 @@ final class ConfigData implements JsonSerializable
*/
public function getMailServer()
{
- return $this->mailServer;
+ return $this->get('mailServer');
}
/**
@@ -1424,7 +1071,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailServer($mailServer)
{
- $this->mailServer = $mailServer;
+ $this->set('mailServer', $mailServer);
return $this;
}
@@ -1434,7 +1081,7 @@ final class ConfigData implements JsonSerializable
*/
public function getMailUser()
{
- return $this->mailUser;
+ return $this->get('mailUser');
}
/**
@@ -1444,7 +1091,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMailUser($mailUser)
{
- $this->mailUser = $mailUser;
+ $this->set('mailUser', $mailUser);
return $this;
}
@@ -1454,7 +1101,7 @@ final class ConfigData implements JsonSerializable
*/
public function isMaintenance()
{
- return (bool)$this->maintenance;
+ return $this->get('maintenance', false);
}
/**
@@ -1464,7 +1111,7 @@ final class ConfigData implements JsonSerializable
*/
public function setMaintenance($maintenance)
{
- $this->maintenance = (bool)$maintenance;
+ $this->set('maintenance', (bool)$maintenance);
return $this;
}
@@ -1474,7 +1121,7 @@ final class ConfigData implements JsonSerializable
*/
public function getPasswordSalt()
{
- return $this->passwordSalt;
+ return $this->get('passwordSalt');
}
/**
@@ -1484,7 +1131,7 @@ final class ConfigData implements JsonSerializable
*/
public function setPasswordSalt($passwordSalt)
{
- $this->passwordSalt = $passwordSalt;
+ $this->set('passwordSalt', $passwordSalt);
return $this;
}
@@ -1494,7 +1141,7 @@ final class ConfigData implements JsonSerializable
*/
public function isResultsAsCards()
{
- return $this->resultsAsCards;
+ return $this->get('resultsAsCards', false);
}
/**
@@ -1504,7 +1151,7 @@ final class ConfigData implements JsonSerializable
*/
public function setResultsAsCards($resultsAsCards)
{
- $this->resultsAsCards = (bool)$resultsAsCards;
+ $this->set('resultsAsCards', (bool)$resultsAsCards);
return $this;
}
@@ -1514,7 +1161,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSessionTimeout()
{
- return $this->sessionTimeout;
+ return $this->get('sessionTimeout', self::SESSION_TIMEOUT);
}
/**
@@ -1524,7 +1171,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSessionTimeout($sessionTimeout)
{
- $this->sessionTimeout = (int)$sessionTimeout;
+ $this->set('sessionTimeout', (int)$sessionTimeout);
return $this;
}
@@ -1534,7 +1181,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSiteLang()
{
- return $this->siteLang;
+ return $this->get('siteLang');
}
/**
@@ -1544,7 +1191,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSiteLang($siteLang)
{
- $this->siteLang = $siteLang;
+ $this->set('siteLang', $siteLang);
return $this;
}
@@ -1554,7 +1201,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSiteTheme()
{
- return $this->siteTheme;
+ return $this->get('siteTheme', self::SITE_THEME);
}
/**
@@ -1564,17 +1211,17 @@ final class ConfigData implements JsonSerializable
*/
public function setSiteTheme($siteTheme)
{
- $this->siteTheme = $siteTheme;
+ $this->set('siteTheme', $siteTheme);
return $this;
}
/**
- * @return int
+ * @return string
*/
public function getConfigVersion()
{
- return (string)$this->configVersion;
+ return (string)$this->get('configVersion');
}
/**
@@ -1584,7 +1231,7 @@ final class ConfigData implements JsonSerializable
*/
public function setConfigVersion($configVersion)
{
- $this->configVersion = $configVersion;
+ $this->set('configVersion', $configVersion);
return $this;
}
@@ -1594,7 +1241,7 @@ final class ConfigData implements JsonSerializable
*/
public function isWikiEnabled()
{
- return $this->wikiEnabled;
+ return $this->get('wikiEnabled', false);
}
/**
@@ -1604,7 +1251,7 @@ final class ConfigData implements JsonSerializable
*/
public function setWikiEnabled($wikiEnabled)
{
- $this->wikiEnabled = (bool)$wikiEnabled;
+ $this->set('wikiEnabled', (bool)$wikiEnabled);
return $this;
}
@@ -1614,7 +1261,7 @@ final class ConfigData implements JsonSerializable
*/
public function getWikiFilter()
{
- return is_array($this->wikiFilter) ? $this->wikiFilter : [];
+ return $this->get('wikiFilter', []);
}
/**
@@ -1624,7 +1271,7 @@ final class ConfigData implements JsonSerializable
*/
public function setWikiFilter($wikiFilter)
{
- $this->wikiFilter = $wikiFilter;
+ $this->set('wikiFilter', $wikiFilter ?: []);
return $this;
}
@@ -1634,7 +1281,7 @@ final class ConfigData implements JsonSerializable
*/
public function getWikiPageurl()
{
- return $this->wikiPageurl;
+ return $this->get('wikiPageurl');
}
/**
@@ -1644,7 +1291,7 @@ final class ConfigData implements JsonSerializable
*/
public function setWikiPageurl($wikiPageurl)
{
- $this->wikiPageurl = $wikiPageurl;
+ $this->set('wikiPageurl', $wikiPageurl);
return $this;
}
@@ -1654,7 +1301,7 @@ final class ConfigData implements JsonSerializable
*/
public function getWikiSearchurl()
{
- return $this->wikiSearchurl;
+ return $this->get('wikiSearchurl');
}
/**
@@ -1664,27 +1311,7 @@ final class ConfigData implements JsonSerializable
*/
public function setWikiSearchurl($wikiSearchurl)
{
- $this->wikiSearchurl = $wikiSearchurl;
-
- return $this;
- }
-
- /**
- * @return boolean
- */
- public function isLdapAds()
- {
- return $this->ldapAds;
- }
-
- /**
- * @param boolean $ldapAds
- *
- * @return $this
- */
- public function setLdapAds($ldapAds)
- {
- $this->ldapAds = (bool)$ldapAds;
+ $this->set('wikiSearchurl', $wikiSearchurl);
return $this;
}
@@ -1694,7 +1321,7 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapBindPass()
{
- return $this->ldapBindPass;
+ return $this->get('ldapBindPass');
}
/**
@@ -1704,7 +1331,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapBindPass($ldapBindPass)
{
- $this->ldapBindPass = $ldapBindPass;
+ $this->set('ldapBindPass', $ldapBindPass);
return $this;
}
@@ -1714,7 +1341,7 @@ final class ConfigData implements JsonSerializable
*/
public function isPublinksImageEnabled()
{
- return $this->publinksImageEnabled;
+ return $this->get('publinksImageEnabled', false);
}
/**
@@ -1724,7 +1351,7 @@ final class ConfigData implements JsonSerializable
*/
public function setPublinksImageEnabled($publinksImageEnabled)
{
- $this->publinksImageEnabled = (bool)$publinksImageEnabled;
+ $this->set('publinksImageEnabled', (bool)$publinksImageEnabled);
return $this;
}
@@ -1734,7 +1361,7 @@ final class ConfigData implements JsonSerializable
*/
public function isHttpsEnabled()
{
- return $this->httpsEnabled;
+ return $this->get('httpsEnabled', false);
}
/**
@@ -1744,7 +1371,7 @@ final class ConfigData implements JsonSerializable
*/
public function setHttpsEnabled($httpsEnabled)
{
- $this->httpsEnabled = (bool)$httpsEnabled;
+ $this->set('httpsEnabled', (bool)$httpsEnabled);
return $this;
}
@@ -1754,7 +1381,7 @@ final class ConfigData implements JsonSerializable
*/
public function isChecknotices()
{
- return $this->checknotices;
+ return $this->get('checkNotices', false);
}
/**
@@ -1762,9 +1389,9 @@ final class ConfigData implements JsonSerializable
*
* @return $this
*/
- public function setChecknotices($checknotices)
+ public function setCheckNotices($checknotices)
{
- $this->checknotices = $checknotices;
+ $this->set('checkNotices', $checknotices);
return $this;
}
@@ -1774,7 +1401,7 @@ final class ConfigData implements JsonSerializable
*/
public function isAccountPassToImage()
{
- return $this->accountPassToImage;
+ return $this->get('accountPassToImage', false);
}
/**
@@ -1784,7 +1411,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAccountPassToImage($accountPassToImage)
{
- $this->accountPassToImage = (bool)$accountPassToImage;
+ $this->set('accountPassToImage', (bool)$accountPassToImage);
return $this;
}
@@ -1794,7 +1421,7 @@ final class ConfigData implements JsonSerializable
*/
public function getUpgradeKey()
{
- return $this->upgradeKey;
+ return $this->get('upgradeKey');
}
/**
@@ -1804,7 +1431,7 @@ final class ConfigData implements JsonSerializable
*/
public function setUpgradeKey($upgradeKey)
{
- $this->upgradeKey = $upgradeKey;
+ $this->set('upgradeKey', $upgradeKey);
return $this;
}
@@ -1814,7 +1441,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDbPort()
{
- return $this->dbPort;
+ return $this->get('dbPort', self::DB_PORT);
}
/**
@@ -1824,7 +1451,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDbPort($dbPort)
{
- $this->dbPort = (int)$dbPort;
+ $this->set('dbPort', (int)$dbPort);
return $this;
}
@@ -1834,7 +1461,7 @@ final class ConfigData implements JsonSerializable
*/
public function isPublinksEnabled()
{
- return $this->publinksEnabled;
+ return $this->get('publinksEnabled', false);
}
/**
@@ -1844,7 +1471,7 @@ final class ConfigData implements JsonSerializable
*/
public function setPublinksEnabled($publinksEnabled)
{
- $this->publinksEnabled = (bool)$publinksEnabled;
+ $this->set('publinksEnabled', (bool)$publinksEnabled);
return $this;
}
@@ -1859,7 +1486,7 @@ final class ConfigData implements JsonSerializable
*/
public function jsonSerialize()
{
- return get_object_vars($this);
+ return $this->attributes;
}
/**
@@ -1867,7 +1494,7 @@ final class ConfigData implements JsonSerializable
*/
public function getConfigSaver()
{
- return $this->configSaver;
+ return $this->get('configSaver');
}
/**
@@ -1877,7 +1504,7 @@ final class ConfigData implements JsonSerializable
*/
public function setConfigSaver($configSaver)
{
- $this->configSaver = $configSaver;
+ $this->set('configSaver', $configSaver);
return $this;
}
@@ -1887,7 +1514,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDbSocket()
{
- return $this->dbSocket;
+ return $this->get('dbSocket');
}
/**
@@ -1895,7 +1522,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDbSocket($dbSocket)
{
- $this->dbSocket = $dbSocket;
+ $this->set('dbSocket', $dbSocket);
}
/**
@@ -1903,7 +1530,7 @@ final class ConfigData implements JsonSerializable
*/
public function isEncryptSession()
{
- return (bool)$this->encryptSession;
+ return (bool)$this->get('encryptSession', false);
}
/**
@@ -1913,7 +1540,7 @@ final class ConfigData implements JsonSerializable
*/
public function setEncryptSession($encryptSession)
{
- $this->encryptSession = (bool)$encryptSession;
+ $this->set('encryptSession', (bool)$encryptSession);
return $this;
}
@@ -1923,7 +1550,7 @@ final class ConfigData implements JsonSerializable
*/
public function isAccountFullGroupAccess()
{
- return (bool)$this->accountFullGroupAccess;
+ return (bool)$this->get('accountFullGroupAccess', false);
}
/**
@@ -1933,7 +1560,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAccountFullGroupAccess($accountFullGroupAccess)
{
- $this->accountFullGroupAccess = (bool)$accountFullGroupAccess;
+ $this->set('accountFullGroupAccess', (bool)$accountFullGroupAccess);
return $this;
}
@@ -1943,7 +1570,7 @@ final class ConfigData implements JsonSerializable
*/
public function isAuthBasicEnabled()
{
- return (bool)$this->authBasicEnabled;
+ return (bool)$this->get('authBasicEnabled', true);
}
/**
@@ -1951,7 +1578,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAuthBasicEnabled($authBasicEnabled)
{
- $this->authBasicEnabled = $authBasicEnabled;
+ $this->set('authBasicEnabled', $authBasicEnabled);
}
/**
@@ -1959,7 +1586,7 @@ final class ConfigData implements JsonSerializable
*/
public function getAuthBasicDomain()
{
- return $this->authBasicDomain;
+ return $this->get('authBasicDomain');
}
/**
@@ -1967,7 +1594,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAuthBasicDomain($authBasicDomain)
{
- $this->authBasicDomain = $authBasicDomain;
+ $this->set('authBasicDomain', $authBasicDomain);
}
/**
@@ -1975,7 +1602,7 @@ final class ConfigData implements JsonSerializable
*/
public function isAuthBasicAutoLoginEnabled()
{
- return (bool)$this->authBasicAutoLoginEnabled;
+ return (bool)$this->get('authBasicAutoLoginEnabled', true);
}
/**
@@ -1983,7 +1610,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAuthBasicAutoLoginEnabled($authBasicAutoLoginEnabled)
{
- $this->authBasicAutoLoginEnabled = $authBasicAutoLoginEnabled;
+ $this->set('authBasicAutoLoginEnabled', $authBasicAutoLoginEnabled);
}
/**
@@ -1991,7 +1618,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSsoDefaultGroup()
{
- return $this->ssoDefaultGroup;
+ return $this->get('ssoDefaultGroup');
}
/**
@@ -1999,7 +1626,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSsoDefaultGroup($ssoDefaultGroup)
{
- $this->ssoDefaultGroup = $ssoDefaultGroup;
+ $this->set('ssoDefaultGroup', $ssoDefaultGroup);
}
/**
@@ -2007,7 +1634,7 @@ final class ConfigData implements JsonSerializable
*/
public function getSsoDefaultProfile()
{
- return $this->ssoDefaultProfile;
+ return $this->get('ssoDefaultProfile');
}
/**
@@ -2015,7 +1642,7 @@ final class ConfigData implements JsonSerializable
*/
public function setSsoDefaultProfile($ssoDefaultProfile)
{
- $this->ssoDefaultProfile = $ssoDefaultProfile;
+ $this->set('ssoDefaultProfile', $ssoDefaultProfile);
}
/**
@@ -2023,15 +1650,15 @@ final class ConfigData implements JsonSerializable
*/
public function getMailRecipients()
{
- return (array)$this->mailRecipients;
+ return $this->get('mailRecipients', []);
}
/**
* @param array $mailRecipients
*/
- public function setMailRecipients(array $mailRecipients)
+ public function setMailRecipients($mailRecipients)
{
- $this->mailRecipients = $mailRecipients;
+ $this->set('mailRecipients', $mailRecipients ?: []);
}
/**
@@ -2039,15 +1666,15 @@ final class ConfigData implements JsonSerializable
*/
public function getMailEvents()
{
- return is_array($this->mailEvents) ? $this->mailEvents : [];
+ return $this->get('mailEvents', []);
}
/**
* @param array $mailEvents
*/
- public function setMailEvents(array $mailEvents)
+ public function setMailEvents($mailEvents)
{
- $this->mailEvents = $mailEvents;
+ $this->set('mailEvents', $mailEvents ?: []);
}
/**
@@ -2055,7 +1682,7 @@ final class ConfigData implements JsonSerializable
*/
public function getDatabaseVersion()
{
- return (string)$this->databaseVersion;
+ return (string)$this->get('databaseVersion');
}
/**
@@ -2065,7 +1692,7 @@ final class ConfigData implements JsonSerializable
*/
public function setDatabaseVersion($databaseVersion)
{
- $this->databaseVersion = $databaseVersion;
+ $this->set('databaseVersion', $databaseVersion);
return $this;
}
@@ -2075,7 +1702,7 @@ final class ConfigData implements JsonSerializable
*/
public function getConfigDate()
{
- return $this->configDate;
+ return (int)$this->get('configDate');
}
/**
@@ -2085,7 +1712,7 @@ final class ConfigData implements JsonSerializable
*/
public function setConfigDate($configDate)
{
- $this->configDate = (int)$configDate;
+ $this->set('configDate', (int)$configDate);
return $this;
}
@@ -2095,7 +1722,7 @@ final class ConfigData implements JsonSerializable
*/
public function isAccountExpireEnabled()
{
- return (int)$this->accountExpireEnabled;
+ return (bool)$this->get('accountExpireEnabled', false);
}
/**
@@ -2105,7 +1732,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAccountExpireEnabled($accountExpireEnabled)
{
- $this->accountExpireEnabled = $accountExpireEnabled;
+ $this->set('accountExpireEnabled', $accountExpireEnabled);
return $this;
}
@@ -2115,7 +1742,7 @@ final class ConfigData implements JsonSerializable
*/
public function getAccountExpireTime()
{
- return $this->accountExpireTime;
+ return $this->get('accountExpireTime', self::ACCOUNT_EXPIRE_TIME);
}
/**
@@ -2125,7 +1752,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAccountExpireTime($accountExpireTime)
{
- $this->accountExpireTime = (int)$accountExpireTime;
+ $this->set('accountExpireTime', (int)$accountExpireTime);
return $this;
}
@@ -2135,7 +1762,7 @@ final class ConfigData implements JsonSerializable
*/
public function isLdapTlsEnabled(): bool
{
- return (bool)$this->ldapTlsEnabled;
+ return $this->get('ldapTlsEnabled', false);
}
/**
@@ -2143,7 +1770,7 @@ final class ConfigData implements JsonSerializable
*/
public function setLdapTlsEnabled(bool $ldapTlsEnabled)
{
- $this->ldapTlsEnabled = (int)$ldapTlsEnabled;
+ $this->set('ldapTlsEnabled', (int)$ldapTlsEnabled);
}
/**
@@ -2151,15 +1778,15 @@ final class ConfigData implements JsonSerializable
*/
public function getFilesAllowedMime(): array
{
- return (array)$this->filesAllowedMime;
+ return $this->get('filesAllowedMime', []);
}
/**
* @param array $filesAllowedMime
*/
- public function setFilesAllowedMime(array $filesAllowedMime)
+ public function setFilesAllowedMime($filesAllowedMime)
{
- $this->filesAllowedMime = $filesAllowedMime;
+ $this->set('filesAllowedMime', $filesAllowedMime ?: []);
}
/**
@@ -2167,15 +1794,15 @@ final class ConfigData implements JsonSerializable
*/
public function getLdapType()
{
- return (int)$this->ldapType;
+ return (int)$this->get('ldapType');
}
/**
* @param int $ldapType
*/
- public function setLdapType(int $ldapType)
+ public function setLdapType($ldapType)
{
- $this->ldapType = $ldapType;
+ $this->set('ldapType', (int)$ldapType);
}
/**
@@ -2183,7 +1810,7 @@ final class ConfigData implements JsonSerializable
*/
public function getAppVersion()
{
- return $this->appVersion;
+ return $this->get('appVersion');
}
/**
@@ -2191,7 +1818,7 @@ final class ConfigData implements JsonSerializable
*/
public function setAppVersion(string $appVersion)
{
- $this->appVersion = $appVersion;
+ $this->set('appVersion', $appVersion);
}
/**
@@ -2199,7 +1826,7 @@ final class ConfigData implements JsonSerializable
*/
public function getApplicationUrl()
{
- return $this->applicationUrl;
+ return $this->get('applicationUrl');
}
/**
@@ -2207,6 +1834,71 @@ final class ConfigData implements JsonSerializable
*/
public function setApplicationUrl(string $applicationUrl = null)
{
- $this->applicationUrl = $applicationUrl ? rtrim($applicationUrl, '/') : null;
+ $this->set('applicationUrl', $applicationUrl ? rtrim($applicationUrl, '/') : null);
}
+
+ /**
+ * @return string
+ */
+ public function getLdapFilterUserObject()
+ {
+ return $this->get('ldapFilterUserObject');
+ }
+
+ /**
+ * @param string $filter
+ */
+ public function setLdapFilterUserObject($filter)
+ {
+ $this->set('ldapFilterUserObject', $filter);
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapFilterGroupObject()
+ {
+ return $this->get('ldapFilterGroupObject');
+ }
+
+ /**
+ * @param string $filter
+ */
+ public function setLdapFilterGroupObject($filter)
+ {
+ $this->set('ldapFilterGroupObject', $filter);
+ }
+
+ /**
+ * @return array|null
+ */
+ public function getLdapFilterUserAttributes()
+ {
+ return $this->get('ldapFilterUserAttributes');
+ }
+
+ /**
+ * @param array $attributes
+ */
+ public function setLdapFilterUserAttributes($attributes)
+ {
+ $this->set('ldapFilterUserAttributes', $attributes ?: []);
+ }
+
+ /**
+ * @return array|null
+ */
+ public function getLdapFilterGroupAttributes()
+ {
+ return $this->get('ldapFilterGroupAttributes');
+ }
+
+ /**
+ * @param array $attributes
+ */
+ public function setLdapFilterGroupAttributes($attributes)
+ {
+ $this->set('ldapFilterGroupAttributes', $attributes ?: []);
+ }
+
}
diff --git a/lib/SP/Providers/Auth/AuthProvider.php b/lib/SP/Providers/Auth/AuthProvider.php
index d2d0b56b..21603772 100644
--- a/lib/SP/Providers/Auth/AuthProvider.php
+++ b/lib/SP/Providers/Auth/AuthProvider.php
@@ -108,7 +108,6 @@ final class AuthProvider extends Provider
* Autentificación de usuarios con LDAP.
*
* @return bool|LdapAuthData
- * @throws AuthException
* @throws LdapException
*/
public function authLdap()
@@ -138,14 +137,18 @@ final class AuthProvider extends Provider
{
$data = LdapParams::getServerAndPort($this->configData->getLdapServer());
- $ldapParams = (new LdapParams())
- ->setServer($data['server'])
- ->setPort(isset($data['port']) ? $data['port'] : 389)
- ->setSearchBase($this->configData->getLdapBase())
- ->setGroup($this->configData->getLdapGroup())
- ->setBindDn($this->configData->getLdapBindUser())
- ->setBindPass($this->configData->getLdapBindPass())
- ->setType($this->configData->getLdapType());
+ $ldapParams = new LdapParams();
+ $ldapParams->setServer($data['server']);
+ $ldapParams->setPort(isset($data['port']) ? $data['port'] : 389);
+ $ldapParams->setSearchBase($this->configData->getLdapBase());
+ $ldapParams->setGroup($this->configData->getLdapGroup());
+ $ldapParams->setBindDn($this->configData->getLdapBindUser());
+ $ldapParams->setBindPass($this->configData->getLdapBindPass());
+ $ldapParams->setType($this->configData->getLdapType());
+ $ldapParams->setFilterUserObject($this->configData->getLdapFilterUserObject());
+ $ldapParams->setFilterGroupObject($this->configData->getLdapFilterGroupObject());
+ $ldapParams->setFilterUserAttributes($this->configData->getLdapFilterUserAttributes());
+ $ldapParams->setFilterGroupAttributes($this->configData->getLdapFilterGroupAttributes());
return new LdapAuth(
Ldap::factory(
diff --git a/lib/SP/Providers/Auth/Ldap/Ldap.php b/lib/SP/Providers/Auth/Ldap/Ldap.php
index ebdd2a9c..688c85b3 100644
--- a/lib/SP/Providers/Auth/Ldap/Ldap.php
+++ b/lib/SP/Providers/Auth/Ldap/Ldap.php
@@ -102,9 +102,6 @@ abstract class Ldap implements LdapInterface
case LdapTypeInterface::LDAP_ADS:
return new LdapMsAds($ldapConnection, $eventDispatcher);
break;
- case LdapTypeInterface::LDAP_AZURE;
- return new LdapMsAzureAd($ldapConnection, $eventDispatcher);
- break;
}
throw new LdapException(__u('LDAP type not set'));
diff --git a/lib/SP/Providers/Auth/Ldap/LdapInterface.php b/lib/SP/Providers/Auth/Ldap/LdapInterface.php
index 372c3645..1920d815 100644
--- a/lib/SP/Providers/Auth/Ldap/LdapInterface.php
+++ b/lib/SP/Providers/Auth/Ldap/LdapInterface.php
@@ -44,11 +44,20 @@ interface LdapInterface
public function getUserDnFilter(string $userLogin): string;
/**
- * Devolver el filtro para comprobar la pertenecia al grupo
+ * Return the filter to check the group membership from user's attributes
*
* @return string
*/
- public function getGroupMembershipFilter(): string;
+ public function getGroupMembershipIndirectFilter(): string;
+
+ /**
+ * Return the filter to check the group membership from group's attributes
+ *
+ * @param string $userDn
+ *
+ * @return string
+ */
+ public function getGroupMembershipDirectFilter(string $userDn = null): string;
/**
* Buscar al usuario en un grupo.
diff --git a/lib/SP/Providers/Auth/Ldap/LdapMsAds.php b/lib/SP/Providers/Auth/Ldap/LdapMsAds.php
index 2778055e..31273805 100644
--- a/lib/SP/Providers/Auth/Ldap/LdapMsAds.php
+++ b/lib/SP/Providers/Auth/Ldap/LdapMsAds.php
@@ -38,66 +38,82 @@ use SP\Http\Address;
*/
final class LdapMsAds extends Ldap
{
- const FILTER_USER_OBJECT = '(&(!(UserAccountControl:1.2.840.113556.1.4.804:=34))(|(objectCategory=person)(objectClass=user)))';
- const FILTER_GROUP_OBJECT = '(objectCategory=group)';
- const FILTER_USER_ATTRIBUTES = ['samaccountname', 'cn', 'uid', 'userPrincipalName'];
- const FILTER_GROUP_ATTRIBUTES = ['memberOf', 'groupMembership', 'memberof:1.2.840.113556.1.4.1941:'];
+ const DEFAULT_FILTER_USER_OBJECT = '(&(!(UserAccountControl:1.2.840.113556.1.4.804:=34))(|(objectCategory=person)(objectClass=user)))';
+ const DEFAULT_FILTER_GROUP_OBJECT = '(objectCategory=group)';
+ const DEFAULT_FILTER_USER_ATTRIBUTES = ['samaccountname', 'cn', 'uid', 'userPrincipalName'];
+ const DEFAULT_FILTER_GROUP_ATTRIBUTES = ['memberOf', 'groupMembership', 'memberof:1.2.840.113556.1.4.1941:'];
/**
- * Devolver el filtro para comprobar la pertenecia al grupo
- *
- * @return string
+ * @inheritDoc
* @throws SPException
*/
- public function getGroupMembershipFilter(): string
+ public function getGroupMembershipIndirectFilter(): string
{
+ $filter = $this->getUserObjectFilter();
+
if (empty($this->ldapParams->getGroup())) {
- return self::FILTER_USER_OBJECT;
+ return $filter;
+ }
+
+ if (empty($this->ldapParams->getFilterGroupAttributes())) {
+ $attributes = self::DEFAULT_FILTER_GROUP_ATTRIBUTES;
+ } else {
+ $attributes = $this->ldapParams->getFilterGroupAttributes();
}
return '(&(|'
. LdapUtil::getAttributesForFilter(
- self::FILTER_GROUP_ATTRIBUTES,
+ $attributes,
$this->getGroupDn())
. ')'
- . self::FILTER_USER_OBJECT
+ . $filter
. ')';
}
/**
- * Obtener el filtro para buscar el usuario
- *
- * @param string $userLogin
- *
* @return string
*/
+ private function getUserObjectFilter()
+ {
+ if (empty($this->ldapParams->getFilterUserObject())) {
+ return self::DEFAULT_FILTER_USER_OBJECT;
+ }
+
+ return $this->ldapParams->getFilterUserObject();
+ }
+
+ /**
+ * O@inheritDoc
+ */
public function getUserDnFilter(string $userLogin): string
{
+ if (empty($this->ldapParams->getFilterUserAttributes())) {
+ $attributes = self::DEFAULT_FILTER_USER_ATTRIBUTES;
+ } else {
+ $attributes = $this->ldapParams->getFilterUserAttributes();
+ }
+
return '(&(|'
- . LdapUtil::getAttributesForFilter(self::FILTER_USER_ATTRIBUTES, $userLogin)
+ . LdapUtil::getAttributesForFilter($attributes, $userLogin)
. ')'
- . self::FILTER_USER_OBJECT
+ . $this->getUserObjectFilter()
. ')';
}
/**
- * Devolver el filtro para objetos del tipo grupo
- *
- * @return string
+ * @inheritDoc
*/
public function getGroupObjectFilter(): string
{
- return self::FILTER_GROUP_OBJECT;
+ if (empty($this->ldapParams->getFilterGroupObject())) {
+ return self::DEFAULT_FILTER_GROUP_OBJECT;
+ }
+
+ return $this->ldapParams->getFilterGroupObject();
}
/**
- * Buscar al usuario en un grupo.
- *
- * @param string $userDn
- * @param string $userLogin
- * @param array $groupsDn
- *
- * @return bool
+ * @inheritDoc
* @throws LdapException
*/
public function isUserInGroup(string $userDn, string $userLogin, array $groupsDn): bool
@@ -130,9 +146,7 @@ final class LdapMsAds extends Ldap
private function checkUserInGroupByFilter(string $userLogin, string $userDn): bool
{
$groupDn = $this->getGroupDn();
- $filter = '(|'
- . LdapUtil::getAttributesForFilter(self::FILTER_GROUP_ATTRIBUTES, $groupDn)
- . ')';
+ $filter = $this->getGroupMembershipDirectFilter();
$searchResults = $this->ldapActions->getObjects($filter, ['dn'], $userDn);
@@ -159,9 +173,24 @@ final class LdapMsAds extends Ldap
}
/**
- * Obtener el servidor de LDAP a utilizar
- *
- * @return mixed
+ * @inheritDoc
+ * @throws LdapException
+ */
+ public function getGroupMembershipDirectFilter(string $userDn = null): string
+ {
+ if (empty($this->ldapParams->getFilterGroupAttributes())) {
+ $attributes = self::DEFAULT_FILTER_GROUP_ATTRIBUTES;
+ } else {
+ $attributes = $this->ldapParams->getFilterGroupAttributes();
+ }
+
+ return '(|'
+ . LdapUtil::getAttributesForFilter($attributes, $this->getGroupDn())
+ . ')';
+ }
+
+ /**
+ * @inheritDoc
*/
protected function pickServer()
{
diff --git a/lib/SP/Providers/Auth/Ldap/LdapMsAzureAd.php b/lib/SP/Providers/Auth/Ldap/LdapMsAzureAd.php
deleted file mode 100644
index e54c4b07..00000000
--- a/lib/SP/Providers/Auth/Ldap/LdapMsAzureAd.php
+++ /dev/null
@@ -1,193 +0,0 @@
-.
- */
-
-namespace SP\Providers\Auth\Ldap;
-
-use SP\Core\Events\Event;
-use SP\Core\Events\EventMessage;
-use SP\Core\Exceptions\SPException;
-use SP\Http\Address;
-
-/**
- * Class LdapMsAzureAd
- *
- * LDAP authentication based on Azure Active Directory
- *
- * @package SP\Auth\Ldap
- */
-final class LdapMsAzureAd extends Ldap
-{
- const FILTER_USER_OBJECT = '(|(objectCategory=person)(objectClass=user))';
- const FILTER_GROUP_OBJECT = '(objectCategory=group)';
- const FILTER_USER_ATTRIBUTES = ['samaccountname', 'cn', 'uid', 'userPrincipalName'];
- const FILTER_GROUP_ATTRIBUTES = ['memberOf', 'groupMembership', 'memberof:1.2.840.113556.1.4.1941:'];
-
- /**
- * Devolver el filtro para comprobar la pertenecia al grupo
- *
- * @return string
- * @throws SPException
- */
- public function getGroupMembershipFilter(): string
- {
- if (empty($this->ldapParams->getGroup())) {
- return self::FILTER_USER_OBJECT;
- }
-
- return '(&(|'
- . LdapUtil::getAttributesForFilter(
- self::FILTER_GROUP_ATTRIBUTES,
- $this->getGroupDn())
- . ')'
- . self::FILTER_USER_OBJECT
- . ')';
- }
-
- /**
- * Obtener el filtro para buscar el usuario
- *
- * @param string $userLogin
- *
- * @return string
- */
- public function getUserDnFilter(string $userLogin): string
- {
- return '(&(|'
- . LdapUtil::getAttributesForFilter(self::FILTER_USER_ATTRIBUTES, $userLogin)
- . ')'
- . self::FILTER_USER_OBJECT
- . ')';
- }
-
- /**
- * Devolver el filtro para objetos del tipo grupo
- *
- * @return string
- */
- public function getGroupObjectFilter(): string
- {
- return self::FILTER_GROUP_OBJECT;
- }
-
- /**
- * Buscar al usuario en un grupo.
- *
- * @param string $userDn
- * @param string $userLogin
- * @param array $groupsDn
- *
- * @return bool
- * @throws LdapException
- */
- public function isUserInGroup(string $userDn, string $userLogin, array $groupsDn): bool
- {
- // Comprobar si está establecido el filtro de grupo o el grupo coincide con
- // los grupos del usuario
- if (empty($this->ldapParams->getGroup())
- || $this->ldapParams->getGroup() === '*'
- || in_array($this->getGroupDn(), $groupsDn)
- ) {
- $this->eventDispatcher->notifyEvent('ldap.check.group',
- new Event($this, EventMessage::factory()
- ->addDescription(__u('User in group verified'))
- ->addDetail(__u('User'), $userLogin)
- ->addDetail(__u('Group'), $this->ldapParams->getGroup())));
-
- return true;
- }
-
- return $this->checkUserInGroupByFilter($userLogin, $userDn);
- }
-
- /**
- * @param string $userLogin
- * @param string $userDn
- *
- * @return bool
- * @throws LdapException
- */
- private function checkUserInGroupByFilter(string $userLogin, string $userDn): bool
- {
- $groupDn = $this->getGroupDn();
-
- $filter = '(|'
- . LdapUtil::getAttributesForFilter(self::FILTER_GROUP_ATTRIBUTES, $groupDn)
- . ')';
-
- $searchResults = $this->ldapActions->getObjects($filter, ['dn'], $userDn);
-
- if (isset($searchResults['count'])
- && (int)$searchResults['count'] === 0
- ) {
- $this->eventDispatcher->notifyEvent('ldap.check.group',
- new Event($this, EventMessage::factory()
- ->addDescription(__u('User does not belong to the group'))
- ->addDetail(__u('User'), $userLogin)
- ->addDetail(__u('Group'), $groupDn)
- ->addDetail('LDAP FILTER', $filter)));
-
- return false;
- }
-
- $this->eventDispatcher->notifyEvent('ldap.check.group',
- new Event($this, EventMessage::factory()
- ->addDescription(__u('User in group verified'))
- ->addDetail(__u('User'), $userLogin)
- ->addDetail(__u('Group'), $groupDn)));
-
- return true;
- }
-
- /**
- * Obtener el servidor de LDAP a utilizar
- *
- * @return mixed
- */
- protected function pickServer()
- {
- $server = $this->ldapParams->getServer();
-
- if (preg_match(Address::PATTERN_IP_ADDRESS, $server)) {
- return $server;
- }
-
- $dnsServerQuery = '_msdcs' . substr($server, strpos($server, '.'));
-
- logger(sprintf('Querying DNS zone: %s', $dnsServerQuery));
-
- $records = dns_get_record($dnsServerQuery, DNS_NS);
-
- if (empty($records)) {
- return $server;
- }
-
- $adServers = [];
-
- foreach ($records as $record) {
- $adServers[] = $record['target'];
- };
-
- return count($adServers) > 0 ? array_rand($adServers) : $server;
- }
-}
diff --git a/lib/SP/Providers/Auth/Ldap/LdapParams.php b/lib/SP/Providers/Auth/Ldap/LdapParams.php
index d96cc9b9..b12a04b8 100644
--- a/lib/SP/Providers/Auth/Ldap/LdapParams.php
+++ b/lib/SP/Providers/Auth/Ldap/LdapParams.php
@@ -65,6 +65,22 @@ final class LdapParams
* @var bool
*/
protected $tlsEnabled = false;
+ /**
+ * @var string
+ */
+ protected $filterUserObject;
+ /**
+ * @var string
+ */
+ protected $filterGroupObject;
+ /**
+ * @var array
+ */
+ protected $filterUserAttributes;
+ /**
+ * @var array
+ */
+ protected $filterGroupAttributes;
/**
* Devolver el puerto del servidor si está establecido
@@ -78,6 +94,74 @@ final class LdapParams
return preg_match('#' . self::REGEX_SERVER . '#i', $server, $matches) ? $matches : false;
}
+ /**
+ * @return string
+ */
+ public function getFilterUserObject(): ?string
+ {
+ return $this->filterUserObject;
+ }
+
+ /**
+ * @param string $filterUserObject
+ */
+ public function setFilterUserObject(string $filterUserObject = null)
+ {
+ if (!empty($filterUserObject)) {
+ $this->filterUserObject = $filterUserObject;
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getFilterGroupObject(): ?string
+ {
+ return $this->filterGroupObject;
+ }
+
+ /**
+ * @param string $filterGroupObject
+ */
+ public function setFilterGroupObject(string $filterGroupObject = null)
+ {
+ if (!empty($filterGroupObject)) {
+ $this->filterGroupObject = $filterGroupObject;
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getFilterUserAttributes(): ?array
+ {
+ return $this->filterUserAttributes;
+ }
+
+ /**
+ * @param array $filterUserAttributes
+ */
+ public function setFilterUserAttributes(array $filterUserAttributes = null)
+ {
+ $this->filterUserAttributes = $filterUserAttributes;
+ }
+
+ /**
+ * @return array
+ */
+ public function getFilterGroupAttributes(): ?array
+ {
+ return $this->filterGroupAttributes;
+ }
+
+ /**
+ * @param array $filterGroupAttributes
+ */
+ public function setFilterGroupAttributes(array $filterGroupAttributes = null)
+ {
+ $this->filterGroupAttributes = $filterGroupAttributes;
+ }
+
/**
* @return int
*/
diff --git a/lib/SP/Providers/Auth/Ldap/LdapStd.php b/lib/SP/Providers/Auth/Ldap/LdapStd.php
index b353d42b..1af7b134 100644
--- a/lib/SP/Providers/Auth/Ldap/LdapStd.php
+++ b/lib/SP/Providers/Auth/Ldap/LdapStd.php
@@ -26,7 +26,6 @@ namespace SP\Providers\Auth\Ldap;
use SP\Core\Events\Event;
use SP\Core\Events\EventMessage;
-use SP\Core\Exceptions\SPException;
/**
* Class LdapStd
@@ -37,65 +36,71 @@ use SP\Core\Exceptions\SPException;
*/
final class LdapStd extends Ldap
{
- const FILTER_USER_OBJECT = '(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))';
- const FILTER_GROUP_OBJECT = '(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=group))';
- const FILTER_USER_ATTRIBUTES = ['samaccountname', 'cn', 'uid', 'userPrincipalName'];
- const FILTER_GROUP_ATTRIBUTES = ['memberOf', 'groupMembership'];
+ const DEFAULT_FILTER_USER_OBJECT = '(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))';
+ const DEFAULT_FILTER_GROUP_OBJECT = '(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=group))';
+ const DEFAULT_FILTER_USER_ATTRIBUTES = ['samaccountname', 'cn', 'uid', 'userPrincipalName'];
+ const DEFAULT_FILTER_GROUP_ATTRIBUTES = ['memberOf', 'groupMembership'];
/**
- * Devolver el filtro para objetos del tipo grupo
- *
- * @return string
+ * @inheritDoc
+ * @throws LdapException
*/
- public function getGroupObjectFilter(): string
+ public function getGroupMembershipIndirectFilter(): string
{
- return self::FILTER_GROUP_OBJECT;
- }
+ $filter = $this->getUserObjectFilter();
- /**
- * Devolver el filtro para comprobar la pertenecia al grupo
- *
- * @return string
- * @throws SPException
- */
- public function getGroupMembershipFilter(): string
- {
if (empty($this->ldapParams->getGroup())) {
- return self::FILTER_USER_OBJECT;
+ return $filter;
+ }
+
+ if (empty($this->ldapParams->getFilterGroupAttributes())) {
+ $attributes = self::DEFAULT_FILTER_GROUP_ATTRIBUTES;
+ } else {
+ $attributes = $this->ldapParams->getFilterGroupAttributes();
}
return '(&(|'
. LdapUtil::getAttributesForFilter(
- self::FILTER_GROUP_ATTRIBUTES,
+ $attributes,
$this->getGroupDn())
- . ')' . self::FILTER_USER_OBJECT
+ . ')' . $filter
. ')';
}
/**
- * Obtener el filtro para buscar el usuario
- *
- * @param string $userLogin
- *
- * @return mixed
+ * @return string
+ */
+ private function getUserObjectFilter()
+ {
+ if (empty($this->ldapParams->getFilterUserObject())) {
+ return self::DEFAULT_FILTER_USER_OBJECT;
+ }
+
+ return $this->ldapParams->getFilterUserObject();
+ }
+
+ /**
+ * @inheritDoc
*/
public function getUserDnFilter(string $userLogin): string
{
+ if (empty($this->ldapParams->getFilterUserAttributes())) {
+ $attributes = self::DEFAULT_FILTER_USER_ATTRIBUTES;
+ } else {
+ $attributes = $this->ldapParams->getFilterUserAttributes();
+ }
+
+ $filter = $this->getUserObjectFilter();
+
return '(&(|'
- . LdapUtil::getAttributesForFilter(self::FILTER_USER_ATTRIBUTES, $userLogin)
+ . LdapUtil::getAttributesForFilter($attributes, $userLogin)
. ')'
- . self::FILTER_USER_OBJECT
+ . $filter
. ')';
}
/**
- * Buscar al usuario en un grupo.
- *
- * @param string $userDn
- * @param string $userLogin
- * @param array $groupsDn
- *
- * @return bool
+ * @inheritDoc
* @throws LdapException
*/
public function isUserInGroup(string $userDn, string $userLogin, array $groupsDn): bool
@@ -126,12 +131,7 @@ final class LdapStd extends Ldap
*/
private function checkUserInGroupByFilter(string $userDn): bool
{
- $groupName = ldap_escape($this->getGroupFromParams(), null, LDAP_ESCAPE_FILTER);
- $userDN = ldap_escape($userDn, null, LDAP_ESCAPE_FILTER);
- $filter = '(&(cn=' . $groupName . ')'
- . '(|(memberUid=' . $userDN . ')(member=' . $userDN . ')(uniqueMember=' . $userDN . '))'
- . self::FILTER_GROUP_OBJECT
- . ')';
+ $filter = $this->getGroupMembershipDirectFilter($userDn);
$searchResults = $this->ldapActions->getObjects($filter, ['dn']);
@@ -142,7 +142,7 @@ final class LdapStd extends Ldap
new Event($this, EventMessage::factory()
->addDescription(__u('User does not belong to the group'))
->addDetail(__u('User'), $userDn)
- ->addDetail(__u('Group'), $groupName)
+ ->addDetail(__u('Group'), $this->getGroupFromParams())
->addDetail('LDAP FILTER', $filter)));
return false;
@@ -151,6 +151,36 @@ final class LdapStd extends Ldap
return true;
}
+ /**
+ * @inheritDoc
+ */
+ public function getGroupMembershipDirectFilter(string $userDn = null): string
+ {
+ $groupName = ldap_escape($this->getGroupFromParams(), null, LDAP_ESCAPE_FILTER);
+ $member = $userDn !== null ? ldap_escape($userDn, null, LDAP_ESCAPE_FILTER) : '*';
+
+ if (empty($groupName)) {
+ return $this->getUserObjectFilter();
+ }
+
+ return '(&(cn=' . $groupName . ')'
+ . '(|(memberUid=' . $member . ')(member=' . $member . ')(uniqueMember=' . $member . '))'
+ . $this->getGroupObjectFilter()
+ . ')';
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getGroupObjectFilter(): string
+ {
+ if (empty($this->ldapParams->getFilterGroupObject())) {
+ return self::DEFAULT_FILTER_GROUP_OBJECT;
+ }
+
+ return $this->ldapParams->getFilterGroupObject();
+ }
+
/**
* Obtener el servidor de LDAP a utilizar
*
diff --git a/lib/SP/Services/Config/ConfigBackupService.php b/lib/SP/Services/Config/ConfigBackupService.php
index c67dab6f..8b31fcfc 100644
--- a/lib/SP/Services/Config/ConfigBackupService.php
+++ b/lib/SP/Services/Config/ConfigBackupService.php
@@ -24,8 +24,6 @@
namespace SP\Services\Config;
-use DI\DependencyException;
-use DI\NotFoundException;
use Exception;
use RuntimeException;
use SP\Config\ConfigData;
@@ -95,16 +93,13 @@ final class ConfigBackupService extends Service
/**
* @return ConfigData
- * @throws ServiceException
- * @throws DependencyException
- * @throws NotFoundException
* @throws FileException
+ * @throws ServiceException
*/
public function restore()
{
- return $this->config->saveConfig(Util::unserialize(
- ConfigData::class,
- $this->getBackup())
+ return $this->config->saveConfig(
+ Util::unserialize(ConfigData::class, $this->getBackup())
)->getConfigData();
}
diff --git a/lib/SP/Services/Install/Installer.php b/lib/SP/Services/Install/Installer.php
index 7da4009e..07ebf9c6 100644
--- a/lib/SP/Services/Install/Installer.php
+++ b/lib/SP/Services/Install/Installer.php
@@ -225,8 +225,15 @@ final class Installer extends Service
$address = $this->request->getServer('SERVER_ADDR');
}
- $this->installData->setDbAuthHost($address);
- $this->installData->setDbAuthHostDns(gethostbyaddr($address));
+ // Check whether sysPass is running on docker. Not so accurate,
+ // but avoid some overhead from parsing /proc/self/cgroup
+ if (getenv('SYSPASS_DIR') !== false) {
+ $this->installData->setDbAuthHost('%');
+ } else {
+ $this->installData->setDbAuthHost($address);
+ $this->installData->setDbAuthHostDns(gethostbyaddr($address));
+ }
+
} else {
$this->installData->setDbAuthHost('localhost');
}
diff --git a/lib/SP/Services/Install/MySQL.php b/lib/SP/Services/Install/MySQL.php
index 935ce371..9db20da7 100644
--- a/lib/SP/Services/Install/MySQL.php
+++ b/lib/SP/Services/Install/MySQL.php
@@ -167,10 +167,21 @@ final class MySQL implements DatabaseSetupInterface
$dbc = $this->mysqlHandler->getConnectionSimple();
- $dbc->exec(sprintf($query, $dbc->quote($user), $this->installData->getDbAuthHost(), $dbc->quote($pass)));
+ $dbc->exec(
+ sprintf($query,
+ $dbc->quote($user),
+ $this->installData->getDbAuthHost(),
+ $dbc->quote($pass))
+ );
- if ($this->installData->getDbAuthHost() !== $this->installData->getDbAuthHostDns()) {
- $dbc->exec(sprintf($query, $dbc->quote($user), $this->installData->getDbAuthHostDns(), $dbc->quote($pass)));
+ if (!empty($this->installData->getDbAuthHostDns())
+ && $this->installData->getDbAuthHost() !== $this->installData->getDbAuthHostDns()) {
+ $dbc->exec(
+ sprintf($query,
+ $dbc->quote($user),
+ $this->installData->getDbAuthHostDns(),
+ $dbc->quote($pass))
+ );
}
$dbc->exec('FLUSH PRIVILEGES');
diff --git a/lib/SP/Services/Ldap/LdapCheckService.php b/lib/SP/Services/Ldap/LdapCheckService.php
index 2cc0cce9..92383800 100644
--- a/lib/SP/Services/Ldap/LdapCheckService.php
+++ b/lib/SP/Services/Ldap/LdapCheckService.php
@@ -63,19 +63,34 @@ final class LdapCheckService extends Service
$data = ['count' => 0, 'results' => []];
+ $indirectFilterItems = $this->ldapResultsMapper(
+ $ldapActions->getObjects(
+ $this->ldap->getGroupMembershipIndirectFilter(), ['dn'])
+ );
+
+ $directFilterItems = $this->ldapResultsMapper(
+ $ldapActions->getObjects(
+ $this->ldap->getGroupMembershipDirectFilter(),
+ ['member', 'memberUid', 'uniqueMember']),
+ ['member', 'memberUid', 'uniqueMember']
+ );
+
+ $userItems = array_unique(array_merge($indirectFilterItems, $directFilterItems));
+
$data['results'][] = [
'icon' => 'person',
- 'items' => $this->ldapResultsMapper(
- $ldapActions->getObjects(
- $this->ldap->getGroupMembershipFilter(), ['dn']))
+ 'items' => array_values($userItems)
];
if ($includeGroups) {
+ $groupItems = $this->ldapResultsMapper(
+ $ldapActions->getObjects(
+ $this->ldap->getGroupObjectFilter(), ['dn'])
+ );
+
$data['results'][] = [
'icon' => 'group',
- 'items' => $this->ldapResultsMapper(
- $ldapActions->getObjects(
- $this->ldap->getGroupObjectFilter(), ['dn']))
+ 'items' => $groupItems
];
}
@@ -89,20 +104,26 @@ final class LdapCheckService extends Service
/**
* Obtener los datos de una búsqueda de LDAP de un atributo
*
- * @param array $data
- * @param string $attribute
+ * @param array $data
+ * @param array $attributes
*
* @return array
*/
- public function ldapResultsMapper($data, $attribute = 'dn')
+ public function ldapResultsMapper($data, $attributes = ['dn'])
{
$out = [];
foreach ($data as $result) {
if (is_array($result)) {
foreach ($result as $ldapAttribute => $value) {
- if (strtolower($ldapAttribute) === $attribute) {
- $out[] = $value;
+ if (in_array(strtolower($ldapAttribute), $attributes)) {
+ if (is_array($value)) {
+ unset($value['count']);
+
+ $out = array_merge($out, $value);
+ } else {
+ $out[] = $value;
+ }
}
}
}
@@ -120,7 +141,8 @@ final class LdapCheckService extends Service
public function getObjectsByFilter($filter)
{
$objects = $this->ldapResultsMapper(
- $this->ldap->getLdapActions()->getObjects($filter, ['dn']));
+ $this->ldap->getLdapActions()->getObjects($filter, ['dn'])
+ );
return [
'count' => count($objects),
diff --git a/lib/SP/Services/Ldap/LdapImportService.php b/lib/SP/Services/Ldap/LdapImportService.php
index dab890a7..af66662c 100644
--- a/lib/SP/Services/Ldap/LdapImportService.php
+++ b/lib/SP/Services/Ldap/LdapImportService.php
@@ -176,7 +176,7 @@ final class LdapImportService extends Service
if (empty($ldapImportParams->filter)) {
$objects = $ldap->getLdapActions()
- ->getObjects($ldap->getGroupMembershipFilter());
+ ->getObjects($ldap->getGroupMembershipIndirectFilter());
} else {
$objects = $ldap->getLdapActions()
->getObjects($ldapImportParams->filter);
diff --git a/lib/SP/Services/Upgrade/UpgradeConfigService.php b/lib/SP/Services/Upgrade/UpgradeConfigService.php
index 67d2346a..a5752c78 100644
--- a/lib/SP/Services/Upgrade/UpgradeConfigService.php
+++ b/lib/SP/Services/Upgrade/UpgradeConfigService.php
@@ -320,7 +320,7 @@ final class UpgradeConfigService extends Service implements UpgradeInterface
private function upgrade_300_18112501($version)
{
if ($this->configData->isLdapEnabled()) {
- if ($this->configData->isLdapAds()) {
+ if ($this->configData->get('ldapAds')) {
$this->configData->setLdapType(LdapTypeInterface::LDAP_ADS);
} else {
$this->configData->setLdapType(LdapTypeInterface::LDAP_STD);
diff --git a/lib/SP/Storage/File/XmlHandler.php b/lib/SP/Storage/File/XmlHandler.php
index ca5ba428..459b86f1 100644
--- a/lib/SP/Storage/File/XmlHandler.php
+++ b/lib/SP/Storage/File/XmlHandler.php
@@ -117,14 +117,24 @@ final class XmlHandler implements XmlFileStorageInterface
/** @var DOMElement $node */
foreach ($nodeList as $node) {
if ($node->nodeType === XML_ELEMENT_NODE) {
- if (is_object($node->childNodes) && $node->childNodes->length > 1) {
- if ($node->hasAttribute('multiple') && (int)$node->getAttribute('multiple') === 1) {
+ if (is_object($node->childNodes)
+ && $node->childNodes->length > 1
+ ) {
+ if ($node->hasAttribute('multiple')
+ && (int)$node->getAttribute('multiple') === 1
+ ) {
$nodes[] = $this->readChildNodes($node->childNodes);
+
+ } elseif ($node->hasAttribute('class')) {
+ $nodes[$node->nodeName] = $this->readChildNodes($node->childNodes);
+ $nodes[$node->nodeName]['__class__'] = (string)$node->getAttribute('class');;
} else {
$nodes[$node->nodeName] = $this->readChildNodes($node->childNodes);
}
} else {
- $val = is_numeric($node->nodeValue) && strpos($node->nodeValue, '.') === false ? (int)$node->nodeValue : $node->nodeValue;
+ $val = is_numeric($node->nodeValue)
+ && strpos($node->nodeValue, '.') === false
+ ? (int)$node->nodeValue : $node->nodeValue;
if ($node->nodeName === 'item') {
$nodes[] = $val;
@@ -184,10 +194,10 @@ final class XmlHandler implements XmlFileStorageInterface
* Crear los nodos hijos recursivamente a partir de un array multidimensional
*
* @param mixed $items
- * @param DOMNode $Node
+ * @param DOMNode $node
* @param null $type
*/
- protected function writeChildNodes($items, DOMNode $Node, $type = null)
+ protected function writeChildNodes($items, DOMNode $node, $type = null)
{
foreach ($this->analyzeItems($items) as $key => $value) {
if (is_int($key)) {
@@ -201,12 +211,13 @@ final class XmlHandler implements XmlFileStorageInterface
$this->writeChildNodes($value, $newNode, $key);
} else if (is_object($value)) {
$newNode->setAttribute('class', get_class($value));
- $newNode->appendChild($this->Dom->createTextNode(base64_encode(serialize($value))));
+ $this->writeChildNodes($value, $newNode, $key);
+// $newNode->appendChild($this->Dom->createTextNode(base64_encode(serialize($value))));
} else {
$newNode->appendChild($this->Dom->createTextNode(trim($value)));
}
- $Node->appendChild($newNode);
+ $node->appendChild($newNode);
}
}
@@ -216,7 +227,7 @@ final class XmlHandler implements XmlFileStorageInterface
* @param mixed $items
* @param bool $serialize
*
- * @return array
+ * @return array|string
*/
protected function analyzeItems($items, $serialize = false)
{
@@ -244,15 +255,17 @@ final class XmlHandler implements XmlFileStorageInterface
protected function analyzeObject($object)
{
$items = [];
- $Reflection = new ReflectionObject($object);
+ $reflection = new ReflectionObject($object);
- foreach ($Reflection->getProperties() as $property) {
+ foreach ($reflection->getProperties() as $property) {
$property->setAccessible(true);
$value = $property->getValue($object);
if (is_bool($value)) {
$items[$property->getName()] = (int)$value;
- } elseif (is_numeric($value) && strpos($value, '.') === false) {
+ } elseif (is_numeric($value)
+ && strpos($value, '.') === false
+ ) {
$items[$property->getName()] = (int)$value;
} else {
$items[$property->getName()] = $value;
diff --git a/public/js/app-util.min.js b/public/js/app-util.min.js
index 87ecd260..08199207 100644
--- a/public/js/app-util.min.js
+++ b/public/js/app-util.min.js
@@ -5,10 +5,10 @@ $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.
$jscomp.initSymbolAsyncIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.asyncIterator;a||(a=$jscomp.global.Symbol.asyncIterator=$jscomp.global.Symbol("asyncIterator"));$jscomp.initSymbolAsyncIterator=function(){}};$jscomp.arrayIterator=function(a){var d=0;return $jscomp.iteratorPrototype(function(){return d