Force cookies removal when testing inroeader login.

This commit is contained in:
Martin Rotter 2017-10-02 13:15:55 +02:00
parent 11e816bdf6
commit 9676c3fb9a
4 changed files with 59 additions and 5 deletions

View File

@ -19,6 +19,8 @@
#include "gui/dialogs/oauthlogin.h"
#include <QUrlQuery>
#include <QWebEngineCookieStore>
#include <QWebEngineProfile>
OAuthLogin::OAuthLogin(QWidget* parent) : QDialog(parent) {
m_ui.setupUi(this);
@ -28,6 +30,9 @@ OAuthLogin::OAuthLogin(QWidget* parent) : QDialog(parent) {
}
void OAuthLogin::login(const QString& consentPageUrl, const QString& redirect_uri) {
m_ui.m_loginPage->page()->profile()->clearHttpCache();
m_ui.m_loginPage->page()->profile()->cookieStore()->deleteAllCookies();
m_redirectUri = redirect_uri;
m_ui.m_loginPage->setUrl(QUrl(consentPageUrl));
exec();

View File

@ -54,6 +54,7 @@
OAuth2Service::OAuth2Service(QString authUrl, QString tokenUrl, QString clientId,
QString clientSecret, QString scope, QObject* parent)
: QObject(parent), m_tokensExpireIn(QDateTime()) {
m_redirectUri = QSL(INOREADER_OAUTH_CLI_REDIRECT);
m_tokenGrantType = QSL("authorization_code");
m_tokenUrl = QUrl(tokenUrl);
@ -75,11 +76,11 @@ void OAuth2Service::attachBearerHeader(QNetworkRequest& req) {
req.setRawHeader(QString("Authorization").toLocal8Bit(), bearer().toLocal8Bit());
}
void OAuth2Service::setOAuthTokenGrantType(QString oAuthTokenGrantType) {
m_tokenGrantType = oAuthTokenGrantType;
void OAuth2Service::setOAuthTokenGrantType(QString grant_type) {
m_tokenGrantType = grant_type;
}
QString OAuth2Service::grant_type() {
QString OAuth2Service::oAuthTokenGrantType() {
return m_tokenGrantType;
}
@ -161,6 +162,30 @@ void OAuth2Service::tokenRequestFinished(QNetworkReply* networkReply) {
networkReply->deleteLater();
}
QString OAuth2Service::clientSecret() const {
return m_clientSecret;
}
void OAuth2Service::setClientSecret(const QString& client_secret) {
m_clientSecret = client_secret;
}
QString OAuth2Service::clientId() const {
return m_clientId;
}
void OAuth2Service::setClientId(const QString& client_id) {
m_clientId = client_id;
}
QString OAuth2Service::redirectUri() const {
return m_redirectUri;
}
void OAuth2Service::setRedirectUri(const QString& redirect_uri) {
m_redirectUri = redirect_uri;
}
QString OAuth2Service::refreshToken() const {
return m_refreshToken;
}
@ -190,6 +215,13 @@ bool OAuth2Service::login() {
}
}
void OAuth2Service::logout() {
m_refreshToken = m_accessToken = QString();
m_tokensExpireIn = QDateTime();
// TODO: zastavit timer na obnovení refresh tokenu?
}
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,

View File

@ -57,11 +57,20 @@ class OAuth2Service : public QObject {
void attachBearerHeader(QNetworkRequest& req);
void setOAuthTokenGrantType(QString grant_type);
QString grant_type();
QString oAuthTokenGrantType();
QString refreshToken() const;
void setRefreshToken(const QString& refresh_token);
QString redirectUri() const;
void setRedirectUri(const QString& redirect_uri);
QString clientId() const;
void setClientId(const QString& client_id);
QString clientSecret() const;
void setClientSecret(const QString& client_secret);
signals:
void tokensReceived(QString access_token, QString refresh_token, int expires_in);
void tokensRetrieveError(QString error, QString error_description);
@ -83,6 +92,7 @@ class OAuth2Service : public QObject {
// Returns true, if user is already logged in (final state).
// Returns false, if user is NOT logged in (asynchronous flow).
bool login();
void logout();
private slots:
void cleanTokens();
@ -92,8 +102,8 @@ class OAuth2Service : public QObject {
QDateTime m_tokensExpireIn;
QString m_accessToken;
QString m_refreshToken;
QString m_redirectUri;
QString m_tokenGrantType;
QString m_redirectUri;
QString m_clientId;
QString m_clientSecret;
QUrl m_tokenUrl;

View File

@ -80,6 +80,9 @@ void FormEditInoreaderAccount::onClickedOk() {
editing_account = false;
}
m_editableRoot->network()->oauth()->setClientId(m_ui.m_txtAppId->lineEdit()->text());
m_editableRoot->network()->oauth()->setClientSecret(m_ui.m_txtAppKey->lineEdit()->text());
m_editableRoot->network()->oauth()->setRedirectUri(m_ui.m_txtRedirectUrl->lineEdit()->text());
m_editableRoot->network()->setUsername(m_ui.m_txtUsername->lineEdit()->text());
m_editableRoot->network()->setBatchSize(m_ui.m_spinLimitMessages->value());
m_editableRoot->saveAccountDataToDatabase();
@ -154,6 +157,10 @@ InoreaderServiceRoot* FormEditInoreaderAccount::execForCreate() {
void FormEditInoreaderAccount::execForEdit(InoreaderServiceRoot* existing_root) {
setWindowTitle(tr("Edit existing Inoreader account"));
m_editableRoot = existing_root;
m_ui.m_txtAppId->lineEdit()->setText(existing_root->network()->oauth()->clientId());
m_ui.m_txtAppKey->lineEdit()->setText(existing_root->network()->oauth()->clientSecret());
m_ui.m_txtRedirectUrl->lineEdit()->setText(existing_root->network()->oauth()->redirectUri());
m_ui.m_txtUsername->lineEdit()->setText(existing_root->network()->userName());
m_ui.m_spinLimitMessages->setValue(existing_root->network()->batchSize());