diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-02-13 00:14:56 +0100 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-02-14 15:22:22 +0100 |
commit | 792bcb82ae5149c86afcd4d550e3a22d60d330f7 (patch) | |
tree | ca2ecccf6865254fb7ed463424a4ae34d7ddeded /apps/user_ldap/lib/User | |
parent | a26bcd8e8fa11870c9192d24c73fbef3ef6112de (diff) | |
download | nextcloud-server-792bcb82ae5149c86afcd4d550e3a22d60d330f7.tar.gz nextcloud-server-792bcb82ae5149c86afcd4d550e3a22d60d330f7.zip |
add LDAP ConfigHandler for external storages and "$home" var
* handler registered upon OCA\\Files_External::loadAdditionalBackends
event as user_ldap is loaded before files_external
* new configuration field "ldapExtStorageHomeAttribute" (not in GUI yet)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/user_ldap/lib/User')
-rw-r--r-- | apps/user_ldap/lib/User/Manager.php | 1 | ||||
-rw-r--r-- | apps/user_ldap/lib/User/User.php | 49 |
2 files changed, 50 insertions, 0 deletions
diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php index 6185c0da45c..046b42551b6 100644 --- a/apps/user_ldap/lib/User/Manager.php +++ b/apps/user_ldap/lib/User/Manager.php @@ -176,6 +176,7 @@ class Manager { $this->access->getConnection()->ldapEmailAttribute, $this->access->getConnection()->ldapUserDisplayName, $this->access->getConnection()->ldapUserDisplayName2, + $this->access->getConnection()->ldapExtStorageHomeAttribute, ]; $homeRule = $this->access->getConnection()->homeFolderNamingRule; diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php index 0d8f993746f..d68d8b35d14 100644 --- a/apps/user_ldap/lib/User/User.php +++ b/apps/user_ldap/lib/User/User.php @@ -32,6 +32,7 @@ namespace OCA\User_LDAP\User; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; +use OCA\User_LDAP\Exceptions\AttributeNotSet; use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\LogWrapper; use OCP\IAvatarManager; @@ -244,6 +245,13 @@ class User { } $this->connection->writeToCache($cacheKey, $groups); + //external storage var + $attr = strtolower($this->connection->ldapExtStorageHomeAttribute); + if(isset($ldapEntry[$attr])) { + $this->updateExtStorageHome($ldapEntry[$attr][0]); + } + unset($attr); + //Avatar /** @var Connection $connection */ $connection = $this->access->getConnection(); @@ -617,6 +625,47 @@ class User { } /** + * @throws AttributeNotSet + * @throws \OC\ServerNotAvailableException + * @throws \OCP\PreConditionNotMetException + */ + public function getExtStorageHome():string { + $value = $this->config->getUserValue($this->getUsername(), 'user_ldap', 'extStorageHome', ''); + if ($value !== '') { + return $value; + } + + $value = $this->updateExtStorageHome(); + if ($value !== '') { + return $value; + } + + throw new AttributeNotSet(sprintf( + 'external home storage attribute yield no value for %s', $this->getUsername() + )); + } + + /** + * @throws \OCP\PreConditionNotMetException + * @throws \OC\ServerNotAvailableException + */ + public function updateExtStorageHome(string $valueFromLDAP = null):string { + if($valueFromLDAP === null) { + $extHomeValues = $this->access->readAttribute($this->getDN(), $this->connection->ldapExtStorageHomeAttribute); + } else { + $extHomeValues = [$valueFromLDAP]; + } + if ($extHomeValues && isset($extHomeValues[0])) { + $extHome = $extHomeValues[0]; + $this->config->setUserValue($this->getUsername(), 'user_ldap', 'extStorageHome', $extHome); + return $extHome; + } else { + $this->config->deleteUserValue($this->getUsername(), 'user_ldap', 'extStorageHome'); + return ''; + } + } + + /** * called by a post_login hook to handle password expiry * * @param array $params |