Вход Регистрация
Файл: forsoc.ru/vendor/lusitanian/oauth/src/OAuth/Common/Storage/Redis.php
Строк: 114
<?php

namespace OAuthCommonStorage;

use 
OAuthCommonTokenTokenInterface;
use 
OAuthCommonStorageExceptionTokenNotFoundException;
use 
PredisClient as Predis;

/*
 * Stores a token in a Redis server. Requires the Predis library available at https://github.com/nrk/predis
 */
class Redis implements TokenStorageInterface
{
    
/**
     * @var string
     */
    
protected $key;

    
/**
     * @var object|Redis
     */
    
protected $redis;

    
/**
     * @var object|TokenInterface
     */
    
protected $cachedTokens;

    
/**
     * @param Predis $redis An instantiated and connected redis client
     * @param string $key   The key to store the token under in redis.
     */
    
public function __construct(Predis $redis$key)
    {
        
$this->redis $redis;
        
$this->key $key;
        
$this->cachedTokens = array();
    }

    
/**
     * {@inheritDoc}
     */
    
public function retrieveAccessToken($service)
    {
        if (!
$this->hasAccessToken($service)) {
            throw new 
TokenNotFoundException('Token not found in redis');
        }

        if (isset(
$this->cachedTokens[$service])) {
            return 
$this->cachedTokens[$service];
        }

        
$val $this->redis->hget($this->key$service);

        return 
$this->cachedTokens[$service] = unserialize($val);
    }

    
/**
     * {@inheritDoc}
     */
    
public function storeAccessToken($serviceTokenInterface $token)
    {
        
// (over)write the token
        
$this->redis->hset($this->key$serviceserialize($token));
        
$this->cachedTokens[$service] = $token;

        
// allow chaining
        
return $this;
    }

    
/**
     * {@inheritDoc}
     */
    
public function hasAccessToken($service)
    {
        if (isset(
$this->cachedTokens[$service])
            && 
$this->cachedTokens[$service] instanceof TokenInterface
        
) {
            return 
true;
        }

        return 
$this->redis->hexists($this->key$service);
    }

    
/**
     * {@inheritDoc}
     */
    
public function clearToken($service)
    {
        
$this->redis->hdel($this->key$service);
        unset(
$this->cachedTokens[$service]);

        
// allow chaining
        
return $this;
    }

    
/**
     * {@inheritDoc}
     */
    
public function clearAllTokens()
    {
        
// memory
        
$this->cachedTokens = array();

        
// redis
        
$keys $this->redis->hkeys($this->key);
        
$me $this// 5.3 compat

        // pipeline for performance
        
$this->redis->pipeline(
            function (
$pipe) use ($keys$me) {
                foreach (
$keys as $k) {
                    
$pipe->hdel($me->getKey(), $k);
                }
            }
        );

        
// allow chaining
        
return $this;
    }

    
/**
     * @return Predis $redis
     */
    
public function getRedis()
    {
        return 
$this->redis;
    }

    
/**
     * @return string $key
     */
    
public function getKey()
    {
        return 
$this->key;
    }
}
Онлайн: 1
Реклама