Version 5.1 - All the GraphQL #32

Closed
timw4mail wants to merge 1160 commits from develop into master
3 changed files with 102 additions and 2 deletions
Showing only changes of commit 8bfc9fcc6e - Show all commits

View File

@ -26,6 +26,8 @@ class Kitsu {
const AUTH_URL = 'https://kitsu.io/api/oauth/token'; const AUTH_URL = 'https://kitsu.io/api/oauth/token';
const AUTH_USER_ID_KEY = 'kitsu-auth-userid'; const AUTH_USER_ID_KEY = 'kitsu-auth-userid';
const AUTH_TOKEN_CACHE_KEY = 'kitsu-auth-token'; const AUTH_TOKEN_CACHE_KEY = 'kitsu-auth-token';
const AUTH_TOKEN_EXP_CACHE_KEY = 'kitsu-auth-token-expires';
const AUTH_TOKEN_REFRESH_CACHE_KEY = 'kitsu-auth-token-refresh';
/** /**
* Determine whether an anime is airing, finished airing, or has not yet aired * Determine whether an anime is airing, finished airing, or has not yet aired

View File

@ -90,13 +90,74 @@ class Auth {
$cacheItem->set($auth['access_token']); $cacheItem->set($auth['access_token']);
$cacheItem->save(); $cacheItem->save();
// Set the token expiration in the cache
$expire_time = $auth['created_at'] + $auth['expires_in'];
$cacheItem = $this->cache->getItem(K::AUTH_TOKEN_EXP_CACHE_KEY);
$cacheItem->set($expire_time);
$cacheItem->save();
// Set the refresh token in the cache
$cacheItem = $this->cache->getItem(K::AUTH_TOKEN_REFRESH_CACHE_KEY);
$cacheItem->set($auth['refresh_token']);
$cacheItem->save();
// Set the session values
$this->segment->set('auth_token', $auth['access_token']); $this->segment->set('auth_token', $auth['access_token']);
$this->segment->set('auth_token_expires', $expire_time);
$this->segment->set('refresh_token', $auth['refresh_token']);
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
/**
* Make the call to re-authenticate with the existing refresh token
*
* @param string $token
* @return boolean
*/
public function reAuthenticate(string $token)
{
try
{
$auth = $this->model->reAuthenticate($token);
}
catch (Exception $e)
{
return FALSE;
}
if (FALSE !== $auth)
{
// Set the token in the cache for command line operations
$cacheItem = $this->cache->getItem(K::AUTH_TOKEN_CACHE_KEY);
$cacheItem->set($auth['access_token']);
$cacheItem->save();
// Set the token expiration in the cache
$expire_time = $auth['created_at'] + $auth['expires_in'];
$cacheItem = $this->cache->getItem(K::AUTH_TOKEN_EXP_CACHE_KEY);
$cacheItem->set($expire_time);
$cacheItem->save();
// Set the refresh token in the cache
$cacheItem = $this->cache->getItem(K::AUTH_TOKEN_REFRESH_CACHE_KEY);
$cacheItem->set($auth['refresh_token']);
$cacheItem->save();
// Set the session values
$this->segment->set('auth_token', $auth['access_token']);
$this->segment->set('auth_token_expires', $expire_time);
$this->segment->set('refresh_token', $auth['refresh_token']);
return TRUE;
}
return FALSE;
}
/** /**
* Check whether the current user is authenticated * Check whether the current user is authenticated
* *
@ -124,7 +185,18 @@ class Auth {
*/ */
public function get_auth_token() public function get_auth_token()
{ {
return $this->segment->get('auth_token', FALSE); $token = $this->segment->get('auth_token', FALSE);
$refresh_token = $this->segment->get('refresh_token', FALSE);
$isExpired = time() > $this->segment->get('auth_token_expires', 0);
// Attempt to re-authenticate with refresh token
if ($isExpired && $refresh_token)
{
$reauthenticated = $this->reAuthenticate($refresh_token);
return $this->segment->get('auth_token', FALSE);
}
return $token;
} }
} }
// End of KitsuAuth.php // End of KitsuAuth.php

View File

@ -97,7 +97,7 @@ class Model {
* *
* @param string $username * @param string $username
* @param string $password * @param string $password
* @return bool|string * @return bool|array
*/ */
public function authenticate(string $username, string $password) public function authenticate(string $username, string $password)
{ {
@ -120,6 +120,32 @@ class Model {
return FALSE; return FALSE;
} }
/**
* Extend the current session with a refresh token
*
* @param string $token
* @return bool|array
*/
public function reAuthenticate(string $token)
{
$response = $this->getResponse('POST', K::AUTH_URL, [
'headers' => [],
'form_params' => [
'grant_type' => 'refresh_token',
'refresh_token' => $token
]
]);
$data = Json::decode((string)$response->getBody());
if (array_key_exists('access_token', $data))
{
return $data;
}
return FALSE;
}
/** /**
* Get the userid for a username from Kitsu * Get the userid for a username from Kitsu
* *