From e194a3ef0851f2c20999d544ed57468b64682aa5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2017 08:25:40 +0200 Subject: [PATCH] Work on oauth workflow. --- src/services/inoreader/definitions.h | 2 + .../inoreader/gui/formeditinoreaderaccount.ui | 69 +++++++++++++++---- .../network/inoreadernetworkfactory.cpp | 17 ++++- .../network/inoreadernetworkfactory.h | 3 + 4 files changed, 77 insertions(+), 14 deletions(-) diff --git a/src/services/inoreader/definitions.h b/src/services/inoreader/definitions.h index 4902564bd..8a78f34b1 100755 --- a/src/services/inoreader/definitions.h +++ b/src/services/inoreader/definitions.h @@ -25,5 +25,7 @@ #define INOREADER_OAUTH_AUTH_URL "https://www.inoreader.com/oauth2/auth" #define INOREADER_OAUTH_CLI_ID "1000000604" #define INOREADER_OAUTH_CLI_KEY "gsStoZ3aAoQJCgQxoFSuXkWI7Sly87yK" +#define INOREADER_REFRESH_TOKEN_KEY "refresh_token" +#define INOREADER_ACCESS_TOKEN_KEY "access_token" #endif // INOREADER_DEFINITIONS_H diff --git a/src/services/inoreader/gui/formeditinoreaderaccount.ui b/src/services/inoreader/gui/formeditinoreaderaccount.ui index 3493f9386..b624e4acb 100755 --- a/src/services/inoreader/gui/formeditinoreaderaccount.ui +++ b/src/services/inoreader/gui/formeditinoreaderaccount.ui @@ -7,25 +7,44 @@ 0 0 400 - 157 + 180 Dialog - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + Only download newest X messages per feed - - + + + + + 140 + 16777215 + + + + = unlimited + + + -1 + + + 1000 + + + -1 + + + + + @@ -36,9 +55,9 @@ - + 0 - 0 + 1 @@ -48,6 +67,29 @@ + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Vertical + + + + 20 + 90 + + + + @@ -59,6 +101,7 @@ + m_spinLimitMessages m_btnTestSetup diff --git a/src/services/inoreader/network/inoreadernetworkfactory.cpp b/src/services/inoreader/network/inoreadernetworkfactory.cpp index 90d52a79c..1e7f16eae 100755 --- a/src/services/inoreader/network/inoreadernetworkfactory.cpp +++ b/src/services/inoreader/network/inoreadernetworkfactory.cpp @@ -38,7 +38,8 @@ bool InoreaderNetworkFactory::isLoggedIn() const { } void InoreaderNetworkFactory::logIn() { - if (!m_oauth2.expirationAt().isNull() && m_oauth2.expirationAt() <= QDateTime::currentDateTime()) { + if (!m_oauth2.expirationAt().isNull() && m_oauth2.expirationAt() <= QDateTime::currentDateTime() && !m_refreshToken.isEmpty()) { + // We have some refresh token which expired. m_oauth2.refreshAccessToken(); } else { @@ -73,6 +74,19 @@ void InoreaderNetworkFactory::initializeOauth() { connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](QAbstractOAuth::Status status) { qDebug("Inoreader: Status changed to '%d'.", (int)status); }); + connect(oauth_reply_handler, &QOAuthHttpServerReplyHandler::tokensReceived, [this](QVariantMap tokens) { + qDebug() << "Inoreader: Tokens received:" << tokens; + + if (tokens.contains(QSL(INOREADER_REFRESH_TOKEN_KEY))) { + m_refreshToken = tokens.value(QSL(INOREADER_REFRESH_TOKEN_KEY)).toString(); + } + + if (tokens.contains(QSL(INOREADER_ACCESS_TOKEN_KEY))) { + m_accessToken = tokens.value(QSL(INOREADER_ACCESS_TOKEN_KEY)).toString(); + } + + emit tokensRefreshed(); + }); m_oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QVariantMap* parameters) { qDebug() << "Inoreader: Set modify parameters for stage" << (int)stage << "called: \n" << parameters; }); @@ -85,6 +99,7 @@ void InoreaderNetworkFactory::initializeOauth() { Q_UNUSED(uri) qCritical("Inoreader: We have error: '%s'.", qPrintable(error_description)); + m_accessToken = m_refreshToken = QString(); emit error(error_description); }); connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, [](const QUrl& url) { diff --git a/src/services/inoreader/network/inoreadernetworkfactory.h b/src/services/inoreader/network/inoreadernetworkfactory.h index 359214224..50dd080a1 100755 --- a/src/services/inoreader/network/inoreadernetworkfactory.h +++ b/src/services/inoreader/network/inoreadernetworkfactory.h @@ -37,6 +37,7 @@ class InoreaderNetworkFactory : public QObject { signals: void accessGranted(); + void tokensRefreshed(); void error(QString& description); private: @@ -44,6 +45,8 @@ class InoreaderNetworkFactory : public QObject { private: QOAuth2AuthorizationCodeFlow m_oauth2; + QString m_accessToken; + QString m_refreshToken; }; #endif // INOREADERNETWORKFACTORY_H