@@ -167,7 +167,7 @@ def filter_response(self, request, response, params, permissions):
167167 :param obj permissions: OGC service permission
168168 """
169169 if request in ['GETCAPABILITIES' , 'GETPROJECTSETTINGS' ]:
170- return self .__filter_getcapabilities (response , permissions )
170+ return self .__filter_getcapabilities (response , permissions , params )
171171 elif request == 'GETFEATUREINFO' :
172172 return self .__filter_getfeatureinfo (response , permissions )
173173 else :
@@ -267,12 +267,13 @@ def __rewrite_external_wms_url(self, layer, params):
267267 lambda name : name in permitted_layers , ext_layers
268268 )))
269269
270- def __filter_getcapabilities (self , response , permissions ):
270+ def __filter_getcapabilities (self , response , permissions , params ):
271271 """Return WMS GetCapabilities or GetProjectSettings filtered by
272272 permissions.
273273
274274 :param requests.Response response: Response object
275275 :param obj permissions: OGC service permissions
276+ :param obj params: Request parameters
276277 """
277278 xml = response .text
278279 # Strip control characters
@@ -318,15 +319,15 @@ def __filter_getcapabilities(self, response, permissions):
318319 online_resources += root .findall ('.//%sGetPrint//%sOnlineResource' % (np , np ), ns )
319320 online_resources += root .findall ('.//%sLegendURL//%sOnlineResource' % (np , np ), ns )
320321
321- self .__update_online_resources (online_resources , service_url , xlinkns )
322+ self .__update_online_resources (online_resources , service_url , xlinkns , params )
322323
323324 info_url = permissions ['online_resources' ].get ('feature_info' )
324325 if info_url :
325326 # override GetFeatureInfo OnlineResources
326327 online_resources = root .findall (
327328 './/%sGetFeatureInfo//%sOnlineResource' % (np , np ), ns
328329 )
329- self .__update_online_resources (online_resources , info_url , xlinkns )
330+ self .__update_online_resources (online_resources , info_url , xlinkns , params )
330331
331332 legend_url = permissions ['online_resources' ].get ('legend' )
332333 if legend_url :
@@ -338,7 +339,7 @@ def __filter_getcapabilities(self, response, permissions):
338339 './/{%s}GetLegendGraphic//%sOnlineResource' % (sldns , np ),
339340 ns
340341 )
341- self .__update_online_resources (online_resources , legend_url , xlinkns )
342+ self .__update_online_resources (online_resources , legend_url , xlinkns , params )
342343
343344 # HACK: Inject LegendURL for group layers (which are missing LegendURL)
344345 # Pending proper upstream QGIS server fix
@@ -480,12 +481,13 @@ def __filter_getcapabilities(self, response, permissions):
480481 status = response .status_code
481482 )
482483
483- def __update_online_resources (self , elements , new_url , xlinkns ):
484+ def __update_online_resources (self , elements , new_url , xlinkns , params ):
484485 """Update OnlineResource URLs.
485486
486487 :param list(Element) elements: List of OnlineResource elements
487488 :param str new_url: New OnlineResource URL
488489 :param str xlinkns: XML namespace for OnlineResource href
490+ :param obj params: Request parameters
489491 """
490492
491493 qgis_server_url_parts = urlparse (self .qgis_server_url )
@@ -501,15 +503,15 @@ def __update_online_resources(self, elements, new_url, xlinkns):
501503 if new_url .startswith ("/" ):
502504 new_url = request .host_url .rstrip ("/" ) + new_url
503505
504- if url_parts . query or "?" in old_url :
505- # Drop MAP query parameter, it is never useful for services served through qwc-qgis-server
506- query = parse_qsl ( url_parts . query )
507- query = list (filter (lambda kv : kv [0 ].lower () != "map " , query ))
508- # querystring = urlencode(query, doseq=True)
509- querystring = "&" . join ( map ( lambda kv : f" { kv [ 0 ] } = { quote ( kv [ 1 ], safe = ' /' ) } " , query ))
510- online_resource . set ( '{%s}href' % xlinkns , new_url . removesuffix ( "?" ) + "?" + querystring )
511- else :
512- online_resource .set ('{%s}href' % xlinkns , new_url )
506+ # Drop MAP query parameter, it is never useful for services served through qwc-qgis-server
507+ query = parse_qsl ( url_parts . query )
508+ query = list ( filter ( lambda kv : kv [ 0 ]. lower () != "map" , query ) )
509+ query = list (filter (lambda kv : kv [0 ].lower () != "requireauth " , query ))
510+ if params . get ( 'REQUIREAUTH' ):
511+ query . append (( 'REQUIREAUTH' , params [ 'REQUIREAUTH' ] ))
512+ # querystring = urlencode(query, doseq=True )
513+ querystring = "&" . join ( map ( lambda kv : f" { kv [ 0 ] } = { quote ( kv [ 1 ], safe = ' /' ) } " , query ))
514+ online_resource .set ('{%s}href' % xlinkns , new_url . removesuffix ( "?" ) + "?" + querystring )
513515
514516
515517 def __filter_getfeatureinfo (self , response , permissions ):
0 commit comments