diff --git a/src/gui/dialogs/oauthlogin.ui b/src/gui/dialogs/oauthlogin.ui
index 6d8f78196..066725e0b 100755
--- a/src/gui/dialogs/oauthlogin.ui
+++ b/src/gui/dialogs/oauthlogin.ui
@@ -6,8 +6,8 @@
0
0
- 645
- 310
+ 577
+ 412
diff --git a/src/network-web/oauth2service.cpp b/src/network-web/oauth2service.cpp
index e9d6bd9b5..a651487a7 100755
--- a/src/network-web/oauth2service.cpp
+++ b/src/network-web/oauth2service.cpp
@@ -66,7 +66,7 @@ OAuth2Service::OAuth2Service(QString authUrl, QString tokenUrl, QString clientId
connect(this, &OAuth2Service::authCodeObtained, this, &OAuth2Service::retrieveAccessToken);
}
-void OAuth2Service::setBearerHeader(QNetworkRequest& req) {
+void OAuth2Service::attachBearerHeader(QNetworkRequest& req) {
req.setRawHeader(QString("Authorization").toLocal8Bit(), QString("Bearer %1").arg(m_accessToken).toLocal8Bit());
}
@@ -74,7 +74,7 @@ void OAuth2Service::setOAuthTokenGrantType(QString oAuthTokenGrantType) {
m_tokenGrantType = oAuthTokenGrantType;
}
-QString OAuth2Service::oAuthTokenGrantType() {
+QString OAuth2Service::grant_type() {
return m_tokenGrantType;
}
@@ -120,6 +120,10 @@ void OAuth2Service::refreshAccessToken(QString refresh_token) {
m_networkManager.post(networkRequest, content.toUtf8());
}
+void OAuth2Service::cleanTokens() {
+ m_refreshToken = m_accessToken = QString();
+}
+
void OAuth2Service::tokenRequestFinished(QNetworkReply* networkReply) {
QJsonDocument jsonDocument = QJsonDocument::fromJson(networkReply->readAll());
QJsonObject rootObject = jsonDocument.object();
@@ -127,9 +131,12 @@ void OAuth2Service::tokenRequestFinished(QNetworkReply* networkReply) {
qDebug() << "Token response:";
qDebug() << jsonDocument.toJson();
- if(rootObject.keys().contains("error")) {
+ if (rootObject.keys().contains("error")) {
QString error = rootObject.value("error").toString();
QString error_description = rootObject.value("error_description").toString();
+
+ cleanTokens();
+
emit tokenRetrieveError(error, error_description);
}
else {
@@ -138,7 +145,7 @@ void OAuth2Service::tokenRequestFinished(QNetworkReply* networkReply) {
// TODO: Start timer to refresh tokens.
- emit accessTokenReceived(m_accessToken, m_refreshToken, rootObject.value("expires_in").toInt());
+ emit tokensReceived(m_accessToken, m_refreshToken, rootObject.value("expires_in").toInt());
}
networkReply->deleteLater();
@@ -152,6 +159,14 @@ void OAuth2Service::setRefreshToken(const QString& refresh_token) {
m_refreshToken = refresh_token;
}
+void OAuth2Service::login() {
+ // TODO: ted se rovnou vola autorizace (prihlasovaci dialog)
+ // ale vylepsit a v pripade ze je zadan refresh token,,
+ // tak nejdříve zkusit obnovit? a začátek procesu
+ // volat jen když je to fakt potřeba.
+ retrieveAuthCode();
+}
+
void OAuth2Service::retrieveAuthCode() {
QString auth_url = m_authUrl + QString("?client_id=%1&scope=%2&"
"redirect_uri=%3&response_type=code&state=abcdef").arg(m_clientId,
@@ -160,7 +175,10 @@ void OAuth2Service::retrieveAuthCode() {
OAuthLogin login_page(qApp->mainFormWidget());
connect(&login_page, &OAuthLogin::authGranted, this, &OAuth2Service::authCodeObtained);
- connect(&login_page, &OAuthLogin::authRejected, this, &OAuth2Service::authFailed);
+ connect(&login_page, &OAuthLogin::authRejected, [this]() {
+ cleanTokens();
+ emit authFailed();
+ });
login_page.login(auth_url, m_redirectUri);
}
diff --git a/src/network-web/oauth2service.h b/src/network-web/oauth2service.h
index bebc1a0a8..d91555e6b 100755
--- a/src/network-web/oauth2service.h
+++ b/src/network-web/oauth2service.h
@@ -52,10 +52,10 @@ class OAuth2Service : public QObject {
explicit OAuth2Service(QString authUrl, QString tokenUrl, QString clientId,
QString clientSecret, QString scope, QObject* parent = 0);
- void setBearerHeader(QNetworkRequest& req);
+ void attachBearerHeader(QNetworkRequest& req);
- void setOAuthTokenGrantType(QString oAuthTokenGrantType);
- QString oAuthTokenGrantType();
+ void setOAuthTokenGrantType(QString grant_type);
+ QString grant_type();
QString accessToken() const;
void setAccessToken(const QString& access_token);
@@ -64,7 +64,7 @@ class OAuth2Service : public QObject {
void setRefreshToken(const QString& refresh_token);
signals:
- void accessTokenReceived(QString access_token, QString refresh_token, int expires_in);
+ void tokensReceived(QString access_token, QString refresh_token, int expires_in);
void tokenRetrieveError(QString error, QString error_description);
// User failed to authenticate or rejected it.
@@ -74,11 +74,13 @@ class OAuth2Service : public QObject {
void authCodeObtained(QString auth_code);
public slots:
+ void login();
void retrieveAuthCode();
void retrieveAccessToken(QString auth_code);
void refreshAccessToken(QString refresh_token = QString());
private slots:
+ void cleanTokens();
void tokenRequestFinished(QNetworkReply* networkReply);
private:
diff --git a/src/services/inoreader/gui/formeditinoreaderaccount.cpp b/src/services/inoreader/gui/formeditinoreaderaccount.cpp
index ae7c1fa51..cdffbb525 100755
--- a/src/services/inoreader/gui/formeditinoreaderaccount.cpp
+++ b/src/services/inoreader/gui/formeditinoreaderaccount.cpp
@@ -71,7 +71,7 @@ void FormEditInoreaderAccount::testSetup() {
tr("Access granted successfully."));
}
else {
- m_network->logIn();
+ m_network->login();
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Progress,
tr("Requested access approval. Respond to it, please."),
tr("Access approval was requested via OAuth 2.0 protocol."));
diff --git a/src/services/inoreader/inoreaderserviceroot.cpp b/src/services/inoreader/inoreaderserviceroot.cpp
index fc9119c2d..8c94f12d0 100755
--- a/src/services/inoreader/inoreaderserviceroot.cpp
+++ b/src/services/inoreader/inoreaderserviceroot.cpp
@@ -114,7 +114,7 @@ void InoreaderServiceRoot::start(bool freshly_activated) {
//loadCacheFromFile(accountId());
- m_network->logInIfNeeded();
+ m_network->login();
}
void InoreaderServiceRoot::stop() {}
diff --git a/src/services/inoreader/network/inoreadernetworkfactory.cpp b/src/services/inoreader/network/inoreadernetworkfactory.cpp
index 2c3751d0b..3678162e8 100755
--- a/src/services/inoreader/network/inoreadernetworkfactory.cpp
+++ b/src/services/inoreader/network/inoreadernetworkfactory.cpp
@@ -61,14 +61,8 @@ void InoreaderNetworkFactory::setBatchSize(int batch_size) {
m_batchSize = batch_size;
}
-void InoreaderNetworkFactory::logIn() {
- m_oauth2->retrieveAuthCode();
-}
-
-void InoreaderNetworkFactory::logInIfNeeded() {
- if (!isLoggedIn()) {
- logIn();
- }
+void InoreaderNetworkFactory::login() {
+ m_oauth2->login();
}
void InoreaderNetworkFactory::initializeOauth() {
@@ -91,7 +85,7 @@ RootItem* InoreaderNetworkFactory::feedsCategories(bool obtain_icons) {
QNetworkRequest req(QUrl(INOREADER_API_LIST_LABELS));
- m_oauth2->setBearerHeader(req);
+ m_oauth2->attachBearerHeader(req);
QNetworkReply* reply = SilentNetworkAccessManager::instance()->get(req);
QEventLoop loop;
diff --git a/src/services/inoreader/network/inoreadernetworkfactory.h b/src/services/inoreader/network/inoreadernetworkfactory.h
index 0b9d49d7d..785d7566e 100755
--- a/src/services/inoreader/network/inoreadernetworkfactory.h
+++ b/src/services/inoreader/network/inoreadernetworkfactory.h
@@ -49,8 +49,7 @@ class InoreaderNetworkFactory : public QObject {
RootItem* feedsCategories(bool obtain_icons);
public slots:
- void logIn();
- void logInIfNeeded();
+ void login();
signals:
void accessGranted();