Skip to content

Commit

Permalink
fix(data-service): prevent calling proxying ESRI rest URL twice to en…
Browse files Browse the repository at this point in the history
…sure query params encoding

otherwise first call encodes URL without query params and second call returns unmodified URL, since the host is already the window host

for more clarity also prevents double proxification for WFS, that did not fail thanks to ogc-client
  • Loading branch information
tkohr committed Oct 19, 2023
1 parent ec67fd5 commit 446a63c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
15 changes: 13 additions & 2 deletions libs/feature/dataviz/src/lib/service/data.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -593,11 +593,22 @@ describe('DataService', () => {
it('builds a proxied url', () => {
expect(
service.getDownloadUrlFromEsriRest(
'http://esri.rest/local/',
'http://esri.rest/local',
'geojson'
)
).toBe(
'http://proxy.local/?url=http%3A%2F%2Fesri.rest%2Flocal%2F%2Fquery%3Ff%3Dgeojson%26where%3D1%3D1%26outFields%3D*'
'http://proxy.local/?url=http%3A%2F%2Fesri.rest%2Flocal%2Fquery%3Ff%3Dgeojson%26where%3D1%3D1%26outFields%3D*'
)
})
it('calls DataFetcher.openDataset with a proxied url', () => {
service.getDataset({
url: new URL('http://esri.rest/local'),
accessServiceProtocol: 'esriRest',
type: 'service',
})
expect(openDataset).toHaveBeenCalledWith(
'http://proxy.local/?url=http%3A%2F%2Fesri.rest%2Flocal%2Fquery%3Ff%3Dgeojson%26where%3D1%3D1%26outFields%3D*',
'geojson'
)
})
})
Expand Down
11 changes: 7 additions & 4 deletions libs/feature/dataviz/src/lib/service/data.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,8 @@ export class DataService {
}

getDataset(link: DatasetDistribution): Observable<BaseReader> {
const linkUrl = this.proxy.getProxiedUrl(link.url.toString())
if (link.type === 'service' && link.accessServiceProtocol === 'wfs') {
return this.getDownloadUrlsFromWfs(linkUrl, link.name).pipe(
return this.getDownloadUrlsFromWfs(link.url.toString(), link.name).pipe(
switchMap((urls) => {
if (urls.geojson) return openDataset(urls.geojson, 'geojson')
if (urls.gml)
Expand All @@ -187,17 +186,21 @@ export class DataService {
})
)
} else if (link.type === 'download') {
const linkProxifiedUrl = this.proxy.getProxiedUrl(link.url.toString())
const format = getFileFormat(link)
const supportedType =
SupportedTypes.indexOf(format as any) > -1
? (format as SupportedType)
: undefined
return from(openDataset(linkUrl, supportedType)).pipe()
return from(openDataset(linkProxifiedUrl, supportedType)).pipe()
} else if (
link.type === 'service' &&
link.accessServiceProtocol === 'esriRest'
) {
const url = this.getDownloadUrlFromEsriRest(linkUrl, 'geojson')
const url = this.getDownloadUrlFromEsriRest(
link.url.toString(),
'geojson'
)
return from(openDataset(url, 'geojson')).pipe()
}
return throwError(() => 'protocol not supported')
Expand Down

0 comments on commit 446a63c

Please sign in to comment.