| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- <?php
- namespace OAuth\Common\Storage;
- use OAuth\Common\Token\TokenInterface;
- use OAuth\Common\Storage\Exception\TokenNotFoundException;
- use OAuth\Common\Storage\Exception\AuthorizationStateNotFoundException;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- class SymfonySession implements TokenStorageInterface
- {
- private $session;
- private $sessionVariableName;
- private $stateVariableName;
- /**
- * @param SessionInterface $session
- * @param bool $startSession
- * @param string $sessionVariableName
- * @param string $stateVariableName
- */
- public function __construct(
- SessionInterface $session,
- $startSession = true,
- $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->get($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->get($this->sessionVariableName);
- if (!is_array($tokens)) {
- $tokens = array();
- }
- $tokens[$service] = $token;
- // save
- $this->session->set($this->sessionVariableName, $tokens);
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function hasAccessToken($service)
- {
- // get from session
- $tokens = $this->session->get($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->get($this->sessionVariableName);
- if (is_array($tokens) && array_key_exists($service, $tokens)) {
- unset($tokens[$service]);
- // Replace the stored tokens array
- $this->session->set($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->get($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->get($this->stateVariableName);
- if (!is_array($states)) {
- $states = array();
- }
- $states[$service] = $state;
- // save
- $this->session->set($this->stateVariableName, $states);
- // allow chaining
- return $this;
- }
- /**
- * {@inheritDoc}
- */
- public function hasAuthorizationState($service)
- {
- // get from session
- $states = $this->session->get($this->stateVariableName);
- return is_array($states)
- && isset($states[$service])
- && null !== $states[$service];
- }
- /**
- * {@inheritDoc}
- */
- public function clearAuthorizationState($service)
- {
- // get previously saved tokens
- $states = $this->session->get($this->stateVariableName);
- if (is_array($states) && array_key_exists($service, $states)) {
- unset($states[$service]);
- // Replace the stored tokens array
- $this->session->set($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;
- }
- }
|