X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2Fconfig%2FConfigManager.php;h=99efc1567c85bd7b0f398a1d194a9200d5dc9adb;hb=a19c24edc1057bd411821f9e3e7d1d309d38b1bb;hp=32aaea48e870ab13af7714c5a53d84cf0356d613;hpb=630ebca2b6359e942e5b6c057cca2b6069c1093a;p=github%2Fshaarli%2FShaarli.git diff --git a/application/config/ConfigManager.php b/application/config/ConfigManager.php index 32aaea48..99efc156 100644 --- a/application/config/ConfigManager.php +++ b/application/config/ConfigManager.php @@ -21,6 +21,11 @@ class ConfigManager public static $DEFAULT_PLUGINS = array('qrcode'); + /** + * @var string User space. + */ + protected $userSpace; + /** * @var string Config folder. */ @@ -41,12 +46,36 @@ class ConfigManager * * @param string $configFile Configuration file path without extension. */ - public function __construct($configFile = 'data/config') + public function __construct($configFile = null, $userSpace = null) { - $this->configFile = $configFile; + $this->userSpace = $this->findLDAPUser($userSpace); + if ($configFile !== null) { + $this->configFile = $configFile; + } else { + $this->configFile = ($this->userSpace === null) ? 'data/config' : 'data/' . $this->userSpace . '/config'; + } $this->initialize(); } + public function findLDAPUser($login, $password = null) { + $connect = ldap_connect(getenv('SHAARLI_LDAP_HOST')); + ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); + if (!$connect || !ldap_bind($connect, getenv('SHAARLI_LDAP_DN'), getenv('SHAARLI_LDAP_PASSWORD'))) { + return false; + } + + $search_query = str_replace('%login%', ldap_escape($login), getenv('SHAARLI_LDAP_FILTER')); + + $search = ldap_search($connect, getenv('SHAARLI_LDAP_BASE'), $search_query); + $info = ldap_get_entries($connect, $search); + + if (ldap_count_entries($connect, $search) == 1 && (is_null($password) || ldap_bind($connect, $info[0]["dn"], $password))) { + return $login; + } else { + return null; + } + } + /** * Reset the ConfigManager instance. */ @@ -269,6 +298,16 @@ class ConfigManager return $this->configFile . $this->configIO->getExtension(); } + /** + * Get the current userspace. + * + * @return mixed User space. + */ + public function getUserSpace() + { + return $this->userSpace; + } + /** * Recursive function which find asked setting in the loaded config. * @@ -342,19 +381,31 @@ class ConfigManager */ protected function setDefaultValues() { - $this->setEmpty('resource.data_dir', 'data'); - $this->setEmpty('resource.config', 'data/config.php'); - $this->setEmpty('resource.datastore', 'data/datastore.php'); - $this->setEmpty('resource.ban_file', 'data/ipbans.php'); - $this->setEmpty('resource.updates', 'data/updates.txt'); - $this->setEmpty('resource.log', 'data/log.txt'); - $this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt'); - $this->setEmpty('resource.history', 'data/history.php'); + if ($this->userSpace === null) { + $data = 'data'; + $tmp = 'tmp'; + $cache = 'cache'; + $pagecache = 'pagecache'; + } else { + $data = 'data/' . ($this->userSpace); + $tmp = 'tmp/' . ($this->userSpace); + $cache = 'cache/' . ($this->userSpace); + $pagecache = 'pagecache/' . ($this->userSpace); + } + + $this->setEmpty('resource.data_dir', $data); + $this->setEmpty('resource.config', $data . '/config.php'); + $this->setEmpty('resource.datastore', $data . '/datastore.php'); + $this->setEmpty('resource.ban_file', $data . '/ipbans.php'); + $this->setEmpty('resource.updates', $data . '/updates.txt'); + $this->setEmpty('resource.log', $data . '/log.txt'); + $this->setEmpty('resource.update_check', $data . '/lastupdatecheck.txt'); + $this->setEmpty('resource.history', $data . '/history.php'); $this->setEmpty('resource.raintpl_tpl', 'tpl/'); $this->setEmpty('resource.theme', 'default'); - $this->setEmpty('resource.raintpl_tmp', 'tmp/'); - $this->setEmpty('resource.thumbnails_cache', 'cache'); - $this->setEmpty('resource.page_cache', 'pagecache'); + $this->setEmpty('resource.raintpl_tmp', $tmp); + $this->setEmpty('resource.thumbnails_cache', $cache); + $this->setEmpty('resource.page_cache', $pagecache); $this->setEmpty('security.ban_after', 4); $this->setEmpty('security.ban_duration', 1800);