Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Redis.php
001 <?php
002
003 namespace OAuth\Common\Storage;
004
005 use OAuth\Common\Token\TokenInterface;
006 use OAuth\Common\Storage\Exception\TokenNotFoundException;
007 use OAuth\Common\Storage\Exception\AuthorizationStateNotFoundException;
008 use Predis\Client as Predis;
009
010 /*
011 * Stores a token in a Redis server. Requires the Predis library available at https://github.com/nrk/predis
012 */
013 class Redis implements TokenStorageInterface
014 {
015 /**
016 * @var string
017 */
018 protected $key;
019
020 protected $stateKey;
021
022 /**
023 * @var object|\Redis
024 */
025 protected $redis;
026
027 /**
028 * @var object|TokenInterface
029 */
030 protected $cachedTokens;
031
032 /**
033 * @var object
034 */
035 protected $cachedStates;
036
037 /**
038 * @param Predis $redis An instantiated and connected redis client
039 * @param string $key The key to store the token under in redis
040 * @param string $stateKey The key to store the state under in redis.
041 */
042 public function __construct(Predis $redis, $key, $stateKey)
043 {
044 $this->redis = $redis;
045 $this->key = $key;
046 $this->stateKey = $stateKey;
047 $this->cachedTokens = array();
048 $this->cachedStates = array();
049 }
050
051 /**
052 * {@inheritDoc}
053 */
054 public function retrieveAccessToken($service)
055 {
056 if (!$this->hasAccessToken($service)) {
057 throw new TokenNotFoundException('Token not found in redis');
058 }
059
060 if (isset($this->cachedTokens[$service])) {
061 return $this->cachedTokens[$service];
062 }
063
064 $val = $this->redis->hget($this->key, $service);
065
066 return $this->cachedTokens[$service] = unserialize($val);
067 }
068
069 /**
070 * {@inheritDoc}
071 */
072 public function storeAccessToken($service, TokenInterface $token)
073 {
074 // (over)write the token
075 $this->redis->hset($this->key, $service, serialize($token));
076 $this->cachedTokens[$service] = $token;
077
078 // allow chaining
079 return $this;
080 }
081
082 /**
083 * {@inheritDoc}
084 */
085 public function hasAccessToken($service)
086 {
087 if (isset($this->cachedTokens[$service])
088 && $this->cachedTokens[$service] instanceof TokenInterface
089 ) {
090 return true;
091 }
092
093 return $this->redis->hexists($this->key, $service);
094 }
095
096 /**
097 * {@inheritDoc}
098 */
099 public function clearToken($service)
100 {
101 $this->redis->hdel($this->key, $service);
102 unset($this->cachedTokens[$service]);
103
104 // allow chaining
105 return $this;
106 }
107
108 /**
109 * {@inheritDoc}
110 */
111 public function clearAllTokens()
112 {
113 // memory
114 $this->cachedTokens = array();
115
116 // redis
117 $keys = $this->redis->hkeys($this->key);
118 $me = $this; // 5.3 compat
119
120 // pipeline for performance
121 $this->redis->pipeline(
122 function ($pipe) use ($keys, $me) {
123 foreach ($keys as $k) {
124 $pipe->hdel($me->getKey(), $k);
125 }
126 }
127 );
128
129 // allow chaining
130 return $this;
131 }
132
133 /**
134 * {@inheritDoc}
135 */
136 public function retrieveAuthorizationState($service)
137 {
138 if (!$this->hasAuthorizationState($service)) {
139 throw new AuthorizationStateNotFoundException('State not found in redis');
140 }
141
142 if (isset($this->cachedStates[$service])) {
143 return $this->cachedStates[$service];
144 }
145
146 $val = $this->redis->hget($this->stateKey, $service);
147
148 return $this->cachedStates[$service] = $val;
149 }
150
151 /**
152 * {@inheritDoc}
153 */
154 public function storeAuthorizationState($service, $state)
155 {
156 // (over)write the token
157 $this->redis->hset($this->stateKey, $service, $state);
158 $this->cachedStates[$service] = $state;
159
160 // allow chaining
161 return $this;
162 }
163
164 /**
165 * {@inheritDoc}
166 */
167 public function hasAuthorizationState($service)
168 {
169 if (isset($this->cachedStates[$service])
170 && null !== $this->cachedStates[$service]
171 ) {
172 return true;
173 }
174
175 return $this->redis->hexists($this->stateKey, $service);
176 }
177
178 /**
179 * {@inheritDoc}
180 */
181 public function clearAuthorizationState($service)
182 {
183 $this->redis->hdel($this->stateKey, $service);
184 unset($this->cachedStates[$service]);
185
186 // allow chaining
187 return $this;
188 }
189
190 /**
191 * {@inheritDoc}
192 */
193 public function clearAllAuthorizationStates()
194 {
195 // memory
196 $this->cachedStates = array();
197
198 // redis
199 $keys = $this->redis->hkeys($this->stateKey);
200 $me = $this; // 5.3 compat
201
202 // pipeline for performance
203 $this->redis->pipeline(
204 function ($pipe) use ($keys, $me) {
205 foreach ($keys as $k) {
206 $pipe->hdel($me->getKey(), $k);
207 }
208 }
209 );
210
211 // allow chaining
212 return $this;
213 }
214
215 /**
216 * @return Predis $redis
217 */
218 public function getRedis()
219 {
220 return $this->redis;
221 }
222
223 /**
224 * @return string $key
225 */
226 public function getKey()
227 {
228 return $this->key;
229 }
230 }
231