@@ -75,7 +75,7 @@ void QgsAfsRootItem::onConnectionsChanged()
75
75
76
76
void QgsAfsRootItem::newConnection ()
77
77
{
78
- QgsNewHttpConnection nc ( nullptr , QgsNewHttpConnection::ConnectionOther, QStringLiteral ( " qgis/connections-arcgisfeatureserver/" ) );
78
+ QgsNewHttpConnection nc ( nullptr , QgsNewHttpConnection::ConnectionOther, QStringLiteral ( " qgis/connections-arcgisfeatureserver/" ), QString (), QgsNewHttpConnection::FlagShowHttpSettings );
79
79
nc.setWindowTitle ( tr ( " Create a New ArcGIS Feature Server Connection" ) );
80
80
81
81
if ( nc.exec () )
@@ -87,31 +87,31 @@ void QgsAfsRootItem::newConnection()
87
87
88
88
// /////////////////////////////////////////////////////////////////////////////
89
89
90
- void addFolderItems ( QVector< QgsDataItem * > &items, const QVariantMap &serviceData, const QString &baseUrl, const QString &authcfg, QgsDataItem *parent )
90
+ void addFolderItems ( QVector< QgsDataItem * > &items, const QVariantMap &serviceData, const QString &baseUrl, const QString &authcfg, const QgsStringMap &headers, QgsDataItem *parent )
91
91
{
92
- QgsArcGisRestUtils::visitFolderItems ( [parent, &baseUrl, &items, authcfg]( const QString & name, const QString & url )
92
+ QgsArcGisRestUtils::visitFolderItems ( [parent, &baseUrl, &items, headers, authcfg]( const QString & name, const QString & url )
93
93
{
94
- std::unique_ptr< QgsAfsFolderItem > folderItem = qgis::make_unique< QgsAfsFolderItem >( parent, name, url, baseUrl, authcfg );
94
+ std::unique_ptr< QgsAfsFolderItem > folderItem = qgis::make_unique< QgsAfsFolderItem >( parent, name, url, baseUrl, authcfg, headers );
95
95
items.append ( folderItem.release () );
96
96
}, serviceData, baseUrl );
97
97
}
98
98
99
- void addServiceItems ( QVector< QgsDataItem * > &items, const QVariantMap &serviceData, const QString &baseUrl, const QString &authcfg, QgsDataItem *parent )
99
+ void addServiceItems ( QVector< QgsDataItem * > &items, const QVariantMap &serviceData, const QString &baseUrl, const QString &authcfg, const QgsStringMap &headers, QgsDataItem *parent )
100
100
{
101
101
QgsArcGisRestUtils::visitServiceItems (
102
- [&items, parent, authcfg]( const QString & name, const QString & url )
102
+ [&items, parent, authcfg, headers ]( const QString & name, const QString & url )
103
103
{
104
- std::unique_ptr< QgsAfsServiceItem > serviceItem = qgis::make_unique< QgsAfsServiceItem >( parent, name, url, url, authcfg );
104
+ std::unique_ptr< QgsAfsServiceItem > serviceItem = qgis::make_unique< QgsAfsServiceItem >( parent, name, url, url, authcfg, headers );
105
105
items.append ( serviceItem.release () );
106
106
}, serviceData, baseUrl );
107
107
}
108
108
109
- void addLayerItems ( QVector< QgsDataItem * > &items, const QVariantMap &serviceData, const QString &parentUrl, const QString &authcfg, QgsDataItem *parent )
109
+ void addLayerItems ( QVector< QgsDataItem * > &items, const QVariantMap &serviceData, const QString &parentUrl, const QString &authcfg, const QgsStringMap &headers, QgsDataItem *parent )
110
110
{
111
111
QMap< QString, QgsDataItem * > layerItems;
112
112
QMap< QString, QString > parents;
113
113
114
- QgsArcGisRestUtils::addLayerItems ( [parent, &layerItems, &parents, authcfg]( const QString & parentLayerId, const QString & id, const QString & name, const QString & description, const QString & url, bool isParent, const QString & authid )
114
+ QgsArcGisRestUtils::addLayerItems ( [parent, &layerItems, &parents, authcfg, headers ]( const QString & parentLayerId, const QString & id, const QString & name, const QString & description, const QString & url, bool isParent, const QString & authid )
115
115
{
116
116
Q_UNUSED ( description );
117
117
@@ -120,12 +120,12 @@ void addLayerItems( QVector< QgsDataItem * > &items, const QVariantMap &serviceD
120
120
121
121
if ( isParent )
122
122
{
123
- std::unique_ptr< QgsAfsParentLayerItem > layerItem = qgis::make_unique< QgsAfsParentLayerItem >( parent, name, url, authcfg );
123
+ std::unique_ptr< QgsAfsParentLayerItem > layerItem = qgis::make_unique< QgsAfsParentLayerItem >( parent, name, url, authcfg, headers );
124
124
layerItems.insert ( id, layerItem.release () );
125
125
}
126
126
else
127
127
{
128
- std::unique_ptr< QgsAfsLayerItem > layerItem = qgis::make_unique< QgsAfsLayerItem >( parent, name, url, name, authid, authcfg );
128
+ std::unique_ptr< QgsAfsLayerItem > layerItem = qgis::make_unique< QgsAfsLayerItem >( parent, name, url, name, authid, authcfg, headers );
129
129
layerItems.insert ( id, layerItem.release () );
130
130
}
131
131
@@ -158,10 +158,14 @@ QVector<QgsDataItem *> QgsAfsConnectionItem::createChildren()
158
158
const QgsOwsConnection connection ( QStringLiteral ( " ARCGISFEATURESERVER" ), mConnName );
159
159
const QString url = connection.uri ().param ( QStringLiteral ( " url" ) );
160
160
const QString authcfg = connection.uri ().param ( QStringLiteral ( " authcfg" ) );
161
+ const QString referer = connection.uri ().param ( QStringLiteral ( " referer" ) );
162
+ QgsStringMap headers;
163
+ if ( ! referer.isEmpty () )
164
+ headers[ QStringLiteral ( " Referer" )] = referer;
161
165
162
166
QVector<QgsDataItem *> items;
163
167
QString errorTitle, errorMessage;
164
- const QVariantMap serviceData = QgsArcGisRestUtils::getServiceInfo ( url, authcfg, errorTitle, errorMessage );
168
+ const QVariantMap serviceData = QgsArcGisRestUtils::getServiceInfo ( url, authcfg, errorTitle, errorMessage, headers );
165
169
if ( serviceData.isEmpty () )
166
170
{
167
171
if ( !errorMessage.isEmpty () )
@@ -174,9 +178,9 @@ QVector<QgsDataItem *> QgsAfsConnectionItem::createChildren()
174
178
return items;
175
179
}
176
180
177
- addFolderItems ( items, serviceData, url, authcfg, this );
178
- addServiceItems ( items, serviceData, url, authcfg, this );
179
- addLayerItems ( items, serviceData, url, authcfg, this );
181
+ addFolderItems ( items, serviceData, url, authcfg, headers, this );
182
+ addServiceItems ( items, serviceData, url, authcfg, headers, this );
183
+ addLayerItems ( items, serviceData, url, authcfg, headers, this );
180
184
181
185
return items;
182
186
}
@@ -219,7 +223,7 @@ QList<QAction *> QgsAfsConnectionItem::actions( QWidget *parent )
219
223
220
224
void QgsAfsConnectionItem::editConnection ()
221
225
{
222
- QgsNewHttpConnection nc ( nullptr , QgsNewHttpConnection::ConnectionOther, QStringLiteral ( " qgis/connections-arcgisfeatureserver/" ), mName );
226
+ QgsNewHttpConnection nc ( nullptr , QgsNewHttpConnection::ConnectionOther, QStringLiteral ( " qgis/connections-arcgisfeatureserver/" ), mName , QgsNewHttpConnection::FlagShowHttpSettings );
223
227
nc.setWindowTitle ( tr ( " Modify ArcGIS Feature Server Connection" ) );
224
228
225
229
if ( nc.exec () )
@@ -255,10 +259,11 @@ void QgsAfsConnectionItem::refreshConnection()
255
259
#endif
256
260
257
261
258
- QgsAfsFolderItem::QgsAfsFolderItem ( QgsDataItem *parent, const QString &name, const QString &path, const QString &baseUrl, const QString &authcfg )
262
+ QgsAfsFolderItem::QgsAfsFolderItem ( QgsDataItem *parent, const QString &name, const QString &path, const QString &baseUrl, const QString &authcfg, const QgsStringMap &headers )
259
263
: QgsDataCollectionItem( parent, name, path )
260
264
, mBaseUrl( baseUrl )
261
265
, mAuthCfg( authcfg )
266
+ , mHeaders( headers )
262
267
{
263
268
mIconName = QStringLiteral ( " mIconDbSchema.svg" );
264
269
mCapabilities |= Collapse;
@@ -272,7 +277,7 @@ QVector<QgsDataItem *> QgsAfsFolderItem::createChildren()
272
277
273
278
QVector<QgsDataItem *> items;
274
279
QString errorTitle, errorMessage;
275
- const QVariantMap serviceData = QgsArcGisRestUtils::getServiceInfo ( url, mAuthCfg , errorTitle, errorMessage );
280
+ const QVariantMap serviceData = QgsArcGisRestUtils::getServiceInfo ( url, mAuthCfg , errorTitle, errorMessage, mHeaders );
276
281
if ( serviceData.isEmpty () )
277
282
{
278
283
if ( !errorMessage.isEmpty () )
@@ -285,9 +290,9 @@ QVector<QgsDataItem *> QgsAfsFolderItem::createChildren()
285
290
return items;
286
291
}
287
292
288
- addFolderItems ( items, serviceData, mBaseUrl , mAuthCfg , this );
289
- addServiceItems ( items, serviceData, mBaseUrl , mAuthCfg , this );
290
- addLayerItems ( items, serviceData, mPath , mAuthCfg , this );
293
+ addFolderItems ( items, serviceData, mBaseUrl , mAuthCfg , mHeaders , this );
294
+ addServiceItems ( items, serviceData, mBaseUrl , mAuthCfg , mHeaders , this );
295
+ addLayerItems ( items, serviceData, mPath , mAuthCfg , mHeaders , this );
291
296
return items;
292
297
}
293
298
@@ -297,10 +302,11 @@ bool QgsAfsFolderItem::equal( const QgsDataItem *other )
297
302
return ( type () == other->type () && o && mPath == o->mPath && mName == o->mName );
298
303
}
299
304
300
- QgsAfsServiceItem::QgsAfsServiceItem ( QgsDataItem *parent, const QString &name, const QString &path, const QString &baseUrl, const QString &authcfg )
305
+ QgsAfsServiceItem::QgsAfsServiceItem ( QgsDataItem *parent, const QString &name, const QString &path, const QString &baseUrl, const QString &authcfg, const QgsStringMap &headers )
301
306
: QgsDataCollectionItem( parent, name, path )
302
307
, mBaseUrl( baseUrl )
303
308
, mAuthCfg( authcfg )
309
+ , mHeaders( headers )
304
310
{
305
311
mIconName = QStringLiteral ( " mIconDbSchema.svg" );
306
312
mCapabilities |= Collapse;
@@ -313,7 +319,7 @@ QVector<QgsDataItem *> QgsAfsServiceItem::createChildren()
313
319
314
320
QVector<QgsDataItem *> items;
315
321
QString errorTitle, errorMessage;
316
- const QVariantMap serviceData = QgsArcGisRestUtils::getServiceInfo ( url, mAuthCfg , errorTitle, errorMessage );
322
+ const QVariantMap serviceData = QgsArcGisRestUtils::getServiceInfo ( url, mAuthCfg , errorTitle, errorMessage, mHeaders );
317
323
if ( serviceData.isEmpty () )
318
324
{
319
325
if ( !errorMessage.isEmpty () )
@@ -326,9 +332,9 @@ QVector<QgsDataItem *> QgsAfsServiceItem::createChildren()
326
332
return items;
327
333
}
328
334
329
- addFolderItems ( items, serviceData, mBaseUrl , mAuthCfg , this );
330
- addServiceItems ( items, serviceData, mBaseUrl , mAuthCfg , this );
331
- addLayerItems ( items, serviceData, mPath , mAuthCfg , this );
335
+ addFolderItems ( items, serviceData, mBaseUrl , mAuthCfg , mHeaders , this );
336
+ addServiceItems ( items, serviceData, mBaseUrl , mAuthCfg , mHeaders , this );
337
+ addLayerItems ( items, serviceData, mPath , mAuthCfg , mHeaders , this );
332
338
return items;
333
339
}
334
340
@@ -338,20 +344,23 @@ bool QgsAfsServiceItem::equal( const QgsDataItem *other )
338
344
return ( type () == other->type () && o && mPath == o->mPath && mName == o->mName );
339
345
}
340
346
341
- QgsAfsLayerItem::QgsAfsLayerItem ( QgsDataItem *parent, const QString &, const QString &url, const QString &title, const QString &authid, const QString &authcfg )
347
+ QgsAfsLayerItem::QgsAfsLayerItem ( QgsDataItem *parent, const QString &, const QString &url, const QString &title, const QString &authid, const QString &authcfg, const QgsStringMap &headers )
342
348
: QgsLayerItem( parent, title, url, QString(), QgsLayerItem::Vector, QStringLiteral( " arcgisfeatureserver" ) )
343
349
{
344
350
mUri = QStringLiteral ( " crs='%1' url='%2'" ).arg ( authid, url );
345
351
if ( !authcfg.isEmpty () )
346
352
mUri += QStringLiteral ( " authcfg='%1'" ).arg ( authcfg );
353
+ if ( !headers.value ( QStringLiteral ( " Referer" ) ).isEmpty () )
354
+ mUri += QStringLiteral ( " referer='%1'" ).arg ( headers.value ( QStringLiteral ( " Referer" ) ) );
347
355
setState ( Populated );
348
356
mIconName = QStringLiteral ( " mIconAfs.svg" );
349
357
setToolTip ( url );
350
358
}
351
359
352
- QgsAfsParentLayerItem::QgsAfsParentLayerItem ( QgsDataItem *parent, const QString &name, const QString &path, const QString &authcfg )
360
+ QgsAfsParentLayerItem::QgsAfsParentLayerItem ( QgsDataItem *parent, const QString &name, const QString &path, const QString &authcfg, const QgsStringMap &headers )
353
361
: QgsDataItem( QgsDataItem::Collection, parent, name, path )
354
362
, mAuthCfg( authcfg )
363
+ , mHeaders( headers )
355
364
{
356
365
mCapabilities |= Fast;
357
366
mIconName = QStringLiteral ( " mIconDbSchema.svg" );
0 commit comments