Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes incorrect use of GET for WMS queries when admin setting has CLIENT_OWS_METHOD = 'POST' #617

Merged
merged 22 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
045d2d4
:bug: Fix http method to query request based on ows_method
volterra79 Apr 30, 2024
6431b23
:bug: Fix layer variable
volterra79 Apr 30, 2024
6254c5d
:bulb: Comments
volterra79 Apr 30, 2024
9b1b8e2
refactor `ProviderFactory.build` and `WMSDataProvider.query`
Raruto May 2, 2024
9f04142
depends on: https://github.com/g3w-suite/g3w-admin/tree/absolute-baseurl
Raruto May 2, 2024
671eb5d
move custom `getOwsMethod` check into `ImageLayer`
Raruto May 2, 2024
8453e1d
comments
Raruto May 2, 2024
b205966
hotfix for invalid `baseurl`
Raruto May 2, 2024
132f00d
:art: Clean code. Readability and console.warn(e) in case of fail req…
volterra79 May 3, 2024
c9a9f7c
BACKOMP for: `initiConfig.group` → `initiConfig`
Raruto May 3, 2024
83c586b
Merge branch 'issue_616' of https://github.com/g3w-suite/g3w-client i…
Raruto May 3, 2024
6962447
:bug: Replace $.get $.post with XHR.get or XHR.post
volterra79 May 3, 2024
e2dd44d
Merge branch 'issue_616' of https://github.com/g3w-suite/g3w-client i…
volterra79 May 3, 2024
1f72e4d
cjs to esm imports
Raruto May 3, 2024
7398e71
move `WFSDataProvider::_doRequest` into `WFSDataProvider::query`
Raruto May 3, 2024
e0bceea
avoid using a provider factory for `this.providers`
Raruto May 3, 2024
02eb39e
fix mutating `const` variable
Raruto May 3, 2024
4feaf47
missing iife
Raruto May 3, 2024
3ce9eb2
remove `handleQueryResponseFromServer`
Raruto May 3, 2024
68beec7
remove `getQueryResponseTimeoutKey`
Raruto May 3, 2024
ecc1cb2
refactor `WFSDataProvider`
Raruto May 3, 2024
9afa81a
Merge branch 'dev' into issue_616
volterra79 May 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/app/core/layers/imagelayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,21 @@ proto.getFormat = function() {
return base(this, 'getFormat');
};

/**
* @override ImageLayer~getOwsMethod
*
* @see https://github.com/g3w-suite/g3w-client/issues/616
*
* forces to `GET` when wms layer is external or query url isn't a qgis server endpoint (ie. doesn't start with `/ows/`).
*
* @since 3.10.0
*/
proto.getOwsMethod = function() {
return this.isExternalWMS() || !/^\/ows/.test((new URL(this.getQueryUrl(), window.initConfig.baseurl)).pathname)
? 'GET'
: this.config.ows_method;
};

volterra79 marked this conversation as resolved.
Show resolved Hide resolved
ImageLayer.WMSServerTypes = [
Layer.ServerTypes.QGIS,
Layer.ServerTypes.Mapserver,
Expand Down
115 changes: 95 additions & 20 deletions src/app/core/layers/layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const {
XHR,
} = require('utils');
const G3WObject = require('core/g3wobject');
const ProviderFactory = require('core/layers/providersfactory');
const Providers = require('core/layers/providersfactory');
const deprecate = require('util-deprecate');

// Base Class of all Layer
Expand Down Expand Up @@ -189,27 +189,102 @@ function Layer(config={}, options={}) {
// referred to (layersstore);
this._layersstore = config.layersstore || null;

/*
Providers that layer can use
const layerType = `${this.config.servertype} ${this.config.source && this.config.source.type}`;

Three type of provider:
1 - query
2 - filter
3 - data -- raw data del layer (editing)
/**
* Layer providers used to retrieve layer data from server
*
* 1 - data: raw layer data (editing)
* 2 - filter
* 3 - filtertoken
* 4 - query
* 5 - search
*/
const serverType = this.config.servertype;
const sourceType = this.config.source ? this.config.source.type : null; // NB: sourceType = source of layer

if (serverType && sourceType) {
//set providers that will take in account to get data from server
this.providers = {
query: ProviderFactory.build('query', serverType, sourceType, { layer: this }),
filter: ProviderFactory.build('filter', serverType, sourceType, { layer: this }),
filtertoken: ProviderFactory.build('filtertoken', serverType, sourceType, { layer: this }),
search: ProviderFactory.build('search', serverType, sourceType, { layer: this }),
data: ProviderFactory.build('data', serverType, sourceType, { layer: this })
};
}
this.providers = {

data: (() => {
if ([
'QGIS virtual',
'QGIS postgres',
'QGIS oracle',
'QGIS mssql',
'QGIS spatialite',
'QGIS ogr',
'QGIS delimitedtext',
'QGIS wfs',
].includes(layerType)) {
return new Providers.qgis({ layer: this });
}
if ('G3WSUITE geojson' === layerType) {
return new Providers.geojson({ layer: this });
}
})(),

filter: [
'QGIS virtual',
'QGIS postgres',
'QGIS oracle',
'QGIS mssql',
'QGIS spatialite',
'QGIS ogr',
'QGIS delimitedtext',
'QGIS wfs',
'QGIS wmst',
'QGIS wcs',
'QGIS wms',
].includes(layerType) && new Providers.wfs({ layer: this }),

filtertoken: [
'QGIS virtual',
'QGIS postgres',
'QGIS oracle',
'QGIS mssql',
'QGIS spatialite',
'QGIS ogr',
'QGIS delimitedtext',
].includes(layerType) && new Providers.qgis({ layer: this }),

query: (() => {
if ([
'QGIS virtual',
'QGIS postgres',
'QGIS oracle',
'QGIS mssql',
'QGIS spatialite',
'QGIS ogr',
'QGIS delimitedtext',
'QGIS wfs',
'QGIS wmst',
'QGIS wcs',
'QGIS wms',
'QGIS gdal',
/** @since 3.9.0 */
'QGIS postgresraster',
'QGIS vector-tile',
'QGIS vectortile',
'QGIS arcgismapserver',
'QGIS mdal',
'OGC wms',
].includes(layerType)) {
return new Providers.wms({ layer: this });
}
if ('G3WSUITE geojson' === layerType) {
return new Providers.geojson({ layer: this });
}
})(),

search: [
'QGIS virtual',
'QGIS postgres',
'QGIS oracle',
'QGIS mssql',
'QGIS spatialite',
'QGIS ogr',
'QGIS delimitedtext',
'QGIS wfs',
].includes(layerType) && new Providers.qgis({ layer: this }),

};

/**
* Store last proxy params (useful for repeat request info formats for wms external layer)
Expand Down