Skip to content

Commit

Permalink
[network access manager] handle abortion of browser login request
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn committed May 15, 2021
1 parent c40b464 commit 1e47ca1
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 0 deletions.
18 changes: 18 additions & 0 deletions python/core/auto_generated/network/qgsnetworkaccessmanager.sip.in
Expand Up @@ -343,6 +343,18 @@ Forwards an external browser login closure request to the authentication handler
.. versionadded:: 3.20
%End

void abortAuthBrowser();
%Docstring
Abort any outstanding external browser login request.

.. note::

Background threads will listen to aborted browser request signals from the network manager on the main thread.

.. versionadded:: 3.20
%End




signals:
Expand Down Expand Up @@ -483,6 +495,12 @@ See :py:class:`QgsSslErrorHandler` for details on how to handle SSL errors and p
void requestTimedOut( QNetworkReply * );


void authBrowserAborted();
%Docstring
Emitted when external browser login are to be aborted.

.. versionadded:: 3.20
%End

protected:
virtual QNetworkReply *createRequest( QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0 );
Expand Down
1 change: 1 addition & 0 deletions src/auth/oauth2/qgsauthoauth2method.cpp
Expand Up @@ -195,6 +195,7 @@ bool QgsAuthOAuth2Method::updateNetworkRequest( QNetworkRequest &request, const
QEventLoop loop( nullptr );
connect( o2, &QgsO2::linkingFailed, &loop, &QEventLoop::quit );
connect( o2, &QgsO2::linkingSucceeded, &loop, &QEventLoop::quit );
connect( QgsNetworkAccessManager::instance(), &QgsNetworkAccessManager::authBrowserAborted, &loop, &QEventLoop::quit );

// add single shot timer to quit linking after an allotted timeout
// this should keep the local event loop from blocking forever
Expand Down
11 changes: 11 additions & 0 deletions src/core/network/qgsnetworkaccessmanager.cpp
Expand Up @@ -468,6 +468,7 @@ void QgsNetworkAccessManager::requestAuthOpenBrowser( const QUrl &url ) const
if ( this != sMainNAM )
{
sMainNAM->requestAuthOpenBrowser( url );
connect( sMainNAM, &QgsNetworkAccessManager::authBrowserAborted, this, &QgsNetworkAccessManager::abortAuthBrowser );
return;
}
mAuthHandler->handleAuthRequestOpenBrowser( url );
Expand All @@ -478,11 +479,21 @@ void QgsNetworkAccessManager::requestAuthCloseBrowser() const
if ( this != sMainNAM )
{
sMainNAM->requestAuthCloseBrowser();
disconnect( sMainNAM, &QgsNetworkAccessManager::authBrowserAborted, this, &QgsNetworkAccessManager::abortAuthBrowser );
return;
}
mAuthHandler->handleAuthRequestCloseBrowser();
}

void QgsNetworkAccessManager::abortAuthBrowser()
{
if ( this != sMainNAM )
{
disconnect( sMainNAM, &QgsNetworkAccessManager::authBrowserAborted, this, &QgsNetworkAccessManager::abortAuthBrowser );
}
emit authBrowserAborted();
}

void QgsNetworkAccessManager::handleAuthRequest( QNetworkReply *reply, QAuthenticator *auth )
{
mAuthHandler->handleAuthRequest( reply, auth );
Expand Down
15 changes: 15 additions & 0 deletions src/core/network/qgsnetworkaccessmanager.h
Expand Up @@ -530,6 +530,15 @@ class CORE_EXPORT QgsNetworkAccessManager : public QNetworkAccessManager
*/
void requestAuthCloseBrowser() const;

/**
* Abort any outstanding external browser login request.
*
* \note Background threads will listen to aborted browser request signals from the network manager on the main thread.
* \since QGIS 3.20
*/
void abortAuthBrowser();


#ifndef SIP_RUN
//! Settings entry network timeout
static const inline QgsSettingsEntryInteger settingsNetworkTimeout = QgsSettingsEntryInteger( QStringLiteral( "/qgis/networkAndProxy/networkTimeout" ), QgsSettings::NoSection, 60000, QObject::tr( "Network timeout" ) );
Expand Down Expand Up @@ -678,6 +687,12 @@ class CORE_EXPORT QgsNetworkAccessManager : public QNetworkAccessManager
///@endcond
#endif

/**
* Emitted when external browser login are to be aborted.
*
* \since QGIS 3.20
*/
void authBrowserAborted();

private slots:
void abortRequest();
Expand Down

0 comments on commit 1e47ca1

Please sign in to comment.