mirror of
https://github.com/YunoHost-Apps/kanboard_ynh.git
synced 2024-09-03 19:36:17 +02:00
201 lines
4.8 KiB
PHP
201 lines
4.8 KiB
PHP
|
<?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;
|
||
|
}
|
||
|
}
|