Created
May 8, 2014 14:53
-
-
Save rcmachado/4c364e6c08ed5d590299 to your computer and use it in GitHub Desktop.
Symfony 1.x storage class for use with https://github.com/Lusitanian/PHPoAuthLib.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use \OAuth\Common\Token\TokenInterface; | |
use \OAuth\Common\Storage\Exception\TokenNotFoundException; | |
use \OAuth\Common\Storage\Exception\AuthorizationStateNotFoundException; | |
use \OAuth\Common\Storage\TokenStorageInterface; | |
use \sfStorage; | |
class Symfony1Storage implements TokenStorageInterface | |
{ | |
private $session; | |
private $sessionVariableName; | |
private $stateVariableName; | |
/** | |
* @param SessionInterface $session | |
* @param bool $startSession | |
* @param string $sessionVariableName | |
* @param string $stateVariableName | |
*/ | |
public function __construct( | |
sfStorage $session, | |
$startSession = false, | |
$sessionVariableName = 'lusitanian_oauth_token', | |
$stateVariableName = 'lusitanian_oauth_state' | |
) { | |
$this->session = $session; | |
$this->sessionVariableName = $sessionVariableName; | |
$this->stateVariableName = $stateVariableName; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function retrieveAccessToken($service) | |
{ | |
if ($this->hasAccessToken($service)) { | |
// get from session | |
$tokens = $this->session->read($this->sessionVariableName); | |
// one item | |
return $tokens[$service]; | |
} | |
throw new TokenNotFoundException('Token not found in session, are you sure you stored it?'); | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function storeAccessToken($service, TokenInterface $token) | |
{ | |
// get previously saved tokens | |
$tokens = $this->session->read($this->sessionVariableName); | |
if (!is_array($tokens)) { | |
$tokens = array(); | |
} | |
$tokens[$service] = $token; | |
// save | |
$this->session->write($this->sessionVariableName, $tokens); | |
// allow chaining | |
return $this; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function hasAccessToken($service) | |
{ | |
// get from session | |
$tokens = $this->session->read($this->sessionVariableName); | |
return is_array($tokens) | |
&& isset($tokens[$service]) | |
&& $tokens[$service] instanceof TokenInterface; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function clearToken($service) | |
{ | |
// get previously saved tokens | |
$tokens = $this->session->read($this->sessionVariableName); | |
if (is_array($tokens) && array_key_exists($service, $tokens)) { | |
unset($tokens[$service]); | |
// Replace the stored tokens array | |
$this->session->write($this->sessionVariableName, $tokens); | |
} | |
// allow chaining | |
return $this; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function clearAllTokens() | |
{ | |
$this->session->remove($this->sessionVariableName); | |
// allow chaining | |
return $this; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function retrieveAuthorizationState($service) | |
{ | |
if ($this->hasAuthorizationState($service)) { | |
// get from session | |
$states = $this->session->write($this->stateVariableName); | |
// one item | |
return $states[$service]; | |
} | |
throw new AuthorizationStateNotFoundException('State not found in session, are you sure you stored it?'); | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function storeAuthorizationState($service, $state) | |
{ | |
// get previously saved tokens | |
$states = $this->session->read($this->stateVariableName); | |
if (!is_array($states)) { | |
$states = array(); | |
} | |
$states[$service] = $state; | |
// save | |
$this->session->write($this->stateVariableName, $states); | |
// allow chaining | |
return $this; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function hasAuthorizationState($service) | |
{ | |
// get from session | |
$states = $this->session->read($this->stateVariableName); | |
return is_array($states) | |
&& isset($states[$service]) | |
&& null !== $states[$service]; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function clearAuthorizationState($service) | |
{ | |
// get previously saved tokens | |
$states = $this->session->read($this->stateVariableName); | |
if (is_array($states) && array_key_exists($service, $states)) { | |
unset($states[$service]); | |
// Replace the stored tokens array | |
$this->session->write($this->stateVariableName, $states); | |
} | |
// allow chaining | |
return $this; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function clearAllAuthorizationStates() | |
{ | |
$this->session->remove($this->stateVariableName); | |
// allow chaining | |
return $this; | |
} | |
/** | |
* @return Session | |
*/ | |
public function getSession() | |
{ | |
return $this->session; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment