| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- namespace OAuth\Common\Storage;
- use OAuth\Common\Token\TokenInterface;
- use OAuth\Common\Storage\Exception\TokenNotFoundException;
- use OAuth\Common\Storage\Exception\AuthorizationStateNotFoundException;
- /**
- * Stores a token in a PHP session.
- */
- class Session implements TokenStorageInterface
- {
- /**
- * @var bool
- */
- protected $startSession;
- /**
- * @var string
- */
- protected $sessionVariableName;
- /**
- * @var string
- */
- protected $stateVariableName;
- /**
- * @param bool $startSession Whether or not to start the session upon construction.
- * @param string $sessionVariableName the variable name to use within the _SESSION superglobal
- * @param string $stateVariableName
- */
- public function __construct(
- $startSession = true,
- $sessionVariableName = 'lusitanian-oauth-token',
- $stateVariableName = 'lusitanian-oauth-state'
- ) {
- if ($startSession && !isset($_SESSION)) {
- session_start();
- }
- $this->startSession = $startSession;
- $this->sessionVariableName = $sessionVariableName;
- $this->stateVariableName = $stateVariableName;
- if (!isset($_SESSION[$sessionVariableName])) {
- $_SESSION[$sessionVariableName] = array();
- }
- if (!isset($_SESSION[$stateVariableName])) {
- $_SESSION[$stateVariableName] = array();
- }
- }
- /**
- * {@inheritDoc}
- */
- public function retrieveAccessToken($service)
- {
- if ($this->hasAccessToken($service)) {
- return unserialize($_SESSION[$this->sessionVariableName][$service]);
- }
- throw new TokenNotFoundException('Token not found in session, are you sure you stored it?');
- }
- /**
- * {@inheritDoc}
- */
- public function storeAccessToken($service, TokenInterface $token)
- {
- $serializedToken = serialize($token);
- if (isset($_SESSION[$this->sessionVariableName])
- && is_array($_SESSION[$this->sessionVariableName])
- ) {
- $_SESSION[$this->sessionVariableName][$service] = $serializedToken;
- } else {
- $_SESSION[$this->sessionVariableName] = array(
- $service => $serializedToken,
- );
- }
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function hasAccessToken($service)
- {
- return isset($_SESSION[$this->sessionVariableName], $_SESSION[$this->sessionVariableName][$service]);
- }
- /**
- * {@inheritDoc}
- */
- public function clearToken($service)
- {
- if (array_key_exists($service, $_SESSION[$this->sessionVariableName])) {
- unset($_SESSION[$this->sessionVariableName][$service]);
- }
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function clearAllTokens()
- {
- unset($_SESSION[$this->sessionVariableName]);
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function storeAuthorizationState($service, $state)
- {
- if (isset($_SESSION[$this->stateVariableName])
- && is_array($_SESSION[$this->stateVariableName])
- ) {
- $_SESSION[$this->stateVariableName][$service] = $state;
- } else {
- $_SESSION[$this->stateVariableName] = array(
- $service => $state,
- );
- }
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function hasAuthorizationState($service)
- {
- return isset($_SESSION[$this->stateVariableName], $_SESSION[$this->stateVariableName][$service]);
- }
- /**
- * {@inheritDoc}
- */
- public function retrieveAuthorizationState($service)
- {
- if ($this->hasAuthorizationState($service)) {
- return $_SESSION[$this->stateVariableName][$service];
- }
- throw new AuthorizationStateNotFoundException('State not found in session, are you sure you stored it?');
- }
- /**
- * {@inheritDoc}
- */
- public function clearAuthorizationState($service)
- {
- if (array_key_exists($service, $_SESSION[$this->stateVariableName])) {
- unset($_SESSION[$this->stateVariableName][$service]);
- }
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function clearAllAuthorizationStates()
- {
- unset($_SESSION[$this->stateVariableName]);
- // allow chaining
- return $this;
- }
- public function __destruct()
- {
- if ($this->startSession) {
- session_write_close();
- }
- }
- }
|