mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 11:42:55 +02:00
Merge pull request #10544 from birarda/bug/refresh-access-token
require a valid access token and expiry to attempt token refresh
This commit is contained in:
commit
a0484c5f0b
1 changed files with 25 additions and 19 deletions
|
@ -193,7 +193,6 @@ void AccountManager::setAuthURL(const QUrl& authURL) {
|
||||||
|
|
||||||
// prepare to refresh our token if it is about to expire
|
// prepare to refresh our token if it is about to expire
|
||||||
if (needsToRefreshToken()) {
|
if (needsToRefreshToken()) {
|
||||||
qCDebug(networking) << "Refreshing access token since it will be expiring soon.";
|
|
||||||
refreshAccessToken();
|
refreshAccessToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,7 +456,6 @@ bool AccountManager::hasValidAccessToken() {
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (!_isWaitingForTokenRefresh && needsToRefreshToken()) {
|
if (!_isWaitingForTokenRefresh && needsToRefreshToken()) {
|
||||||
qCDebug(networking) << "Refreshing access token since it will be expiring soon.";
|
|
||||||
refreshAccessToken();
|
refreshAccessToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,7 +475,7 @@ bool AccountManager::checkAndSignalForAccessToken() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AccountManager::needsToRefreshToken() {
|
bool AccountManager::needsToRefreshToken() {
|
||||||
if (!_accountInfo.getAccessToken().token.isEmpty()) {
|
if (!_accountInfo.getAccessToken().token.isEmpty() && _accountInfo.getAccessToken().expiryTimestamp > 0) {
|
||||||
qlonglong expireThreshold = QDateTime::currentDateTime().addSecs(1 * 60 * 60).toMSecsSinceEpoch();
|
qlonglong expireThreshold = QDateTime::currentDateTime().addSecs(1 * 60 * 60).toMSecsSinceEpoch();
|
||||||
return _accountInfo.getAccessToken().expiryTimestamp < expireThreshold;
|
return _accountInfo.getAccessToken().expiryTimestamp < expireThreshold;
|
||||||
} else {
|
} else {
|
||||||
|
@ -555,28 +553,36 @@ void AccountManager::requestAccessTokenWithSteam(QByteArray authSessionTicket) {
|
||||||
|
|
||||||
void AccountManager::refreshAccessToken() {
|
void AccountManager::refreshAccessToken() {
|
||||||
|
|
||||||
_isWaitingForTokenRefresh = true;
|
// we can't refresh our access token if we don't have a refresh token, so check for that first
|
||||||
|
if (!_accountInfo.getAccessToken().refreshToken.isEmpty()) {
|
||||||
|
qCDebug(networking) << "Refreshing access token since it will be expiring soon.";
|
||||||
|
|
||||||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
_isWaitingForTokenRefresh = true;
|
||||||
|
|
||||||
QNetworkRequest request;
|
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||||
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
|
||||||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
|
||||||
|
|
||||||
QUrl grantURL = _authURL;
|
QNetworkRequest request;
|
||||||
grantURL.setPath("/oauth/token");
|
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||||
|
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||||
|
|
||||||
QByteArray postData;
|
QUrl grantURL = _authURL;
|
||||||
postData.append("grant_type=refresh_token&");
|
grantURL.setPath("/oauth/token");
|
||||||
postData.append("refresh_token=" + QUrl::toPercentEncoding(_accountInfo.getAccessToken().refreshToken) + "&");
|
|
||||||
postData.append("scope=" + ACCOUNT_MANAGER_REQUESTED_SCOPE);
|
|
||||||
|
|
||||||
request.setUrl(grantURL);
|
QByteArray postData;
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
|
postData.append("grant_type=refresh_token&");
|
||||||
|
postData.append("refresh_token=" + QUrl::toPercentEncoding(_accountInfo.getAccessToken().refreshToken) + "&");
|
||||||
|
postData.append("scope=" + ACCOUNT_MANAGER_REQUESTED_SCOPE);
|
||||||
|
|
||||||
QNetworkReply* requestReply = networkAccessManager.post(request, postData);
|
request.setUrl(grantURL);
|
||||||
connect(requestReply, &QNetworkReply::finished, this, &AccountManager::refreshAccessTokenFinished);
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
|
||||||
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(refreshAccessTokenError(QNetworkReply::NetworkError)));
|
|
||||||
|
QNetworkReply* requestReply = networkAccessManager.post(request, postData);
|
||||||
|
connect(requestReply, &QNetworkReply::finished, this, &AccountManager::refreshAccessTokenFinished);
|
||||||
|
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(refreshAccessTokenError(QNetworkReply::NetworkError)));
|
||||||
|
} else {
|
||||||
|
qCWarning(networking) << "Cannot refresh access token without refresh token."
|
||||||
|
<< "Access token will need to be manually refreshed.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::requestAccessTokenFinished() {
|
void AccountManager::requestAccessTokenFinished() {
|
||||||
|
|
Loading…
Reference in a new issue