Skip to content

Commit edd8f35

Browse files
committed
X-Request-Id : it is sometimes an array, add repository and project name in it
1 parent 5e5bce9 commit edd8f35

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

lizmap/modules/lizmap/lib/Request/OGCRequest.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,14 @@ protected function logRequestIfError($code, $headers)
247247

248248
$message = 'The HTTP OGC request to QGIS Server ended with an error.';
249249

250-
$xRequestId = $headers['X-Request-Id'] ?? '';
251-
if ($xRequestId !== '') {
252-
$message .= ' The X-Request-Id `'.$xRequestId.'`.';
250+
if (isset($headers['X-Request-Id'])) {
251+
if (is_array($headers['X-Request-Id'])) {
252+
$xRequestId = implode(',', $headers['X-Request-Id']);
253+
} else {
254+
$xRequestId = $headers['X-Request-Id'];
255+
}
256+
} else {
257+
$xRequestId = '';
253258
}
254259

255260
// The master error with MAP parameter

lizmap/modules/lizmap/lib/Request/Proxy.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,14 @@ protected static function buildHeaders($url, $options)
310310
), $options['headers']);
311311

312312
if (strpos($url, self::$services->wmsServerURL) === 0) {
313-
// headers only for QGIS server
313+
// Headers only for QGIS server
314+
parse_str(parse_url($options['headers']['X-Qgis-Service-Url'], PHP_URL_QUERY), $output);
315+
$requestId = $output['repository'].'-'.$output['project'];
316+
$requestId .= '-'.uniqid().'-'.bin2hex(random_bytes(10));
314317
$options['headers'] = array_merge(
315318
self::userHttpHeader(),
316319
self::$services->wmsServerHeaders,
317-
array('X-Request-Id' => uniqid().'-'.bin2hex(random_bytes(10))),
320+
array('X-Request-Id' => $requestId),
318321
$options['headers']
319322
);
320323
}
@@ -339,7 +342,16 @@ protected static function logRequestIfError($httpCode, $url, $headers = array())
339342
return;
340343
}
341344

342-
$xRequestId = $headers['X-Request-Id'] ?? '';
345+
if (isset($headers['X-Request-Id'])) {
346+
if (is_array($headers['X-Request-Id'])) {
347+
$xRequestId = implode(',', $headers['X-Request-Id']);
348+
$xRequestId = json_encode($headers['X-Request-Id']);
349+
} else {
350+
$xRequestId = $headers['X-Request-Id'];
351+
}
352+
} else {
353+
$xRequestId = '';
354+
}
343355

344356
$lizmapAdmin = 'An HTTP request ended with an error, please check the main error log.';
345357
$lizmapAdmin .= ' HTTP code '.$httpCode.'.';

tests/units/classes/Request/ProxyTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ public function testBuildHeaders($options, $expectedHeaders, $expectedBody, $exp
240240
$this->assertEquals($value, $result['headers'][$header]);
241241
}
242242
$this->assertArrayHasKey('X-Request-Id', $result['headers']);
243+
$this->assertIsString($result['headers']['X-Request-Id']);
243244
$this->assertEquals($expectedBody, $result['body']);
244245
if ($expectedUrl) {
245246
$this->assertEquals($expectedUrl, $url);

0 commit comments

Comments
 (0)