[auth] Added mutex to protect cache for basic auth

This commit is contained in:
Alessandro Pasotti 2017-10-06 18:10:38 +02:00
parent a4a33dff75
commit d76b04a975
2 changed files with 8 additions and 0 deletions

View File

@ -21,6 +21,7 @@
#include "qgslogger.h"
#include <QNetworkProxy>
#include <QMutexLocker>
static const QString AUTH_METHOD_KEY = QStringLiteral( "Basic" );
static const QString AUTH_METHOD_DESCRIPTION = QStringLiteral( "Basic authentication" );
@ -169,6 +170,7 @@ void QgsAuthBasicMethod::clearCachedConfig( const QString &authcfg )
QgsAuthMethodConfig QgsAuthBasicMethod::getMethodConfig( const QString &authcfg, bool fullconfig )
{
QMutexLocker locker( &mConfigMutex );
QgsAuthMethodConfig mconfig;
// check if it is cached
@ -187,6 +189,7 @@ QgsAuthMethodConfig QgsAuthBasicMethod::getMethodConfig( const QString &authcfg,
}
// cache bundle
locker.unlock();
putMethodConfig( authcfg, mconfig );
return mconfig;
@ -194,12 +197,14 @@ QgsAuthMethodConfig QgsAuthBasicMethod::getMethodConfig( const QString &authcfg,
void QgsAuthBasicMethod::putMethodConfig( const QString &authcfg, const QgsAuthMethodConfig &mconfig )
{
QMutexLocker locker( &mConfigMutex );
QgsDebugMsg( QString( "Putting basic config for authcfg: %1" ).arg( authcfg ) );
sAuthConfigCache.insert( authcfg, mconfig );
}
void QgsAuthBasicMethod::removeMethodConfig( const QString &authcfg )
{
QMutexLocker locker( &mConfigMutex );
if ( sAuthConfigCache.contains( authcfg ) )
{
sAuthConfigCache.remove( authcfg );

View File

@ -18,6 +18,7 @@
#define QGSAUTHBASICMETHOD_H
#include <QObject>
#include <QMutex>
#include "qgsauthconfig.h"
#include "qgsauthmethod.h"
@ -61,6 +62,8 @@ class QgsAuthBasicMethod : public QgsAuthMethod
QString escapeUserPass( const QString &val, QChar delim = '\'' ) const;
static QMap<QString, QgsAuthMethodConfig> sAuthConfigCache;
QMutex mConfigMutex;
};
#endif // QGSAUTHBASICMETHOD_H