Skip to content

Commit d5ae671

Browse files
committed
Encode all square brackets used in the biocache-service query urls
AWS load-balancer does not seem to like them very much. Ref: inbo/vlaams-biodiversiteitsportaal#73
1 parent f355a5c commit d5ae671

File tree

3 files changed

+27
-27
lines changed

3 files changed

+27
-27
lines changed

grails-app/controllers/au/org/ala/alerts/AdminController.groovy

+3-3
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,23 @@ class AdminController {
8686
@Transactional
8787
def fixupBiocacheQueries() {
8888
def toUpdate = []
89-
Query.findAllByQueryPathForUI('/occurrences/search?q=*:*&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc').each {
89+
Query.findAllByQueryPathForUI('/occurrences/search?q=*:*&fq=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&sort=first_loaded_date&dir=desc').each {
9090
it.queryPathForUI = it.queryPath.substring(3)
9191
toUpdate << it
9292
}
9393
toUpdate.each { it.save(flush: true) }
9494
toUpdate.clear()
9595

9696

97-
Query.findAllByQueryPathForUI('/occurrences/search?q=*:*&fq=user_assertions:*&fq=last_assertion_date:[___DATEPARAM___%20TO%20*]&sort=last_assertion_date&dir=desc').each {
97+
Query.findAllByQueryPathForUI('/occurrences/search?q=*:*&fq=user_assertions:*&fq=last_assertion_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&sort=last_assertion_date&dir=desc').each {
9898
it.queryPathForUI = it.queryPath.substring(3)
9999
toUpdate << it
100100
}
101101
toUpdate.each { it.save(flush: true) }
102102
toUpdate.clear()
103103

104104

105-
Query.findAllByQueryPathForUI('/occurrences/search?q=*:*&fq=last_assertion_date:[___DATEPARAM___%20TO%20*]&sort=last_assertion_date&dir=desc').each {
105+
Query.findAllByQueryPathForUI('/occurrences/search?q=*:*&fq=last_assertion_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&sort=last_assertion_date&dir=desc').each {
106106
it.queryPathForUI = it.queryPath.substring(3)
107107
toUpdate << it
108108
}

grails-app/init/au/org/ala/alerts/BootStrap.groovy

+10-10
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ class BootStrap {
6262
name: title,
6363
updateMessage: 'annotations.update.message',
6464
description: descr,
65-
queryPath: '/occurrences/search?fq=user_assertions:*&q=last_assertion_date:[___DATEPARAM___%20TO%20*]&sort=last_assertion_date&dir=desc&pageSize=20&facets=basis_of_record',
66-
queryPathForUI: '/occurrences/search?fq=user_assertions:*&q=last_assertion_date:[___DATEPARAM___%20TO%20*]&sort=last_assertion_date&dir=desc',
65+
queryPath: '/occurrences/search?fq=user_assertions:*&q=last_assertion_date:\' + \'[___DATEPARAM___ TO *]\'.encodeAsURL() + \'&sort=last_assertion_date&dir=desc&pageSize=20&facets=basis_of_record',
66+
queryPathForUI: '/occurrences/search?fq=user_assertions:*&q=last_assertion_date:\' + \'[___DATEPARAM___ TO *]\'.encodeAsURL() + \'&sort=last_assertion_date&dir=desc\'',
6767
dateFormat: """yyyy-MM-dd'T'HH:mm:ss'Z'""",
6868
emailTemplate: '/email/annotations',
6969
recordJsonPath: '\$.occurrences[*]',
@@ -83,8 +83,8 @@ class BootStrap {
8383
resourceName: grailsApplication.config.mail.details.defaultResourceName,
8484
updateMessage: 'more.records.update.message',
8585
description: descr,
86-
queryPath: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
87-
queryPathForUI: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc',
86+
queryPath: '/occurrences/search?q=first_loaded_date:\' + \'[___DATEPARAM___ TO *]\'.encodeAsURL() + \'&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
87+
queryPathForUI: '/occurrences/search?q=first_loaded_date:\' + \'[___DATEPARAM___ TO *]\'.encodeAsURL() + \'&sort=first_loaded_date&dir=desc',
8888
dateFormat: """yyyy-MM-dd'T'HH:mm:ss'Z'""",
8989
emailTemplate: '/email/biocache',
9090
recordJsonPath: '\$.occurrences[*]',
@@ -104,8 +104,8 @@ class BootStrap {
104104
resourceName: grailsApplication.config.mail.details.defaultResourceName,
105105
updateMessage: 'more.images.update.message',
106106
description: descr,
107-
queryPath: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&fq=multimedia:Image&pageSize=20&facets=basis_of_record',
108-
queryPathForUI: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&fq=multimedia:Image',
107+
queryPath: '/occurrences/search?q=first_loaded_date:\' + \'[___DATEPARAM___ TO *]\'.encodeAsURL() + \'&sort=first_loaded_date&dir=desc&fq=multimedia:Image&pageSize=20&facets=basis_of_record',
108+
queryPathForUI: '/occurrences/search?q=first_loaded_date:\' + \'[___DATEPARAM___ TO *]\'.encodeAsURL() + \'&sort=first_loaded_date&dir=desc&fq=multimedia:Image',
109109
dateFormat: """yyyy-MM-dd'T'HH:mm:ss'Z'""",
110110
emailTemplate: '/email/biocache',
111111
fireWhenNotZero: true,
@@ -127,8 +127,8 @@ class BootStrap {
127127
resourceName: grailsApplication.config.mail.details.defaultResourceName,
128128
updateMessage: 'more.cs.update.message',
129129
description: descr,
130-
queryPath: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
131-
queryPathForUI: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc',
130+
queryPath: '/occurrences/search?q=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
131+
queryPathForUI: '/occurrences/search?q=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc',
132132
dateFormat: """yyyy-MM-dd'T'HH:mm:ss'Z'""",
133133
emailTemplate: '/email/biocache',
134134
fireWhenNotZero: true,
@@ -150,8 +150,8 @@ class BootStrap {
150150
resourceName: grailsApplication.config.mail.details.defaultResourceName,
151151
updateMessage: 'more.cs.images.update.message',
152152
description: descr,
153-
queryPath: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record&fq=multimedia:Image',
154-
queryPathForUI: '/occurrences/search?q=first_loaded_date:[___DATEPARAM___%20TO%20*]&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc&fq=multimedia:Image',
153+
queryPath: '/occurrences/search?q=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record&fq=multimedia:Image',
154+
queryPathForUI: '/occurrences/search?q=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&fq=data_resource_uid:dr364&sort=first_loaded_date&dir=desc&fq=multimedia:Image',
155155
dateFormat: """yyyy-MM-dd'T'HH:mm:ss'Z'""",
156156
emailTemplate: '/email/biocache',
157157
recordJsonPath: '\$.occurrences[*]',

grails-app/services/au/org/ala/alerts/QueryService.groovy

+14-14
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ class QueryService {
196196
name : messageSource.getMessage("query.service.occurrences.name", [queryDisplayName] as Object[], siteLocale),
197197
updateMessage : messageSource.getMessage("query.service.occurrences.update.msg", [queryDisplayName] as Object[], siteLocale),
198198
description : messageSource.getMessage("query.service.occurrences.desc", [queryDisplayName] as Object[], siteLocale),
199-
queryPath : biocacheWebserviceQueryPath + '&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
200-
queryPathForUI: biocacheUIQueryPath + '&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc',
199+
queryPath : biocacheWebserviceQueryPath + '&fq=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&sort=+first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
200+
queryPathForUI: biocacheUIQueryPath + '&fq=first_loaded_date:' + '[___DATEPARAM___ TO *]'.encodeAsURL() + '&sort=+first_loaded_date&dir=desc',
201201
dateFormat : """yyyy-MM-dd'T'HH:mm:ss'Z'""",
202202
emailTemplate : '/email/biocache',
203203
recordJsonPath: '\$.occurrences',
@@ -215,8 +215,8 @@ class QueryService {
215215
name : messageSource.getMessage("query.service.annotations.name", [queryDisplayName] as Object[], siteLocale),
216216
updateMessage : messageSource.getMessage("query.service.annotations.update.msg", [queryDisplayName] as Object[], siteLocale),
217217
description : messageSource.getMessage("query.service.annotations.desc", [queryDisplayName] as Object[], siteLocale),
218-
queryPath : biocacheWebserviceQueryPath + '&fq=(user_assertions:50005%20OR%20user_assertions:50003%20OR%20user_assertions:50002)&fq=last_assertion_date:[___DATEPARAM___%20TO%20*]&sort=last_assertion_date&dir=desc&pageSize=20&facets=basis_of_record',
219-
queryPathForUI: biocacheUIQueryPath + '&fq=(user_assertions:50005%20OR%20user_assertions:50003%20OR%20user_assertions:50002)&fq=last_assertion_date:[___DATEPARAM___%20TO%20*]&sort=last_assertion_date&dir=desc',
218+
queryPath : biocacheWebserviceQueryPath + '&fq=(user_assertions:50005%20OR%20user_assertions:50003%20OR%20user_assertions:50002)&fq=last_assertion_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=last_assertion_date&dir=desc&pageSize=20&facets=basis_of_record',
219+
queryPathForUI: biocacheUIQueryPath + '&fq=(user_assertions:50005%20OR%20user_assertions:50003%20OR%20user_assertions:50002)&fq=last_assertion_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=last_assertion_date&dir=desc',
220220
dateFormat : """yyyy-MM-dd'T'HH:mm:ss'Z'""",
221221
emailTemplate : '/email/biocache',
222222
recordJsonPath: '\$.occurrences',
@@ -252,8 +252,8 @@ class QueryService {
252252
resourceName : grailsApplication.config.mail.details.defaultResourceName,
253253
updateMessage : messageSource.getMessage("query.service.occurrences.update.msg", [taxonName] as Object[], siteLocale),
254254
description : messageSource.getMessage("query.service.occurrences.desc", [taxonName] as Object[], siteLocale),
255-
queryPath : '/occurrences/taxon/' + taxonGuid + '?fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
256-
queryPathForUI: '/occurrences/taxa/' + taxonGuid + '?fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc',
255+
queryPath : '/occurrences/taxon/' + taxonGuid + '?fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
256+
queryPathForUI: '/occurrences/taxa/' + taxonGuid + '?fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc',
257257
dateFormat : """yyyy-MM-dd'T'HH:mm:ss'Z'""",
258258
emailTemplate : '/email/biocache',
259259
recordJsonPath: '\$.occurrences',
@@ -270,8 +270,8 @@ class QueryService {
270270
resourceName : grailsApplication.config.mail.details.defaultResourceName,
271271
updateMessage : messageSource.getMessage("query.service.occurrences.recorded.update.msg", [taxonName, regionName] as Object[], siteLocale),
272272
description : messageSource.getMessage("query.service.occurrences.recorded.desc", [taxonName, regionName] as Object[], siteLocale),
273-
queryPath : '/occurrences/taxon/' + taxonGuid + '?fq=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
274-
queryPathForUI: '/occurrences/taxa/' + taxonGuid + '?fq=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc',
273+
queryPath : '/occurrences/taxon/' + taxonGuid + '?fq=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
274+
queryPathForUI: '/occurrences/taxa/' + taxonGuid + '?fq=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc',
275275
dateFormat : """yyyy-MM-dd'T'HH:mm:ss'Z'""",
276276
emailTemplate : '/email/biocache',
277277
recordJsonPath: '\$.occurrences',
@@ -288,8 +288,8 @@ class QueryService {
288288
resourceName : grailsApplication.config.mail.details.defaultResourceName,
289289
updateMessage : messageSource.getMessage("query.service.occurrences.recorded.update.msg", [speciesGroup, regionName] as Object[], siteLocale),
290290
description : messageSource.getMessage("query.service.occurrences.recorded.desc", [speciesGroup, regionName] as Object[], siteLocale),
291-
queryPath : '/occurrences/search?q=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=species_group:' + speciesGroup + '&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
292-
queryPathForUI: '/occurrences/search?q=' + layerId + ':"' + regionName.encodeAsURL() + '"&fq=species_group:' + speciesGroup + '&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc',
291+
queryPath : '/occurrences/search?q=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=species_group:' + speciesGroup + '&fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
292+
queryPathForUI: '/occurrences/search?q=' + layerId + ':"' + regionName.encodeAsURL() + '"&fq=species_group:' + speciesGroup + '&fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc',
293293
dateFormat : """yyyy-MM-dd'T'HH:mm:ss'Z'""",
294294
emailTemplate : '/email/biocache',
295295
recordJsonPath: '\$.occurrences',
@@ -306,8 +306,8 @@ class QueryService {
306306
resourceName : grailsApplication.config.mail.details.defaultResourceName,
307307
updateMessage : messageSource.getMessage("query.service.occurrences.update.msg", [regionName] as Object[], siteLocale),
308308
description : messageSource.getMessage("query.service.occurrences.desc", [regionName] as Object[], siteLocale),
309-
queryPath : '/occurrences/search?q=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
310-
queryPathForUI: '/occurrences/search?q=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc',
309+
queryPath : '/occurrences/search?q=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc&pageSize=20&facets=basis_of_record',
310+
queryPathForUI: '/occurrences/search?q=' + layerId + ':%22' + regionName.encodeAsURL() + '%22&fq=first_loaded_date:'+'[___DATEPARAM___%20TO%20*]'.encodeAsURL()+'&sort=first_loaded_date&dir=desc',
311311
dateFormat : """yyyy-MM-dd'T'HH:mm:ss'Z'""",
312312
emailTemplate : '/email/biocache',
313313
recordJsonPath: '\$.occurrences',
@@ -346,9 +346,9 @@ class QueryService {
346346
def sList = getSpeciesListName(listid)
347347
String speciesListName = sList.name
348348
//differentiate non-authoritative / authoritative list
349-
String queryPathForUITemplate = grailsApplication.config.getProperty("biosecurity.query.template.nonAuthoritativeList", String, "/occurrences/search?q=species_list:___LISTIDPARAM___&fq=decade:2020&fq=country:Australia&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&fq=occurrence_date:[___LASTYEARPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&disableAllQualityFilters=true")
349+
String queryPathForUITemplate = grailsApplication.config.getProperty("biosecurity.query.template.nonAuthoritativeList", String, "/occurrences/search?q=species_list:___LISTIDPARAM___&fq=decade:2020&fq=country:Australia&fq=first_loaded_date:"+"[___DATEPARAM___%20TO%20*]".encodeAsURL()+"&fq=occurrence_date:[___LASTYEARPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&disableAllQualityFilters=true")
350350
if (sList.isAuthoritative) {
351-
queryPathForUITemplate = grailsApplication.config.getProperty("biosecurity.query.template.authoritativeList", String, "/occurrences/search?q=species_list_uid:___LISTIDPARAM___&fq=decade:2020&fq=country:Australia&fq=first_loaded_date:[___DATEPARAM___%20TO%20*]&fq=occurrence_date:[___LASTYEARPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&disableAllQualityFilters=true")
351+
queryPathForUITemplate = grailsApplication.config.getProperty("biosecurity.query.template.authoritativeList", String, "/occurrences/search?q=species_list_uid:___LISTIDPARAM___&fq=decade:2020&fq=country:Australia&fq=first_loaded_date:"+"[___DATEPARAM___%20TO%20*]".encodeAsURL()+"&fq=occurrence_date:[___LASTYEARPARAM___%20TO%20*]&sort=first_loaded_date&dir=desc&disableAllQualityFilters=true")
352352
}
353353

354354
String queryPathForUI = queryPathForUITemplate.replaceAll("___LISTIDPARAM___", listid)

0 commit comments

Comments
 (0)