Blame view
sources/apps/user_ldap/lib/proxy.php
4.03 KB
|
03e52840d
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php /** * ownCloud – LDAP Backend Proxy * * @author Arthur Schiwon * @copyright 2013 Arthur Schiwon blizzz@owncloud.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ namespace OCA\user_ldap\lib; |
|
31b7f2792
|
25 |
use OCA\user_ldap\lib\Access; |
|
03e52840d
|
26 |
abstract class Proxy {
|
|
31b7f2792
|
27 28 |
static private $accesses = array(); private $ldap = null; |
|
03e52840d
|
29 |
|
|
6d9380f96
|
30 31 32 |
/** * @param ILDAPWrapper $ldap */ |
|
31b7f2792
|
33 34 |
public function __construct(ILDAPWrapper $ldap) {
$this->ldap = $ldap;
|
|
6d9380f96
|
35 |
$this->cache = \OC\Cache::getGlobalCache(); |
|
03e52840d
|
36 |
} |
|
6d9380f96
|
37 38 39 |
/** * @param string $configPrefix */ |
|
31b7f2792
|
40 |
private function addAccess($configPrefix) {
|
|
6d9380f96
|
41 42 43 44 45 46 47 48 49 50 51 52 |
static $ocConfig;
static $fs;
static $log;
static $avatarM;
if(is_null($fs)) {
$ocConfig = \OC::$server->getConfig();
$fs = new FilesystemHelper();
$log = new LogWrapper();
$avatarM = \OC::$server->getAvatarManager();
}
$userManager =
new user\Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image());
|
|
31b7f2792
|
53 |
$connector = new Connection($this->ldap, $configPrefix); |
|
6d9380f96
|
54 55 |
self::$accesses[$configPrefix] = new Access($connector, $this->ldap, $userManager); |
|
03e52840d
|
56 |
} |
|
6d9380f96
|
57 58 59 60 |
/** * @param string $configPrefix * @return mixed */ |
|
31b7f2792
|
61 62 63 |
protected function getAccess($configPrefix) {
if(!isset(self::$accesses[$configPrefix])) {
$this->addAccess($configPrefix);
|
|
03e52840d
|
64 |
} |
|
31b7f2792
|
65 |
return self::$accesses[$configPrefix]; |
|
03e52840d
|
66 |
} |
|
6d9380f96
|
67 68 69 70 |
/** * @param string $uid * @return string */ |
|
03e52840d
|
71 72 73 |
protected function getUserCacheKey($uid) {
return 'user-'.$uid.'-lastSeenOn';
}
|
|
6d9380f96
|
74 75 76 77 |
/** * @param string $gid * @return string */ |
|
03e52840d
|
78 79 80 |
protected function getGroupCacheKey($gid) {
return 'group-'.$gid.'-lastSeenOn';
}
|
|
6d9380f96
|
81 82 83 84 85 86 87 |
/** * @param string $id * @param string $method * @param array $parameters * @param bool $passOnWhen * @return mixed */ |
|
31b7f2792
|
88 |
abstract protected function callOnLastSeenOn($id, $method, $parameters, $passOnWhen); |
|
6d9380f96
|
89 90 91 92 93 94 95 |
/** * @param string $id * @param string $method * @param array $parameters * @return mixed */ |
|
03e52840d
|
96 97 98 |
abstract protected function walkBackends($id, $method, $parameters); /** |
|
6d9380f96
|
99 100 101 102 103 |
* Takes care of the request to the User backend * @param string $id * @param string $method string, the method of the user backend that shall be called * @param array $parameters an array of parameters to be passed * @param bool $passOnWhen |
|
03e52840d
|
104 105 |
* @return mixed, the result of the specified method */ |
|
31b7f2792
|
106 107 108 |
protected function handleRequest($id, $method, $parameters, $passOnWhen = false) {
$result = $this->callOnLastSeenOn($id, $method, $parameters, $passOnWhen);
if($result === $passOnWhen) {
|
|
03e52840d
|
109 110 111 112 |
$result = $this->walkBackends($id, $method, $parameters); } return $result; } |
|
6d9380f96
|
113 114 115 116 |
/** * @param string|null $key * @return string */ |
|
03e52840d
|
117 118 119 120 121 122 123 |
private function getCacheKey($key) {
$prefix = 'LDAP-Proxy-';
if(is_null($key)) {
return $prefix;
}
return $prefix.md5($key);
}
|
|
6d9380f96
|
124 125 126 127 |
/** * @param string $key * @return mixed|null */ |
|
03e52840d
|
128 129 130 131 132 133 134 135 |
public function getFromCache($key) {
if(!$this->isCached($key)) {
return null;
}
$key = $this->getCacheKey($key);
return unserialize(base64_decode($this->cache->get($key)));
}
|
|
6d9380f96
|
136 137 138 139 |
/** * @param string $key * @return bool */ |
|
03e52840d
|
140 141 142 143 |
public function isCached($key) {
$key = $this->getCacheKey($key);
return $this->cache->hasKey($key);
}
|
|
6d9380f96
|
144 145 146 147 |
/** * @param string $key * @param mixed $value */ |
|
03e52840d
|
148 149 150 151 152 153 154 155 156 |
public function writeToCache($key, $value) {
$key = $this->getCacheKey($key);
$value = base64_encode(serialize($value));
$this->cache->set($key, $value, '2592000');
}
public function clearCache() {
$this->cache->clear($this->getCacheKey(null));
}
|
|
31b7f2792
|
157 |
} |