Skip to content

Commit

Permalink
Merge pull request #44126 from nirvn/auth_bye_regexp
Browse files Browse the repository at this point in the history
[qt6][authentication] Migrate away from QRegExp in favor of QRegularExpression
  • Loading branch information
nirvn committed Jul 13, 2021
2 parents 666b229 + 0395ea0 commit fe95b52
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 45 deletions.
17 changes: 11 additions & 6 deletions src/auth/basic/core/qgsauthbasicmethod.cpp
Expand Up @@ -26,6 +26,7 @@

#include <QNetworkProxy>
#include <QMutexLocker>
#include <QRegularExpression>
#include <QUuid>

const QString QgsAuthBasicMethod::AUTH_METHOD_KEY = QStringLiteral( "Basic" );
Expand Down Expand Up @@ -112,7 +113,8 @@ bool QgsAuthBasicMethod::updateDataSourceUriItems( QStringList &connectionItems,
}

QString sslMode = QStringLiteral( "prefer" );
int sslModeIdx = connectionItems.indexOf( QRegExp( "^sslmode=.*" ) );
const thread_local QRegularExpression sslModeRegExp( "^sslmode=.*" );
int sslModeIdx = connectionItems.indexOf( sslModeRegExp );
if ( sslModeIdx != -1 )
{
sslMode = connectionItems.at( sslModeIdx ).split( '=' ).at( 1 );
Expand Down Expand Up @@ -171,7 +173,7 @@ bool QgsAuthBasicMethod::updateDataSourceUriItems( QStringList &connectionItems,
}
else if ( uri.startsWith( QLatin1String( "SDE:" ) ) )
{
uri = uri.replace( QRegExp( ",$" ), QStringLiteral( ",%1,%2" ).arg( username, password ) );
uri = uri.replace( QRegularExpression( ",$" ), QStringLiteral( ",%1,%2" ).arg( username, password ) );
}
else if ( uri.startsWith( QLatin1String( "IDB" ) ) )
{
Expand Down Expand Up @@ -209,7 +211,7 @@ bool QgsAuthBasicMethod::updateDataSourceUriItems( QStringList &connectionItems,
}
else if ( uri.startsWith( QLatin1String( "ODBC:" ) ) )
{
uri = uri.replace( QRegExp( "^ODBC:@?" ), "ODBC:" + username + '/' + password + '@' );
uri = uri.replace( QRegularExpression( "^ODBC:@?" ), "ODBC:" + username + '/' + password + '@' );
}
else if ( uri.startsWith( QLatin1String( "couchdb" ) )
|| uri.startsWith( QLatin1String( "DODS" ) )
Expand Down Expand Up @@ -240,7 +242,8 @@ bool QgsAuthBasicMethod::updateDataSourceUriItems( QStringList &connectionItems,
else // Not-ogr
{
QString userparam = "user='" + escapeUserPass( username ) + '\'';
int userindx = connectionItems.indexOf( QRegExp( "^user='.*" ) );
const thread_local QRegularExpression userRegExp( "^user='.*" );
int userindx = connectionItems.indexOf( userRegExp );
if ( userindx != -1 )
{
connectionItems.replace( userindx, userparam );
Expand All @@ -251,7 +254,8 @@ bool QgsAuthBasicMethod::updateDataSourceUriItems( QStringList &connectionItems,
}

QString passparam = "password='" + escapeUserPass( password ) + '\'';
int passindx = connectionItems.indexOf( QRegExp( "^password='.*" ) );
const thread_local QRegularExpression passRegExp( "^password='.*" );
int passindx = connectionItems.indexOf( passRegExp );
if ( passindx != -1 )
{
connectionItems.replace( passindx, passparam );
Expand All @@ -263,7 +267,8 @@ bool QgsAuthBasicMethod::updateDataSourceUriItems( QStringList &connectionItems,
// add extra CAs
if ( ! caparam.isEmpty() )
{
int sslcaindx = connectionItems.indexOf( QRegExp( "^sslrootcert='.*" ) );
const thread_local QRegularExpression sslcaRegExp( "^sslrootcert='.*" );
int sslcaindx = connectionItems.indexOf( sslcaRegExp );
if ( sslcaindx != -1 )
{
connectionItems.replace( sslcaindx, caparam );
Expand Down
13 changes: 9 additions & 4 deletions src/auth/identcert/core/qgsauthidentcertmethod.cpp
Expand Up @@ -26,6 +26,7 @@

#include <QDir>
#include <QFile>
#include <QRegularExpression>
#include <QUuid>
#ifndef QT_NO_SSL
#include <QtCrypto>
Expand Down Expand Up @@ -161,7 +162,8 @@ bool QgsAuthIdentCertMethod::updateDataSourceUriItems( QStringList &connectionIt

// add uri parameters
QString userparam = "user='" + commonName + "'";
int userindx = connectionItems.indexOf( QRegExp( "^user='.*" ) );
const thread_local QRegularExpression userRegExp( "^user='.*" );
int userindx = connectionItems.indexOf( userRegExp );
if ( userindx != -1 )
{
connectionItems.replace( userindx, userparam );
Expand All @@ -172,7 +174,8 @@ bool QgsAuthIdentCertMethod::updateDataSourceUriItems( QStringList &connectionIt
}

QString certparam = "sslcert='" + certFilePath + "'";
int sslcertindx = connectionItems.indexOf( QRegExp( "^sslcert='.*" ) );
const thread_local QRegularExpression sslcertRegExp( "^sslcert='.*" );
int sslcertindx = connectionItems.indexOf( sslcertRegExp );
if ( sslcertindx != -1 )
{
connectionItems.replace( sslcertindx, certparam );
Expand All @@ -183,7 +186,8 @@ bool QgsAuthIdentCertMethod::updateDataSourceUriItems( QStringList &connectionIt
}

QString keyparam = "sslkey='" + keyFilePath + "'";
int sslkeyindx = connectionItems.indexOf( QRegExp( "^sslkey='.*" ) );
const thread_local QRegularExpression sslkeyRegExp( "^sslkey='.*" );
int sslkeyindx = connectionItems.indexOf( sslkeyRegExp );
if ( sslkeyindx != -1 )
{
connectionItems.replace( sslkeyindx, keyparam );
Expand All @@ -194,7 +198,8 @@ bool QgsAuthIdentCertMethod::updateDataSourceUriItems( QStringList &connectionIt
}

QString caparam = "sslrootcert='" + caFilePath + "'";
int sslcaindx = connectionItems.indexOf( QRegExp( "^sslrootcert='.*" ) );
const thread_local QRegularExpression sslcaRegExp( "^sslrootcert='.*" );
int sslcaindx = connectionItems.indexOf( sslcaRegExp );
if ( sslcaindx != -1 )
{
connectionItems.replace( sslcaindx, caparam );
Expand Down
13 changes: 9 additions & 4 deletions src/auth/pkipaths/core/qgsauthpkipathsmethod.cpp
Expand Up @@ -26,6 +26,7 @@

#include <QDir>
#include <QFile>
#include <QRegularExpression>
#include <QUuid>
#ifndef QT_NO_SSL
#include <QtCrypto>
Expand Down Expand Up @@ -193,7 +194,8 @@ bool QgsAuthPkiPathsMethod::updateDataSourceUriItems( QStringList &connectionIte

// add uri parameters
QString userparam = "user='" + commonName + "'";
int userindx = connectionItems.indexOf( QRegExp( "^user='.*" ) );
const thread_local QRegularExpression userRegExp( "^user='.*" );
int userindx = connectionItems.indexOf( userRegExp );
if ( userindx != -1 )
{
connectionItems.replace( userindx, userparam );
Expand All @@ -205,7 +207,8 @@ bool QgsAuthPkiPathsMethod::updateDataSourceUriItems( QStringList &connectionIte

// add uri parameters
QString certparam = "sslcert='" + certFilePath + "'";
int sslcertindx = connectionItems.indexOf( QRegExp( "^sslcert='.*" ) );
const thread_local QRegularExpression sslcertRegExp( "^sslcert='.*" );
int sslcertindx = connectionItems.indexOf( sslcertRegExp );
if ( sslcertindx != -1 )
{
connectionItems.replace( sslcertindx, certparam );
Expand All @@ -216,7 +219,8 @@ bool QgsAuthPkiPathsMethod::updateDataSourceUriItems( QStringList &connectionIte
}

QString keyparam = "sslkey='" + keyFilePath + "'";
int sslkeyindx = connectionItems.indexOf( QRegExp( "^sslkey='.*" ) );
const thread_local QRegularExpression sslkeyRegExp( "^sslkey='.*" );
int sslkeyindx = connectionItems.indexOf( sslkeyRegExp );
if ( sslkeyindx != -1 )
{
connectionItems.replace( sslkeyindx, keyparam );
Expand All @@ -227,7 +231,8 @@ bool QgsAuthPkiPathsMethod::updateDataSourceUriItems( QStringList &connectionIte
}

QString caparam = "sslrootcert='" + caFilePath + "'";
int sslcaindx = connectionItems.indexOf( QRegExp( "^sslrootcert='.*" ) );
const thread_local QRegularExpression sslcaRegExp( "^sslrootcert='.*" );
int sslcaindx = connectionItems.indexOf( sslcaRegExp );
if ( sslcaindx != -1 )
{
connectionItems.replace( sslcaindx, caparam );
Expand Down
29 changes: 17 additions & 12 deletions src/auth/pkipkcs12/core/qgsauthpkcs12method.cpp
Expand Up @@ -16,8 +16,17 @@

#include "qgsauthpkcs12method.h"

#include "qgsauthcertutils.h"
#include "qgsauthmanager.h"
#include "qgslogger.h"
#include "qgsapplication.h"
#ifdef HAVE_GUI
#include "qgsauthpkcs12edit.h"
#endif

#include <QDir>
#include <QFile>
#include <QRegularExpression>
#include <QUuid>
#ifndef QT_NO_SSL
#include <QtCrypto>
Expand All @@ -26,14 +35,6 @@
#endif
#include <QMutexLocker>

#include "qgsauthcertutils.h"
#include "qgsauthmanager.h"
#include "qgslogger.h"
#include "qgsapplication.h"
#ifdef HAVE_GUI
#include "qgsauthpkcs12edit.h"
#endif

const QString QgsAuthPkcs12Method::AUTH_METHOD_KEY = QStringLiteral( "PKI-PKCS#12" );
const QString QgsAuthPkcs12Method::AUTH_METHOD_DESCRIPTION = QStringLiteral( "PKI PKCS#12 authentication" );
const QString QgsAuthPkcs12Method::AUTH_METHOD_DISPLAY_DESCRIPTION = tr( "PKI PKCS#12 authentication" );
Expand Down Expand Up @@ -192,7 +193,8 @@ bool QgsAuthPkcs12Method::updateDataSourceUriItems( QStringList &connectionItems

// add uri parameters
QString userparam = "user='" + commonName + "'";
int userindx = connectionItems.indexOf( QRegExp( "^user='.*" ) );
const thread_local QRegularExpression userRegExp( "^user='.*" );
int userindx = connectionItems.indexOf( userRegExp );
if ( userindx != -1 )
{
connectionItems.replace( userindx, userparam );
Expand All @@ -203,7 +205,8 @@ bool QgsAuthPkcs12Method::updateDataSourceUriItems( QStringList &connectionItems
}

QString certparam = "sslcert='" + certFilePath + "'";
int sslcertindx = connectionItems.indexOf( QRegExp( "^sslcert='.*" ) );
const thread_local QRegularExpression sslcertRegExp( "^sslcert='.*" );
int sslcertindx = connectionItems.indexOf( sslcertRegExp );
if ( sslcertindx != -1 )
{
connectionItems.replace( sslcertindx, certparam );
Expand All @@ -214,7 +217,8 @@ bool QgsAuthPkcs12Method::updateDataSourceUriItems( QStringList &connectionItems
}

QString keyparam = "sslkey='" + keyFilePath + "'";
int sslkeyindx = connectionItems.indexOf( QRegExp( "^sslkey='.*" ) );
const thread_local QRegularExpression sslkeyRegExp( "^sslkey='.*" );
int sslkeyindx = connectionItems.indexOf( sslkeyRegExp );
if ( sslkeyindx != -1 )
{
connectionItems.replace( sslkeyindx, keyparam );
Expand All @@ -225,7 +229,8 @@ bool QgsAuthPkcs12Method::updateDataSourceUriItems( QStringList &connectionItems
}

QString caparam = "sslrootcert='" + caFilePath + "'";
int sslcaindx = connectionItems.indexOf( QRegExp( "^sslrootcert='.*" ) );
const thread_local QRegularExpression sslcaRegExp( "^sslrootcert='.*" );
int sslcaindx = connectionItems.indexOf( sslcaRegExp );
if ( sslcaindx != -1 )
{
connectionItems.replace( sslcaindx, caparam );
Expand Down
9 changes: 5 additions & 4 deletions src/core/auth/qgsauthmanager.cpp
Expand Up @@ -33,6 +33,7 @@
#include <QSqlDriver>
#include <QDomElement>
#include <QDomDocument>
#include <QRegularExpression>

#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
#include <QRandomGenerator>
Expand Down Expand Up @@ -917,8 +918,8 @@ bool QgsAuthManager::configIdUnique( const QString &id ) const

bool QgsAuthManager::hasConfigId( const QString &txt ) const
{
QRegExp rx( AUTH_CFG_REGEX );
return rx.indexIn( txt ) != -1;
const thread_local QRegularExpression authCfgRegExp( AUTH_CFG_REGEX );
return txt.indexOf( authCfgRegExp ) != -1;
}

QgsAuthMethodConfigsMap QgsAuthManager::availableAuthMethodConfigs( const QString &dataprovider )
Expand Down Expand Up @@ -2437,8 +2438,8 @@ bool QgsAuthManager::updateIgnoredSslErrorsCacheFromConfig( const QgsAuthConfigS
bool QgsAuthManager::updateIgnoredSslErrorsCache( const QString &shahostport, const QList<QSslError> &errors )
{
QMutexLocker locker( mMutex.get() );
QRegExp rx( "\\S+:\\S+:\\d+" );
if ( !rx.exactMatch( shahostport ) )
const thread_local QRegularExpression rx( QRegularExpression::anchoredPattern( "\\S+:\\S+:\\d+" ) );
if ( !rx.match( shahostport ).hasMatch() )
{
QgsDebugMsg( "Passed shahostport does not match \\S+:\\S+:\\d+, "
"e.g. 74a4ef5ea94512a43769b744cda0ca5049a72491:www.example.com:443" );
Expand Down
15 changes: 8 additions & 7 deletions src/core/auth/qgsauthmethodregistry.cpp
Expand Up @@ -16,10 +16,6 @@

#include "qgsauthmethodregistry.h"

#include <QString>
#include <QDir>
#include <QLibrary>

#include "qgis.h"
#include "qgsauthconfig.h"
#include "qgsauthmethod.h"
Expand All @@ -39,6 +35,11 @@
#include "qgsauthpkcs12method.h"
#endif

#include <QString>
#include <QDir>
#include <QLibrary>
#include <QRegularExpression>


static QgsAuthMethodRegistry *sInstance = nullptr;

Expand Down Expand Up @@ -133,7 +134,7 @@ void QgsAuthMethodRegistry::init()

// auth method file regex pattern, only files matching the pattern are loaded if the variable is defined
QString filePattern = getenv( "QGIS_AUTHMETHOD_FILE" );
QRegExp fileRegexp;
QRegularExpression fileRegexp;
if ( !filePattern.isEmpty() )
{
fileRegexp.setPattern( filePattern );
Expand All @@ -144,9 +145,9 @@ void QgsAuthMethodRegistry::init()
{
QFileInfo fi( it.next() );

if ( !fileRegexp.isEmpty() )
if ( !filePattern.isEmpty() )
{
if ( fileRegexp.indexIn( fi.fileName() ) == -1 )
if ( fi.fileName().indexOf( fileRegexp ) == -1 )
{
QgsDebugMsg( "auth method " + fi.fileName() + " skipped because doesn't match pattern " + filePattern );
continue;
Expand Down
6 changes: 4 additions & 2 deletions src/gui/auth/qgsauthconfigidedit.cpp
Expand Up @@ -21,6 +21,8 @@
#include "qgsauthmanager.h"
#include "qgsapplication.h"

#include <QRegularExpression>


QgsAuthConfigIdEdit::QgsAuthConfigIdEdit( QWidget *parent, const QString &authcfg, bool allowEmpty )
: QWidget( parent )
Expand Down Expand Up @@ -117,6 +119,6 @@ void QgsAuthConfigIdEdit::leAuthCfg_textChanged( const QString &txt )

bool QgsAuthConfigIdEdit::isAlphaNumeric( const QString &authcfg )
{
QRegExp rx( "([a-z]|[A-Z]|[0-9]){7}" );
return rx.indexIn( authcfg ) != -1;
const thread_local QRegularExpression alphaNumericRegExp( "([a-z]|[A-Z]|[0-9]){7}" );
return authcfg.indexOf( alphaNumericRegExp ) != -1;
}
12 changes: 6 additions & 6 deletions src/gui/auth/qgsauthconfigselect.cpp
Expand Up @@ -17,10 +17,6 @@
#include "qgsauthconfigselect.h"
#include "ui_qgsauthconfigselect.h"

#include <QHash>
#include <QMessageBox>
#include <QTimer>

#include "qgsauthconfig.h"
#include "qgsauthguiutils.h"
#include "qgsauthmanager.h"
Expand All @@ -29,6 +25,11 @@
#include "qgsapplication.h"
#include "qgsauthmethodmetadata.h"

#include <QHash>
#include <QMessageBox>
#include <QTimer>
#include <QRegularExpression>


QgsAuthConfigSelect::QgsAuthConfigSelect( QWidget *parent, const QString &dataprovider )
: QWidget( parent )
Expand Down Expand Up @@ -382,8 +383,7 @@ void QgsAuthConfigUriEdit::authCfgRemoved( const QString &authcfg )

int QgsAuthConfigUriEdit::authCfgIndex()
{
QRegExp rx( QgsApplication::authManager()->configIdRegex() );
return rx.indexIn( mDataUri );
return mDataUri.indexOf( QRegularExpression( QgsApplication::authManager()->configIdRegex() ) );
}

QString QgsAuthConfigUriEdit::authCfgFromUri()
Expand Down

0 comments on commit fe95b52

Please sign in to comment.