use QgsCredentials to request wms/ows credentials on demand and wms cleanups (fixes #11184)

This commit is contained in:
Juergen E. Fischer 2014-10-21 23:01:20 +02:00
parent 4bcde11753
commit 3bdb104a01
9 changed files with 27 additions and 121 deletions

View File

@ -11,6 +11,7 @@ class QgsOWSConnection : QObject
* @param theConnName connection name
*/
QgsOWSConnection( const QString & theService, const QString & theConnName );
//! Destructor
~QgsOWSConnection();
@ -21,10 +22,9 @@ class QgsOWSConnection : QObject
static QString selectedConnection( const QString & theService );
static void setSelectedConnection( const QString & theService, const QString & name );
public:
//QgsDataProvider *provider();
QString connectionInfo();
QString mConnName;
QString mConnectionInfo;
QgsDataSourceURI uri();
QString mConnectionInfo;
QString connectionInfo() /Deprecated/;
};

View File

@ -9949,6 +9949,21 @@ void QgisApp::namAuthenticationRequired( QNetworkReply *reply, QAuthenticator *a
QString username = auth->user();
QString password = auth->password();
if ( username.isEmpty() && password.isEmpty() && reply->request().hasRawHeader( "Authorization" ) )
{
QByteArray header( reply->request().rawHeader( "Authorization" ) );
if ( header.startsWith( "Basic " ) )
{
QByteArray auth( QByteArray::fromBase64( header.mid( 6 ) ) );
int pos = auth.indexOf( ":" );
if ( pos >= 0 )
{
username = auth.left( pos );
password = auth.mid( pos + 1 );
}
}
}
{
QMutexLocker lock( QgsCredentials::instance()->mutex() );

View File

@ -57,11 +57,6 @@ QgsOWSConnection::QgsOWSConnection( const QString & theService, const QString &
if ( !username.isEmpty() )
{
// check for a password, if none prompt to get it
if ( password.isEmpty() )
{
password = QInputDialog::getText( 0, tr( "WMS Password for %1" ).arg( mConnName ), tr( "Password" ), QLineEdit::Password );
}
mConnectionInfo = "username=" + username + ",password=" + password + ",url=" + mConnectionInfo;
mUri.setParam( "username", username );
mUri.setParam( "password", password );
}
@ -87,7 +82,7 @@ QgsOWSConnection::QgsOWSConnection( const QString & theService, const QString &
mUri.setParam( "InvertAxisOrientation", "1" );
}
QgsDebugMsg( QString( "Connection info: '%1'." ).arg( mConnectionInfo ) );
QgsDebugMsg( QString( "encoded uri: '%1'." ).arg( QString( mUri.encodedUri() ) ) );
}
QgsOWSConnection::~QgsOWSConnection()
@ -105,24 +100,6 @@ QgsDataSourceURI QgsOWSConnection::uri()
return mUri;
}
#if 0
QgsDataProvider * QgsOWSConnection::provider()
{
// TODO: remove completely from this class?
// load the server data provider plugin
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
//QMap<QString,QString> keys;
QgsDataProvider *provider =
( QgsDataProvider* ) pReg->provider( "wms", mUri.encodedUri() );
return provider;
}
#endif
QStringList QgsOWSConnection::connectionList( const QString & theService )
{
QSettings settings;

View File

@ -27,20 +27,11 @@
#include <QStringList>
#include <QPushButton>
class QgisApp;
//class QgsDataProvider;
class QgsDataProvider;
/*class QButtonGroup;*/
/*class QgsNumericSortTreeWidgetItem;*/
class QDomDocument;
class QDomElement;
/*!
* \brief Connections management
*/
class CORE_EXPORT QgsOWSConnection : public QObject
{
// Q_OBJECT
public:
/**
@ -49,6 +40,7 @@ class CORE_EXPORT QgsOWSConnection : public QObject
* @param theConnName connection name
*/
QgsOWSConnection( const QString & theService, const QString & theConnName );
//! Destructor
~QgsOWSConnection();
@ -59,12 +51,12 @@ class CORE_EXPORT QgsOWSConnection : public QObject
static QString selectedConnection( const QString & theService );
static void setSelectedConnection( const QString & theService, const QString & name );
public:
//QgsDataProvider *provider();
QString connectionInfo();
QString mConnName;
QString mConnectionInfo;
QgsDataSourceURI uri();
QString mConnectionInfo;
Q_DECL_DEPRECATED QString connectionInfo();
private:
QgsDataSourceURI mUri;
QString mService;

View File

@ -351,8 +351,6 @@ void QgsOWSSourceSelect::on_mConnectButton_clicked()
mConnName = mConnectionsComboBox->currentText();
QgsOWSConnection connection( mService, mConnectionsComboBox->currentText() );
//QgsDataProvider *theProvider = connection.provider();
mConnectionInfo = connection.connectionInfo();
mUri = connection.uri();
QApplication::setOverrideCursor( Qt::WaitCursor );

View File

@ -48,7 +48,6 @@ QgsWMSConnection::QgsWMSConnection( QString theConnName ) :
QStringList connStringParts;
mConnectionInfo = settings.value( key + "/url" ).toString();
mUri.setParam( "url", settings.value( key + "/url" ).toString() );
// Check for credentials and prepend to the connection info
@ -56,13 +55,6 @@ QgsWMSConnection::QgsWMSConnection( QString theConnName ) :
QString password = settings.value( credentialsKey + "/password" ).toString();
if ( !username.isEmpty() )
{
// check for a password, if none prompt to get it
if ( password.isEmpty() )
{
//password = QInputDialog::getText( this, tr( "WMS Password for %1" ).arg( theConnName ), "Password", QLineEdit::Password );
password = QInputDialog::getText( 0, tr( "WMS Password for %1" ).arg( mConnName ), "Password", QLineEdit::Password );
}
mConnectionInfo = "username=" + username + ",password=" + password + ",url=" + mConnectionInfo;
mUri.setParam( "username", username );
mUri.setParam( "password", password );
}
@ -80,65 +72,37 @@ QgsWMSConnection::QgsWMSConnection( QString theConnName ) :
bool smoothPixmapTransform = settings.value( key + "/smoothPixmapTransform", false ).toBool();
QString dpiMode = settings.value( key + "/dpiMode", "all" ).toString();
QString connArgs, delim;
if ( ignoreGetMap )
{
connArgs += delim + "GetMap";
delim = ";";
mUri.setParam( "IgnoreGetMapUrl", "1" );
}
if ( ignoreGetFeatureInfo )
{
connArgs += delim + "GetFeatureInfo";
delim = ";";
mUri.setParam( "IgnoreGetFeatureInfoUrl", "1" );
}
if ( ignoreAxisOrientation )
{
connArgs += delim + "AxisOrientation";
delim = ";";
mUri.setParam( "IgnoreAxisOrientation", "1" );
}
if ( invertAxisOrientation )
{
connArgs += delim + "InvertAxisOrientation";
delim = ";";
mUri.setParam( "InvertAxisOrientation", "1" );
}
if ( smoothPixmapTransform )
{
connArgs += delim + "SmoothPixmapTransform";
delim = ";";
mUri.setParam( "SmoothPixmapTransform", "1" );
}
if ( !dpiMode.isEmpty() )
{
connArgs += delim + "dpiMode=" + dpiMode;
delim = ";";
mUri.setParam( "dpiMode", dpiMode );
}
if ( !connArgs.isEmpty() )
{
connArgs.prepend( "ignoreUrl=" );
if ( mConnectionInfo.startsWith( "username=" ) )
{
mConnectionInfo.prepend( connArgs + "," );
}
else
{
mConnectionInfo.prepend( connArgs + ",url=" );
}
}
QgsDebugMsg( QString( "Connection info: '%1'." ).arg( mConnectionInfo ) );
QgsDebugMsg( QString( "encodedUri: '%1'." ).arg( QString( mUri.encodedUri() ) ) );
}
QgsWMSConnection::~QgsWMSConnection()
@ -146,17 +110,11 @@ QgsWMSConnection::~QgsWMSConnection()
}
QString QgsWMSConnection::connectionInfo()
{
return mConnectionInfo;
}
QgsDataSourceURI QgsWMSConnection::uri()
{
return mUri;
}
QStringList QgsWMSConnection::connectionList()
{
QSettings settings;

View File

@ -17,18 +17,10 @@
#ifndef QGSWMSCONNECTION_H
#define QGSWMSCONNECTION_H
#include "qgsdatasourceuri.h"
#include "qgisgui.h"
//#include "qgscontexthelp.h"
#include <QStringList>
#include <QPushButton>
class QgisApp;
/*class QButtonGroup;*/
/*class QgsNumericSortTreeWidgetItem;*/
class QDomDocument;
class QDomElement;
/*!
* \brief Connections management
@ -50,14 +42,10 @@ class QgsWMSConnection : public QObject
static QString selectedConnection();
static void setSelectedConnection( QString name );
public:
QString connectionInfo();
QString mConnName;
QString mConnectionInfo;
QgsDataSourceURI uri();
QgsDataSourceURI mUri;
};
#endif // QGSWMSCONNECTION_H

View File

@ -434,7 +434,6 @@ void QgsWMSSourceSelect::on_btnConnect_clicked()
mConnName = cmbConnections->currentText();
QgsWMSConnection connection( cmbConnections->currentText() );
mConnectionInfo = connection.connectionInfo();
mUri = connection.uri();
QgsWmsSettings wmsSettings;
@ -983,11 +982,6 @@ QString QgsWMSSourceSelect::connName()
return mConnName;
}
QString QgsWMSSourceSelect::connectionInfo()
{
return mConnectionInfo;
}
void QgsWMSSourceSelect::collectSelectedLayers( QStringList &layers, QStringList &styles, QStringList &titles )
{
//go through list in layer order tab

View File

@ -104,21 +104,6 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase
//! Connection name
QString connName();
//! Connection info (uri)
QString connectionInfo();
//! Connection Proxy Host
QString connProxyHost();
//! Connection Proxy Port
int connProxyPort();
//! Connection Proxy User
QString connProxyUser();
//! Connection Proxy Pass
QString connProxyPass();
//! Set the server connection combo box to that stored in the config file.
void setConnectionListPosition();
@ -180,7 +165,6 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase
QString mConnName;
//! URI for selected connection
QString mConnectionInfo;
QgsDataSourceURI mUri;
//! layer name derived from latest layer selection (updated as long it's not edited manually)