Skip to content

Commit e43f476

Browse files
committed
Ensure correct thread locale QgsNetworkAccessManager is used during
o2 requests Otherwise the main thread manager is always used, resulting in lots of warnings and potential crashes
1 parent 9364d1f commit e43f476

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

external/o2/src/o2.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ void O2::link() {
219219
QUrl url(tokenUrl_);
220220
QNetworkRequest tokenRequest(url);
221221
tokenRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
222-
QNetworkReply *tokenReply = manager_->post(tokenRequest, payload);
222+
QNetworkReply *tokenReply = getManager()->post(tokenRequest, payload);
223223

224224
connect(tokenReply, SIGNAL(finished()), this, SLOT(onTokenReplyFinished()), Qt::QueuedConnection);
225225
connect(tokenReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onTokenReplyError(QNetworkReply::NetworkError)), Qt::QueuedConnection);
@@ -268,7 +268,7 @@ void O2::onVerificationReceived(const QMap<QString, QString> response) {
268268

269269
qDebug() << QString("O2::onVerificationReceived: Exchange access code data:\n%1").arg(QString(data));
270270

271-
QNetworkReply *tokenReply = manager_->post(tokenRequest, data);
271+
QNetworkReply *tokenReply = getManager()->post(tokenRequest, data);
272272
timedReplies_.add(tokenReply);
273273
connect(tokenReply, SIGNAL(finished()), this, SLOT(onTokenReplyFinished()), Qt::QueuedConnection);
274274
connect(tokenReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onTokenReplyError(QNetworkReply::NetworkError)), Qt::QueuedConnection);
@@ -390,6 +390,11 @@ void O2::setExpires(int v) {
390390
store_->setValue(key, QString::number(v));
391391
}
392392

393+
QNetworkAccessManager *O2::getManager()
394+
{
395+
return manager_;
396+
}
397+
393398
QString O2::refreshToken() {
394399
QString key = QString(O2_KEY_REFRESH_TOKEN).arg(clientId_);
395400
return store_->value(key);
@@ -424,7 +429,7 @@ void O2::refresh() {
424429
parameters.insert(O2_OAUTH2_GRANT_TYPE, O2_OAUTH2_REFRESH_TOKEN);
425430

426431
QByteArray data = buildRequestBody(parameters);
427-
QNetworkReply *refreshReply = manager_->post(refreshRequest, data);
432+
QNetworkReply *refreshReply = getManager()->post(refreshRequest, data);
428433
timedReplies_.add(refreshReply);
429434
connect(refreshReply, SIGNAL(finished()), this, SLOT(onRefreshFinished()), Qt::QueuedConnection);
430435
connect(refreshReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onRefreshError(QNetworkReply::NetworkError)), Qt::QueuedConnection);

external/o2/src/o2.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ protected Q_SLOTS:
161161
/// Set token expiration time.
162162
void setExpires(int v);
163163

164+
virtual QNetworkAccessManager *getManager();
165+
164166
protected:
165167
QString username_;
166168
QString password_;

src/auth/oauth2/qgso2.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ void QgsO2::link()
233233
QNetworkRequest tokenRequest( url );
234234
QgsSetRequestInitiatorClass( tokenRequest, QStringLiteral( "QgsO2" ) );
235235
tokenRequest.setHeader( QNetworkRequest::ContentTypeHeader, QLatin1Literal( "application/x-www-form-urlencoded" ) );
236-
QNetworkReply *tokenReply = manager_->post( tokenRequest, payload );
236+
QNetworkReply *tokenReply = getManager()->post( tokenRequest, payload );
237237

238238
connect( tokenReply, SIGNAL( finished() ), this, SLOT( onTokenReplyFinished() ), Qt::QueuedConnection );
239239
connect( tokenReply, SIGNAL( error( QNetworkReply::NetworkError ) ), this, SLOT( onTokenReplyError( QNetworkReply::NetworkError ) ), Qt::QueuedConnection );
@@ -302,7 +302,7 @@ void QgsO2::onVerificationReceived( QMap<QString, QString> response )
302302
parameters.insert( O2_OAUTH2_REDIRECT_URI, redirectUri_ );
303303
parameters.insert( O2_OAUTH2_GRANT_TYPE, O2_AUTHORIZATION_CODE );
304304
QByteArray data = buildRequestBody( parameters );
305-
QNetworkReply *tokenReply = manager_->post( tokenRequest, data );
305+
QNetworkReply *tokenReply = getManager()->post( tokenRequest, data );
306306
timedReplies_.add( tokenReply );
307307
connect( tokenReply, &QNetworkReply::finished, this, &QgsO2::onTokenReplyFinished, Qt::QueuedConnection );
308308
connect( tokenReply, qgis::overload<QNetworkReply::NetworkError>::of( &QNetworkReply::error ), this, &QgsO2::onTokenReplyError, Qt::QueuedConnection );
@@ -339,3 +339,8 @@ void QgsO2::onVerificationReceived( QMap<QString, QString> response )
339339
setRefreshToken( response.value( O2_OAUTH2_REFRESH_TOKEN ) );
340340
}
341341
}
342+
343+
QNetworkAccessManager *QgsO2::getManager()
344+
{
345+
return QgsNetworkAccessManager::instance();
346+
}

src/auth/oauth2/qgso2.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ class QgsO2: public O2
7474
//! Handle verification response.
7575
void onVerificationReceived( QMap<QString, QString> response ) override;
7676

77+
protected:
78+
79+
QNetworkAccessManager* getManager() override;
80+
7781
signals:
7882

7983
//! Emitted when the state has changed

0 commit comments

Comments
 (0)