$this->config['traktClientId'],
'clientSecret' => $this->config['traktClientSecret'],
'redirectUri' => $this->getServerPath() . 'api/v2/oauth/trakt'
],
[
'httpClient' => new GuzzleHttp\Client(['verify' => $this->getCert()]),
]
);
if (!isset($_GET['code'])) {
$authUrl = $provider->getAuthorizationUrl();
header('Location: ' . $authUrl);
exit;
} elseif (empty($_GET['state'])) {
exit('Invalid state');
} else {
try {
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
$traktDetails = [
'traktAccessToken' => $token->getToken(),
'traktAccessTokenExpires' => gmdate('Y-m-d\TH:i:s\Z', $token->getExpires()),
'traktRefreshToken' => $token->getRefreshToken()
];
$this->updateConfig($traktDetails);
echo '
Trakt OAuth
';
exit;
} catch (\League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
exit($e->getMessage());
}
}
}
public function traktOAuthRefresh()
{
$exp = $this->config['traktAccessTokenExpires'];
$exp = date('Y-m-d\TH:i:s\Z', strtotime($exp . ' - 30 days'));
if (time() - 2592000 > strtotime($exp)) {
$headers = [
'Content-Type' => 'application/json'
];
$data = [
'refresh_token' => $this->config['traktRefreshToken'],
'clientId' => $this->config['traktClientId'],
'clientSecret' => $this->config['traktClientSecret'],
'redirectUri' => $this->getServerPath() . 'api/v2/oauth/trakt',
'grant_type' => 'refresh_token'
];
$url = $this->qualifyURL('https://api.trakt.tv/oauth/token');
try {
$response = Requests::post($url, $headers, json_encode($data), []);
if ($response->success) {
$data = json_decode($response->body, true);
$newExp = date('Y-m-d\TH:i:s\Z', strtotime($this->currentTime . ' + 90 days'));
$traktDetails = [
'traktAccessToken' => $data['access_token'],
'traktAccessTokenExpires' => $newExp,
'traktRefreshToken' => $data['refresh_token']
];
$this->updateConfig($traktDetails);
return true;
}
} catch (Requests_Exception $e) {
$this->setLoggerChannel('Trakt')->error($e);
$this->setResponse(500, $e->getMessage());
return false;
}
}
}
}