Skip to content

Instantly share code, notes, and snippets.

@rcmachado
Created May 8, 2014 14:53
Show Gist options
  • Select an option

  • Save rcmachado/4c364e6c08ed5d590299 to your computer and use it in GitHub Desktop.

Select an option

Save rcmachado/4c364e6c08ed5d590299 to your computer and use it in GitHub Desktop.

Revisions

  1. rcmachado created this gist May 8, 2014.
    199 changes: 199 additions & 0 deletions Symfony1Storage.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,199 @@
    <?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;
    }
    }