AccessTokenRefresh.php in Simple OAuth (OAuth2) & OpenID Connect 8
File
src/Controller/AccessTokenRefresh.php
View source
<?php
namespace Drupal\simple_oauth\Controller;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\simple_oauth\AccessTokenInterface;
use Drupal\simple_oauth\Authentication\TokenAuthUserInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
class AccessTokenRefresh extends ControllerBase {
protected $response;
public function __construct(AccountInterface $current_user, EntityManagerInterface $entity_manager, JsonResponse $response) {
$this->currentUser = $current_user;
$this->entityManager = $entity_manager;
$this->response = $response;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('current_user'), $container
->get('entity.manager'), new JsonResponse());
}
public function refresh() {
$account = $this
->currentUser()
->getAccount();
if (!$account instanceof TokenAuthUserInterface) {
return NULL;
}
$refresh_token = $account
->getToken();
if (!$refresh_token) {
return NULL;
}
$access_token = $refresh_token
->refresh();
if (!$access_token) {
return NULL;
}
$this->response
->setData($this
->normalize($access_token));
return $this->response;
}
protected function normalize(AccessTokenInterface $token) {
$storage = $this
->entityManager()
->getStorage('access_token');
$ids = $storage
->getQuery()
->condition('access_token_id', $token
->id())
->condition('expire', REQUEST_TIME, '>')
->condition('resource', 'authentication')
->range(0, 1)
->execute();
if (empty($ids)) {
return [];
}
$refresh_token = $storage
->load(reset($ids));
if (!$refresh_token || !$refresh_token
->isRefreshToken()) {
return [];
}
return [
'access_token' => $token
->get('value')->value,
'token_type' => 'Bearer',
'expires_in' => $token
->get('expire')->value - REQUEST_TIME,
'refresh_token' => $refresh_token
->get('value')->value,
];
}
}