Cloud: save expiration timestamp for access token.

Expired access tokens are ignored when reading from file.
This commit is contained in:
Kristian Bendiksen 2024-07-13 11:12:53 +02:00
parent 3e2af38c90
commit 2aa1bfe940
2 changed files with 18 additions and 2 deletions

View File

@ -124,7 +124,10 @@ RiaCloudConnector::RiaCloudConnector( QObject* parent,
&QOAuth2AuthorizationCodeFlow::expirationAtChanged,
this,
[&]( const QDateTime& expiration )
{ RiaLogging::debug( QString( "Access token expiration changed: %1" ).arg( expiration.toString() ) ); } );
{
RiaLogging::debug( QString( "Access token expiration changed: %1" ).arg( expiration.toString() ) );
exportTokenToFile();
} );
}
//--------------------------------------------------------------------------------------------------

View File

@ -34,6 +34,10 @@ QString RiaConnectorTools::tokenDataAsJson( QOAuth2AuthorizationCodeFlow* authCo
QJsonObject obj;
obj.insert( "token", authCodeFlow->token() );
obj.insert( "refreshToken", authCodeFlow->refreshToken() );
if ( authCodeFlow->expirationAt().isValid() )
{
obj.insert( "expiration", authCodeFlow->expirationAt().toSecsSinceEpoch() );
}
QJsonDocument doc( obj );
return doc.toJson( QJsonDocument::Indented );
@ -47,7 +51,16 @@ void RiaConnectorTools::initializeTokenDataFromJson( QOAuth2AuthorizationCodeFlo
QJsonDocument doc = QJsonDocument::fromJson( tokenDataJson.toUtf8() );
QJsonObject obj = doc.object();
authCodeFlow->setToken( obj["token"].toString() );
if ( obj.contains( "expiration" ) && obj.contains( "token" ) )
{
quint64 secondsSinceEpoch = obj["expiration"].toVariant().toULongLong();
QDateTime expiration = QDateTime::fromSecsSinceEpoch( secondsSinceEpoch );
if ( expiration.isValid() && expiration > QDateTime::currentDateTime() )
{
authCodeFlow->setToken( obj["token"].toString() );
}
}
authCodeFlow->setRefreshToken( obj["refreshToken"].toString() );
}