mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-19 00:07:15 -04:00
[oauth2] Allow for extra token(s) to be added into the header for header access methods
This commit is contained in:
parent
992cdcbf62
commit
2b9406e85a
@ -53,6 +53,7 @@ QgsAuthOAuth2Config::QgsAuthOAuth2Config( QObject *parent )
|
|||||||
connect( this, &QgsAuthOAuth2Config::requestTimeoutChanged, this, &QgsAuthOAuth2Config::configChanged );
|
connect( this, &QgsAuthOAuth2Config::requestTimeoutChanged, this, &QgsAuthOAuth2Config::configChanged );
|
||||||
connect( this, &QgsAuthOAuth2Config::queryPairsChanged, this, &QgsAuthOAuth2Config::configChanged );
|
connect( this, &QgsAuthOAuth2Config::queryPairsChanged, this, &QgsAuthOAuth2Config::configChanged );
|
||||||
connect( this, &QgsAuthOAuth2Config::customHeaderChanged, this, &QgsAuthOAuth2Config::configChanged );
|
connect( this, &QgsAuthOAuth2Config::customHeaderChanged, this, &QgsAuthOAuth2Config::configChanged );
|
||||||
|
connect( this, &QgsAuthOAuth2Config::extraTokensChanged, this, &QgsAuthOAuth2Config::configChanged );
|
||||||
|
|
||||||
// always recheck validity on any change
|
// always recheck validity on any change
|
||||||
// this, in turn, may emit validityChanged( bool )
|
// this, in turn, may emit validityChanged( bool )
|
||||||
@ -230,6 +231,14 @@ void QgsAuthOAuth2Config::setCustomHeader( const QString &header )
|
|||||||
emit customHeaderChanged( mCustomHeader );
|
emit customHeaderChanged( mCustomHeader );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsAuthOAuth2Config::setExtraTokens( const QVariantMap &tokens )
|
||||||
|
{
|
||||||
|
const QVariantMap preval( mExtraTokens );
|
||||||
|
mExtraTokens = tokens;
|
||||||
|
if ( preval != tokens )
|
||||||
|
emit extraTokensChanged( mExtraTokens );
|
||||||
|
}
|
||||||
|
|
||||||
void QgsAuthOAuth2Config::setRequestTimeout( int value )
|
void QgsAuthOAuth2Config::setRequestTimeout( int value )
|
||||||
{
|
{
|
||||||
const int preval( mRequestTimeout );
|
const int preval( mRequestTimeout );
|
||||||
@ -269,6 +278,7 @@ void QgsAuthOAuth2Config::setToDefaults()
|
|||||||
setPersistToken( false );
|
setPersistToken( false );
|
||||||
setAccessMethod( QgsAuthOAuth2Config::AccessMethod::Header );
|
setAccessMethod( QgsAuthOAuth2Config::AccessMethod::Header );
|
||||||
setCustomHeader( QString() );
|
setCustomHeader( QString() );
|
||||||
|
setExtraTokens( QVariantMap() );
|
||||||
setRequestTimeout( 30 ); // in seconds
|
setRequestTimeout( 30 ); // in seconds
|
||||||
setQueryPairs( QVariantMap() );
|
setQueryPairs( QVariantMap() );
|
||||||
}
|
}
|
||||||
@ -381,6 +391,9 @@ bool QgsAuthOAuth2Config::loadConfigTxt(
|
|||||||
|
|
||||||
if ( variantMap.contains( QStringLiteral( "customHeader" ) ) )
|
if ( variantMap.contains( QStringLiteral( "customHeader" ) ) )
|
||||||
setCustomHeader( variantMap.value( QStringLiteral( "customHeader" ) ).toString() );
|
setCustomHeader( variantMap.value( QStringLiteral( "customHeader" ) ).toString() );
|
||||||
|
if ( variantMap.contains( QStringLiteral( "extraTokens" ) ) )
|
||||||
|
setExtraTokens( variantMap.value( QStringLiteral( "extraTokens" ) ).toMap() );
|
||||||
|
|
||||||
if ( variantMap.contains( QStringLiteral( "requestTimeout" ) ) )
|
if ( variantMap.contains( QStringLiteral( "requestTimeout" ) ) )
|
||||||
setRequestTimeout( variantMap.value( QStringLiteral( "requestTimeout" ) ).toInt() );
|
setRequestTimeout( variantMap.value( QStringLiteral( "requestTimeout" ) ).toInt() );
|
||||||
if ( variantMap.contains( QStringLiteral( "requestUrl" ) ) )
|
if ( variantMap.contains( QStringLiteral( "requestUrl" ) ) )
|
||||||
@ -428,6 +441,7 @@ QByteArray QgsAuthOAuth2Config::saveConfigTxt(
|
|||||||
variant.insert( "clientSecret", clientSecret() );
|
variant.insert( "clientSecret", clientSecret() );
|
||||||
variant.insert( "configType", static_cast<int>( configType() ) );
|
variant.insert( "configType", static_cast<int>( configType() ) );
|
||||||
variant.insert( "customHeader", customHeader() );
|
variant.insert( "customHeader", customHeader() );
|
||||||
|
variant.insert( "extraTokens", extraTokens() );
|
||||||
variant.insert( "description", description() );
|
variant.insert( "description", description() );
|
||||||
variant.insert( "grantFlow", static_cast<int>( grantFlow() ) );
|
variant.insert( "grantFlow", static_cast<int>( grantFlow() ) );
|
||||||
variant.insert( "id", id() );
|
variant.insert( "id", id() );
|
||||||
@ -480,6 +494,7 @@ QVariantMap QgsAuthOAuth2Config::mappedProperties() const
|
|||||||
vmap.insert( QStringLiteral( "refreshTokenUrl" ), this->refreshTokenUrl() );
|
vmap.insert( QStringLiteral( "refreshTokenUrl" ), this->refreshTokenUrl() );
|
||||||
vmap.insert( QStringLiteral( "accessMethod" ), static_cast<int>( this->accessMethod() ) );
|
vmap.insert( QStringLiteral( "accessMethod" ), static_cast<int>( this->accessMethod() ) );
|
||||||
vmap.insert( QStringLiteral( "customHeader" ), this->customHeader() );
|
vmap.insert( QStringLiteral( "customHeader" ), this->customHeader() );
|
||||||
|
vmap.insert( QStringLiteral( "extraTokens" ), this->extraTokens() );
|
||||||
vmap.insert( QStringLiteral( "requestTimeout" ), this->requestTimeout() );
|
vmap.insert( QStringLiteral( "requestTimeout" ), this->requestTimeout() );
|
||||||
vmap.insert( QStringLiteral( "requestUrl" ), this->requestUrl() );
|
vmap.insert( QStringLiteral( "requestUrl" ), this->requestUrl() );
|
||||||
vmap.insert( QStringLiteral( "scope" ), this->scope() );
|
vmap.insert( QStringLiteral( "scope" ), this->scope() );
|
||||||
|
@ -92,6 +92,7 @@ class QgsAuthOAuth2Config : public QObject
|
|||||||
Q_PROPERTY( int requestTimeout READ requestTimeout WRITE setRequestTimeout NOTIFY requestTimeoutChanged )
|
Q_PROPERTY( int requestTimeout READ requestTimeout WRITE setRequestTimeout NOTIFY requestTimeoutChanged )
|
||||||
Q_PROPERTY( QVariantMap queryPairs READ queryPairs WRITE setQueryPairs NOTIFY queryPairsChanged )
|
Q_PROPERTY( QVariantMap queryPairs READ queryPairs WRITE setQueryPairs NOTIFY queryPairsChanged )
|
||||||
Q_PROPERTY( QString customHeader READ customHeader WRITE setCustomHeader NOTIFY customHeaderChanged )
|
Q_PROPERTY( QString customHeader READ customHeader WRITE setCustomHeader NOTIFY customHeaderChanged )
|
||||||
|
Q_PROPERTY( QVariantMap extraTokens READ extraTokens WRITE setExtraTokens NOTIFY extraTokensChanged )
|
||||||
|
|
||||||
//! Construct a QgsAuthOAuth2Config instance
|
//! Construct a QgsAuthOAuth2Config instance
|
||||||
explicit QgsAuthOAuth2Config( QObject *parent = nullptr );
|
explicit QgsAuthOAuth2Config( QObject *parent = nullptr );
|
||||||
@ -165,6 +166,14 @@ class QgsAuthOAuth2Config : public QObject
|
|||||||
*/
|
*/
|
||||||
QString customHeader() const { return mCustomHeader; }
|
QString customHeader() const { return mCustomHeader; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the extra tokens that will be added into the header for header access methods where
|
||||||
|
* the map key represents the token name and the associated value the header name to be used.
|
||||||
|
*
|
||||||
|
* \since QGIS 3.42
|
||||||
|
*/
|
||||||
|
QVariantMap extraTokens() const { return mExtraTokens; }
|
||||||
|
|
||||||
//! Request timeout
|
//! Request timeout
|
||||||
int requestTimeout() const { return mRequestTimeout; }
|
int requestTimeout() const { return mRequestTimeout; }
|
||||||
|
|
||||||
@ -316,6 +325,14 @@ class QgsAuthOAuth2Config : public QObject
|
|||||||
*/
|
*/
|
||||||
void setCustomHeader( const QString &header );
|
void setCustomHeader( const QString &header );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the extra \a tokens that will be added into the header for header access methods where
|
||||||
|
* the map key represents the token name and the associated value the header name to be used.
|
||||||
|
*
|
||||||
|
* \since QGIS 3.42
|
||||||
|
*/
|
||||||
|
void setExtraTokens( const QVariantMap &tokens );
|
||||||
|
|
||||||
//! Set request timeout to \a value
|
//! Set request timeout to \a value
|
||||||
void setRequestTimeout( int value );
|
void setRequestTimeout( int value );
|
||||||
//! Set query pairs to \a pairs
|
//! Set query pairs to \a pairs
|
||||||
@ -378,6 +395,12 @@ class QgsAuthOAuth2Config : public QObject
|
|||||||
*/
|
*/
|
||||||
void customHeaderChanged( const QString & );
|
void customHeaderChanged( const QString & );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted when the extra tokens header list has changed
|
||||||
|
* \since QGIS 3.42
|
||||||
|
*/
|
||||||
|
void extraTokensChanged( const QVariantMap & );
|
||||||
|
|
||||||
//! Emitted when configuration request timeout has changed
|
//! Emitted when configuration request timeout has changed
|
||||||
void requestTimeoutChanged( int );
|
void requestTimeoutChanged( int );
|
||||||
//! Emitted when configuration query pair has changed
|
//! Emitted when configuration query pair has changed
|
||||||
@ -407,6 +430,7 @@ class QgsAuthOAuth2Config : public QObject
|
|||||||
bool mPersistToken = false;
|
bool mPersistToken = false;
|
||||||
AccessMethod mAccessMethod = AccessMethod::Header;
|
AccessMethod mAccessMethod = AccessMethod::Header;
|
||||||
QString mCustomHeader;
|
QString mCustomHeader;
|
||||||
|
QVariantMap mExtraTokens;
|
||||||
int mRequestTimeout = 30; // in seconds
|
int mRequestTimeout = 30; // in seconds
|
||||||
QVariantMap mQueryPairs;
|
QVariantMap mQueryPairs;
|
||||||
bool mValid = false;
|
bool mValid = false;
|
||||||
|
@ -322,6 +322,21 @@ bool QgsAuthOAuth2Method::updateNetworkRequest( QNetworkRequest &request, const
|
|||||||
{
|
{
|
||||||
const QString header = o2->oauth2config()->customHeader().isEmpty() ? QString( O2_HTTP_AUTHORIZATION_HEADER ) : o2->oauth2config()->customHeader();
|
const QString header = o2->oauth2config()->customHeader().isEmpty() ? QString( O2_HTTP_AUTHORIZATION_HEADER ) : o2->oauth2config()->customHeader();
|
||||||
request.setRawHeader( header.toLatin1(), QStringLiteral( "Bearer %1" ).arg( o2->token() ).toLatin1() );
|
request.setRawHeader( header.toLatin1(), QStringLiteral( "Bearer %1" ).arg( o2->token() ).toLatin1() );
|
||||||
|
|
||||||
|
const QVariantMap extraTokens = o2->oauth2config()->extraTokens();
|
||||||
|
if ( !extraTokens.isEmpty() )
|
||||||
|
{
|
||||||
|
const QVariantMap receivedExtraTokens = o2->extraTokens();
|
||||||
|
const QStringList extraTokenNames = extraTokens.keys();
|
||||||
|
for ( const QString &extraTokenName : extraTokenNames )
|
||||||
|
{
|
||||||
|
if ( receivedExtraTokens.contains( extraTokenName ) )
|
||||||
|
{
|
||||||
|
request.setRawHeader( extraTokens[extraTokenName].toString().replace( '_', '-' ).toLatin1(), receivedExtraTokens[extraTokenName].toString().toLatin1() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef QGISDEBUG
|
#ifdef QGISDEBUG
|
||||||
msg = QStringLiteral( "Updated request HEADER with access token for authcfg: %1" ).arg( authcfg );
|
msg = QStringLiteral( "Updated request HEADER with access token for authcfg: %1" ).arg( authcfg );
|
||||||
QgsDebugMsgLevel( msg, 2 );
|
QgsDebugMsgLevel( msg, 2 );
|
||||||
|
@ -191,6 +191,11 @@ void QgsAuthOAuth2Edit::setupConnections()
|
|||||||
connect( spnbxRequestTimeout, static_cast<void ( QSpinBox::* )( int )>( &QSpinBox::valueChanged ), mOAuthConfigCustom.get(), &QgsAuthOAuth2Config::setRequestTimeout );
|
connect( spnbxRequestTimeout, static_cast<void ( QSpinBox::* )( int )>( &QSpinBox::valueChanged ), mOAuthConfigCustom.get(), &QgsAuthOAuth2Config::setRequestTimeout );
|
||||||
|
|
||||||
connect( mTokenHeaderLineEdit, &QLineEdit::textChanged, mOAuthConfigCustom.get(), &QgsAuthOAuth2Config::setCustomHeader );
|
connect( mTokenHeaderLineEdit, &QLineEdit::textChanged, mOAuthConfigCustom.get(), &QgsAuthOAuth2Config::setCustomHeader );
|
||||||
|
connect( mExtraTokensTable, &QTableWidget::cellChanged, mOAuthConfigCustom.get(), [=]( int, int ) {
|
||||||
|
mOAuthConfigCustom->setExtraTokens( extraTokens() );
|
||||||
|
} );
|
||||||
|
connect( mAddExtraTokenButton, &QToolButton::clicked, this, &QgsAuthOAuth2Edit::addExtraToken );
|
||||||
|
connect( mRemoveExtraTokenButton, &QToolButton::clicked, this, &QgsAuthOAuth2Edit::removeExtraToken );
|
||||||
|
|
||||||
connect( mOAuthConfigCustom.get(), &QgsAuthOAuth2Config::validityChanged, this, &QgsAuthOAuth2Edit::configValidityChanged );
|
connect( mOAuthConfigCustom.get(), &QgsAuthOAuth2Config::validityChanged, this, &QgsAuthOAuth2Edit::configValidityChanged );
|
||||||
|
|
||||||
@ -403,6 +408,8 @@ void QgsAuthOAuth2Edit::loadFromOAuthConfig( const QgsAuthOAuth2Config *config )
|
|||||||
leApiKey->setText( config->apiKey() );
|
leApiKey->setText( config->apiKey() );
|
||||||
mTokenHeaderLineEdit->setText( config->customHeader() );
|
mTokenHeaderLineEdit->setText( config->customHeader() );
|
||||||
|
|
||||||
|
populateExtraTokens( config->extraTokens() );
|
||||||
|
|
||||||
// advanced
|
// advanced
|
||||||
chkbxTokenPersist->setChecked( config->persistToken() );
|
chkbxTokenPersist->setChecked( config->persistToken() );
|
||||||
cmbbxAccessMethod->setCurrentIndex( static_cast<int>( config->accessMethod() ) );
|
cmbbxAccessMethod->setCurrentIndex( static_cast<int>( config->accessMethod() ) );
|
||||||
@ -873,11 +880,19 @@ void QgsAuthOAuth2Edit::updateConfigAccessMethod( int indx )
|
|||||||
case QgsAuthOAuth2Config::AccessMethod::Header:
|
case QgsAuthOAuth2Config::AccessMethod::Header:
|
||||||
mTokenHeaderLineEdit->setVisible( true );
|
mTokenHeaderLineEdit->setVisible( true );
|
||||||
mTokenHeaderLabel->setVisible( true );
|
mTokenHeaderLabel->setVisible( true );
|
||||||
|
mExtraTokensHeaderLabel->setVisible( true );
|
||||||
|
mExtraTokensTable->setVisible( true );
|
||||||
|
mAddExtraTokenButton->setVisible( true );
|
||||||
|
mAddExtraTokenButton->setVisible( true );
|
||||||
break;
|
break;
|
||||||
case QgsAuthOAuth2Config::AccessMethod::Form:
|
case QgsAuthOAuth2Config::AccessMethod::Form:
|
||||||
case QgsAuthOAuth2Config::AccessMethod::Query:
|
case QgsAuthOAuth2Config::AccessMethod::Query:
|
||||||
mTokenHeaderLineEdit->setVisible( false );
|
mTokenHeaderLineEdit->setVisible( false );
|
||||||
mTokenHeaderLabel->setVisible( false );
|
mTokenHeaderLabel->setVisible( false );
|
||||||
|
mExtraTokensHeaderLabel->setVisible( false );
|
||||||
|
mExtraTokensTable->setVisible( false );
|
||||||
|
mAddExtraTokenButton->setVisible( false );
|
||||||
|
mAddExtraTokenButton->setVisible( false );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -915,7 +930,6 @@ void QgsAuthOAuth2Edit::populateQueryPairs( const QVariantMap &querypairs, bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QgsAuthOAuth2Edit::queryTableSelectionChanged()
|
void QgsAuthOAuth2Edit::queryTableSelectionChanged()
|
||||||
{
|
{
|
||||||
const bool hassel = tblwdgQueryPairs->selectedItems().count() > 0;
|
const bool hassel = tblwdgQueryPairs->selectedItems().count() > 0;
|
||||||
@ -941,7 +955,6 @@ QVariantMap QgsAuthOAuth2Edit::queryPairs() const
|
|||||||
return querypairs;
|
return querypairs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QgsAuthOAuth2Edit::addQueryPair()
|
void QgsAuthOAuth2Edit::addQueryPair()
|
||||||
{
|
{
|
||||||
addQueryPairRow( QString(), QString() );
|
addQueryPairRow( QString(), QString() );
|
||||||
@ -956,7 +969,6 @@ void QgsAuthOAuth2Edit::removeQueryPair()
|
|||||||
tblwdgQueryPairs->removeRow( tblwdgQueryPairs->currentRow() );
|
tblwdgQueryPairs->removeRow( tblwdgQueryPairs->currentRow() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QgsAuthOAuth2Edit::clearQueryPairs()
|
void QgsAuthOAuth2Edit::clearQueryPairs()
|
||||||
{
|
{
|
||||||
for ( int i = tblwdgQueryPairs->rowCount(); i > 0; --i )
|
for ( int i = tblwdgQueryPairs->rowCount(); i > 0; --i )
|
||||||
@ -965,6 +977,78 @@ void QgsAuthOAuth2Edit::clearQueryPairs()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariantMap QgsAuthOAuth2Edit::extraTokens() const
|
||||||
|
{
|
||||||
|
QVariantMap extraTokens;
|
||||||
|
for ( int i = 0; i < mExtraTokensTable->rowCount(); ++i )
|
||||||
|
{
|
||||||
|
if ( mExtraTokensTable->item( i, 0 )->text().isEmpty() || mExtraTokensTable->item( i, 1 )->text().isEmpty() )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
extraTokens.insert( mExtraTokensTable->item( i, 0 )->text(), QVariant( mExtraTokensTable->item( i, 1 )->text() ) );
|
||||||
|
}
|
||||||
|
return extraTokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsAuthOAuth2Edit::addExtraToken()
|
||||||
|
{
|
||||||
|
mExtraTokensTable->blockSignals( true );
|
||||||
|
addExtraTokenRow( QString(), QString() );
|
||||||
|
mExtraTokensTable->blockSignals( false );
|
||||||
|
|
||||||
|
mExtraTokensTable->setFocus();
|
||||||
|
mExtraTokensTable->setCurrentCell( mExtraTokensTable->rowCount() - 1, 0 );
|
||||||
|
mExtraTokensTable->edit( mExtraTokensTable->currentIndex() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsAuthOAuth2Edit::removeExtraToken()
|
||||||
|
{
|
||||||
|
mExtraTokensTable->removeRow( mExtraTokensTable->currentRow() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsAuthOAuth2Edit::clearExtraTokens()
|
||||||
|
{
|
||||||
|
for ( int i = mExtraTokensTable->rowCount(); i > 0; --i )
|
||||||
|
{
|
||||||
|
mExtraTokensTable->removeRow( i - 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsAuthOAuth2Edit::addExtraTokenRow( const QString &key, const QString &val )
|
||||||
|
{
|
||||||
|
const int rowCnt = mExtraTokensTable->rowCount();
|
||||||
|
mExtraTokensTable->insertRow( rowCnt );
|
||||||
|
|
||||||
|
const Qt::ItemFlags itmFlags = Qt::ItemIsEnabled | Qt::ItemIsSelectable
|
||||||
|
| Qt::ItemIsEditable | Qt::ItemIsDropEnabled;
|
||||||
|
|
||||||
|
QTableWidgetItem *keyItm = new QTableWidgetItem( key );
|
||||||
|
keyItm->setFlags( itmFlags );
|
||||||
|
mExtraTokensTable->setItem( rowCnt, 0, keyItm );
|
||||||
|
|
||||||
|
QTableWidgetItem *valItm = new QTableWidgetItem( val );
|
||||||
|
keyItm->setFlags( itmFlags );
|
||||||
|
mExtraTokensTable->setItem( rowCnt, 1, valItm );
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsAuthOAuth2Edit::populateExtraTokens( const QVariantMap &tokens, bool append )
|
||||||
|
{
|
||||||
|
mExtraTokensTable->blockSignals( true );
|
||||||
|
if ( !append )
|
||||||
|
{
|
||||||
|
clearExtraTokens();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantMap::const_iterator i = tokens.constBegin();
|
||||||
|
while ( i != tokens.constEnd() )
|
||||||
|
{
|
||||||
|
addExtraTokenRow( i.key(), i.value().toString() );
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
mExtraTokensTable->blockSignals( false );
|
||||||
|
}
|
||||||
|
|
||||||
void QgsAuthOAuth2Edit::parseSoftwareStatement( const QString &path )
|
void QgsAuthOAuth2Edit::parseSoftwareStatement( const QString &path )
|
||||||
{
|
{
|
||||||
QFile file( path );
|
QFile file( path );
|
||||||
|
@ -90,6 +90,14 @@ class QgsAuthOAuth2Edit : public QgsAuthMethodEdit, private Ui::QgsAuthOAuth2Edi
|
|||||||
|
|
||||||
void populateQueryPairs( const QVariantMap &querypairs, bool append = false );
|
void populateQueryPairs( const QVariantMap &querypairs, bool append = false );
|
||||||
|
|
||||||
|
void addExtraToken();
|
||||||
|
|
||||||
|
void removeExtraToken();
|
||||||
|
|
||||||
|
void clearExtraTokens();
|
||||||
|
|
||||||
|
void populateExtraTokens( const QVariantMap &tokens, bool append = false );
|
||||||
|
|
||||||
void queryTableSelectionChanged();
|
void queryTableSelectionChanged();
|
||||||
|
|
||||||
void updateConfigQueryPairs();
|
void updateConfigQueryPairs();
|
||||||
@ -139,6 +147,9 @@ class QgsAuthOAuth2Edit : public QgsAuthMethodEdit, private Ui::QgsAuthOAuth2Edi
|
|||||||
void addQueryPairRow( const QString &key, const QString &val );
|
void addQueryPairRow( const QString &key, const QString &val );
|
||||||
QVariantMap queryPairs() const;
|
QVariantMap queryPairs() const;
|
||||||
|
|
||||||
|
void addExtraTokenRow( const QString &key, const QString &val );
|
||||||
|
QVariantMap extraTokens() const;
|
||||||
|
|
||||||
int customTab() const { return 0; }
|
int customTab() const { return 0; }
|
||||||
int definedTab() const { return 1; }
|
int definedTab() const { return 1; }
|
||||||
int statementTab() const { return 2; }
|
int statementTab() const { return 2; }
|
||||||
|
@ -253,7 +253,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="20" column="1">
|
<item row="21" column="1">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
@ -366,7 +366,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="19" column="0">
|
<item row="20" column="0">
|
||||||
<widget class="QLabel" name="lblRequestTimeout">
|
<widget class="QLabel" name="lblRequestTimeout">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
@ -523,7 +523,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="19" column="1">
|
<item row="20" column="1">
|
||||||
<widget class="QSpinBox" name="spnbxRequestTimeout">
|
<widget class="QSpinBox" name="spnbxRequestTimeout">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
@ -637,6 +637,146 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="19" column="0">
|
||||||
|
<widget class="QLabel" name="mExtraTokensHeaderLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Extra token(s) header</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="19" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTableWidget" name="mExtraTokensTable">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>70</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::AllEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="dragEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="dragDropMode">
|
||||||
|
<enum>QAbstractItemView::DragOnly</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="horizontalHeaderMinimumSectionSize">
|
||||||
|
<number>120</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="horizontalHeaderDefaultSectionSize">
|
||||||
|
<number>120</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="horizontalHeaderStretchLastSection">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="verticalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Token</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Header name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>These extra tokens will be included in the request headers sent to the resource when provided by the token endpoint</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="mAddExtraTokenButton">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">+</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="mRemoveExtraTokenButton">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">–</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_7">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
@ -892,6 +1032,7 @@
|
|||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="3" column="0" colspan="2">
|
<item row="3" column="0" colspan="2">
|
||||||
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
@ -999,6 +1140,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -125,6 +125,9 @@ QgsAuthOAuth2Config *TestQgsAuthOAuth2Method::baseConfig( bool loaded )
|
|||||||
config->setAccessMethod( QgsAuthOAuth2Config::AccessMethod::Header );
|
config->setAccessMethod( QgsAuthOAuth2Config::AccessMethod::Header );
|
||||||
config->setCustomHeader( QStringLiteral( "x-auth" ) );
|
config->setCustomHeader( QStringLiteral( "x-auth" ) );
|
||||||
config->setRequestTimeout( 30 ); // in seconds
|
config->setRequestTimeout( 30 ); // in seconds
|
||||||
|
QVariantMap extraTokens;
|
||||||
|
extraTokens.insert( "id_token", "X-QGS-OPENID" );
|
||||||
|
config->setExtraTokens( extraTokens );
|
||||||
QVariantMap queryPairs;
|
QVariantMap queryPairs;
|
||||||
queryPairs.insert( "pf.username", "myusername" );
|
queryPairs.insert( "pf.username", "myusername" );
|
||||||
queryPairs.insert( "pf.password", "mypassword" );
|
queryPairs.insert( "pf.password", "mypassword" );
|
||||||
@ -147,6 +150,9 @@ QByteArray TestQgsAuthOAuth2Method::baseConfigTxt( bool pretty )
|
|||||||
" \"configType\": 1,\n"
|
" \"configType\": 1,\n"
|
||||||
" \"customHeader\": \"x-auth\",\n"
|
" \"customHeader\": \"x-auth\",\n"
|
||||||
" \"description\": \"A test config\",\n"
|
" \"description\": \"A test config\",\n"
|
||||||
|
" \"extraTokens\": {\n"
|
||||||
|
" \"id_token\": \"X-QGS-OPENID\"\n"
|
||||||
|
" },\n"
|
||||||
" \"grantFlow\": 0,\n"
|
" \"grantFlow\": 0,\n"
|
||||||
" \"id\": \"abc1234\",\n"
|
" \"id\": \"abc1234\",\n"
|
||||||
" \"name\": \"MyConfig\",\n"
|
" \"name\": \"MyConfig\",\n"
|
||||||
@ -178,6 +184,7 @@ QByteArray TestQgsAuthOAuth2Method::baseConfigTxt( bool pretty )
|
|||||||
"\"configType\":1,"
|
"\"configType\":1,"
|
||||||
"\"customHeader\":\"x-auth\","
|
"\"customHeader\":\"x-auth\","
|
||||||
"\"description\":\"A test config\","
|
"\"description\":\"A test config\","
|
||||||
|
"\"extraTokens\":{\"id_token\":\"X-QGS-OPENID\"},"
|
||||||
"\"grantFlow\":0,"
|
"\"grantFlow\":0,"
|
||||||
"\"id\":\"abc1234\","
|
"\"id\":\"abc1234\","
|
||||||
"\"name\":\"MyConfig\","
|
"\"name\":\"MyConfig\","
|
||||||
@ -215,6 +222,9 @@ QVariantMap TestQgsAuthOAuth2Method::baseVariantMap()
|
|||||||
vmap.insert( "password", "mypassword" );
|
vmap.insert( "password", "mypassword" );
|
||||||
vmap.insert( "persistToken", false );
|
vmap.insert( "persistToken", false );
|
||||||
vmap.insert( "customHeader", "x-auth" );
|
vmap.insert( "customHeader", "x-auth" );
|
||||||
|
QVariantMap extraTokens;
|
||||||
|
extraTokens.insert( "id_token", "X-QGS-OPENID" );
|
||||||
|
vmap.insert( "extraTokens", extraTokens );
|
||||||
QVariantMap qpairs;
|
QVariantMap qpairs;
|
||||||
qpairs.insert( "pf.password", "mypassword" );
|
qpairs.insert( "pf.password", "mypassword" );
|
||||||
qpairs.insert( "pf.username", "myusername" );
|
qpairs.insert( "pf.username", "myusername" );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user