Blame view

sources/apps/user_ldap/lib/proxy.php 2.99 KB
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
25
  use OCA\user_ldap\lib\Access;
03e52840d   Kload   Init
26
  abstract class Proxy {
31b7f2792   Kload   Upgrade to ownclo...
27
28
  	static private $accesses = array();
  	private $ldap = null;
03e52840d   Kload   Init
29

31b7f2792   Kload   Upgrade to ownclo...
30
31
  	public function __construct(ILDAPWrapper $ldap) {
  		$this->ldap = $ldap;
03e52840d   Kload   Init
32
33
  		$this->cache = \OC_Cache::getGlobalCache();
  	}
31b7f2792   Kload   Upgrade to ownclo...
34
35
36
  	private function addAccess($configPrefix) {
  		$connector = new Connection($this->ldap, $configPrefix);
  		self::$accesses[$configPrefix] = new Access($connector, $this->ldap);
03e52840d   Kload   Init
37
  	}
31b7f2792   Kload   Upgrade to ownclo...
38
39
40
  	protected function getAccess($configPrefix) {
  		if(!isset(self::$accesses[$configPrefix])) {
  			$this->addAccess($configPrefix);
03e52840d   Kload   Init
41
  		}
31b7f2792   Kload   Upgrade to ownclo...
42
  		return self::$accesses[$configPrefix];
03e52840d   Kload   Init
43
44
45
46
47
48
49
50
51
  	}
  
  	protected function getUserCacheKey($uid) {
  		return 'user-'.$uid.'-lastSeenOn';
  	}
  
  	protected function getGroupCacheKey($gid) {
  		return 'group-'.$gid.'-lastSeenOn';
  	}
31b7f2792   Kload   Upgrade to ownclo...
52
  	abstract protected function callOnLastSeenOn($id, $method, $parameters, $passOnWhen);
03e52840d   Kload   Init
53
54
55
56
57
58
59
60
61
  	abstract protected function walkBackends($id, $method, $parameters);
  
  	/**
  	 * @brief Takes care of the request to the User backend
  	 * @param $uid string, the uid connected to the request
  	 * @param $method string, the method of the user backend that shall be called
  	 * @param $parameters an array of parameters to be passed
  	 * @return mixed, the result of the specified method
  	 */
31b7f2792   Kload   Upgrade to ownclo...
62
63
64
  	protected function handleRequest($id, $method, $parameters, $passOnWhen = false) {
  		$result = $this->callOnLastSeenOn($id,  $method, $parameters, $passOnWhen);
  		if($result === $passOnWhen) {
03e52840d   Kload   Init
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  			$result = $this->walkBackends($id, $method, $parameters);
  		}
  		return $result;
  	}
  
  	private function getCacheKey($key) {
  		$prefix = 'LDAP-Proxy-';
  		if(is_null($key)) {
  			return $prefix;
  		}
  		return $prefix.md5($key);
  	}
  
  	public function getFromCache($key) {
  		if(!$this->isCached($key)) {
  			return null;
  		}
  		$key = $this->getCacheKey($key);
  
  		return unserialize(base64_decode($this->cache->get($key)));
  	}
  
  	public function isCached($key) {
  		$key = $this->getCacheKey($key);
  		return $this->cache->hasKey($key);
  	}
  
  	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   Kload   Upgrade to ownclo...
101
  }