Skip to content

Commit 0f202bc

Browse files
authored
Merge pull request TerriaJS#6995 from TerriaJS/wms-getcap-drop-params
Drop bad query params from WMS GetCapabilities
2 parents f6739a7 + 90cf6b4 commit 0f202bc

File tree

3 files changed

+72
-43
lines changed

3 files changed

+72
-43
lines changed

CHANGES.md

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Switch Babel configuration to new JSX transform
88
- Improve tsconfig files
99
- Update `thredds-catalog-crawler` to `0.0.6`
10+
- `WebMapServiceCatalogItem` will drop problematic query parameters from `url` when calling `GetCapabilities` (eg `"styles","srs","crs","format"`)
1011
- [The next improvement]
1112

1213
#### 8.4.1 - 2023-12-08

lib/Models/Catalog/Ows/WebMapServiceCatalogItem.ts

+30-20
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import CreateModel from "../../Definition/CreateModel";
4545
import LoadableStratum from "../../Definition/LoadableStratum";
4646
import { BaseModel } from "../../Definition/Model";
4747
import StratumOrder from "../../Definition/StratumOrder";
48+
import TerriaFeature from "../../Feature/Feature";
4849
import FeatureInfoContext from "../../Feature/FeatureInfoContext";
4950
import SelectableDimensions, {
5051
SelectableDimensionEnum
@@ -54,7 +55,23 @@ import proxyCatalogItemUrl from "../proxyCatalogItemUrl";
5455
import WebMapServiceCapabilities from "./WebMapServiceCapabilities";
5556
import WebMapServiceCapabilitiesStratum from "./WebMapServiceCapabilitiesStratum";
5657
import WebMapServiceCatalogGroup from "./WebMapServiceCatalogGroup";
57-
import TerriaFeature from "../../Feature/Feature";
58+
59+
// Remove problematic query parameters from URLs (GetCapabilities, GetMap, ...) - these are handled separately
60+
const QUERY_PARAMETERS_TO_REMOVE = [
61+
"request",
62+
"service",
63+
"x",
64+
"y",
65+
"width",
66+
"height",
67+
"bbox",
68+
"layers",
69+
"styles",
70+
"version",
71+
"format",
72+
"srs",
73+
"crs"
74+
];
5875

5976
/** This LoadableStratum is responsible for setting WMS version based on CatalogItem.url */
6077
export class WebMapServiceUrlStratum extends LoadableStratum(
@@ -288,8 +305,16 @@ class WebMapServiceCatalogItem
288305

289306
protected get defaultGetCapabilitiesUrl(): string | undefined {
290307
if (this.uri) {
291-
return this.uri
292-
.clone()
308+
const baseUrl = QUERY_PARAMETERS_TO_REMOVE.reduce(
309+
(url, parameter) =>
310+
url
311+
.removeQuery(parameter)
312+
.removeQuery(parameter.toUpperCase())
313+
.removeQuery(parameter.toLowerCase()),
314+
this.uri.clone()
315+
);
316+
317+
return baseUrl
293318
.setSearch({
294319
service: "WMS",
295320
version: this.useWmsVersion130 ? "1.3.0" : "1.1.1",
@@ -540,23 +565,8 @@ class WebMapServiceCatalogItem
540565
Object.assign(parameters, diffModeParameters);
541566

542567
// Remove problematic query parameters from URL - these are handled by the parameters objects
543-
const queryParametersToRemove = [
544-
"request",
545-
"service",
546-
"x",
547-
"y",
548-
"width",
549-
"height",
550-
"bbox",
551-
"layers",
552-
"styles",
553-
"version",
554-
"format",
555-
"srs",
556-
"crs"
557-
];
558-
559-
const baseUrl = queryParametersToRemove.reduce(
568+
569+
const baseUrl = QUERY_PARAMETERS_TO_REMOVE.reduce(
560570
(url, parameter) =>
561571
url
562572
.removeQuery(parameter)

test/Models/Catalog/Ows/WebMapServiceCatalogItemSpec.ts

+41-23
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,50 @@ import Terria from "../../../../lib/Models/Terria";
1010
import TerriaFeature from "../../../../lib/Models/Feature/Feature";
1111

1212
describe("WebMapServiceCatalogItem", function () {
13-
it("derives getCapabilitiesUrl from url if getCapabilitiesUrl is not specified", function () {
14-
const terria = new Terria();
15-
const wms = new WebMapServiceCatalogItem("test", terria);
16-
wms.setTrait("definition", "url", "foo.bar.baz");
17-
expect(wms.getCapabilitiesUrl).toBeDefined();
18-
expect(wms.url).toBeDefined();
19-
expect(
20-
wms.getCapabilitiesUrl &&
21-
wms.getCapabilitiesUrl.indexOf(wms.url || "undefined") === 0
22-
).toBe(true);
13+
describe("derives getCapabilitiesUrl from url", () => {
14+
it("if getCapabilitiesUrl is not specified", function () {
15+
const terria = new Terria();
16+
const wms = new WebMapServiceCatalogItem("test", terria);
17+
wms.setTrait("definition", "url", "foo.bar.baz");
18+
expect(wms.getCapabilitiesUrl).toBeDefined();
19+
expect(wms.url).toBeDefined();
20+
expect(
21+
wms.getCapabilitiesUrl &&
22+
wms.getCapabilitiesUrl.indexOf(wms.url || "undefined") === 0
23+
).toBe(true);
2324

24-
expect(wms.useWmsVersion130).toBeTruthy();
25-
});
25+
expect(wms.useWmsVersion130).toBeTruthy();
26+
});
2627

27-
it("derives getCapabilitiesUrl from url - for WMS 1.1.1", function () {
28-
const terria = new Terria();
29-
const wms = new WebMapServiceCatalogItem("test", terria);
30-
wms.setTrait(
31-
"definition",
32-
"url",
33-
"http://www.bom.gov.au/cgi-bin/ws/gis/ncc/cdio/wxs?service=WMS&version=1.1.1&request=GetCapabilities"
34-
);
35-
expect(wms.getCapabilitiesUrl).toBeDefined();
36-
expect(wms.url).toBeDefined();
28+
it("for WMS 1.1.1", function () {
29+
const terria = new Terria();
30+
const wms = new WebMapServiceCatalogItem("test", terria);
31+
wms.setTrait(
32+
"definition",
33+
"url",
34+
"http://www.bom.gov.au/cgi-bin/ws/gis/ncc/cdio/wxs?service=WMS&version=1.1.1&request=GetCapabilities"
35+
);
36+
expect(wms.getCapabilitiesUrl).toBeDefined();
37+
expect(wms.url).toBeDefined();
3738

38-
expect(wms.useWmsVersion130).toBeFalsy();
39+
expect(wms.useWmsVersion130).toBeFalsy();
40+
});
41+
42+
it("drops query bad parameters", function () {
43+
const terria = new Terria();
44+
const wms = new WebMapServiceCatalogItem("test", terria);
45+
wms.setTrait(
46+
"definition",
47+
"url",
48+
"http://www.bom.gov.au/cgi-bin/ws/gis/ncc/cdio/wxs?service=WMS&version=1.1.1&request=GetMap&format=something&allowed=yes"
49+
);
50+
expect(wms.getCapabilitiesUrl).toBeDefined();
51+
expect(wms.url).toBeDefined();
52+
53+
const queryParameters = new URL(wms.getCapabilitiesUrl!).searchParams;
54+
expect(queryParameters.get("format")).toBeNull();
55+
expect(queryParameters.get("allowed")).toBe("yes");
56+
});
3957
});
4058

4159
it("loads", function () {

0 commit comments

Comments
 (0)