@@ -3,6 +3,7 @@ const _ = require('lodash')
33const fs = require ( 'fs' ) ;
44const jsonFile = require ( 'jsonfile' )
55const es = require ( '@elastic/elasticsearch' )
6+ const querystring = require ( 'querystring' )
67
78function _updateQueryStringParameter ( uri , key , value ) {
89 var re = new RegExp ( '([?&])' + key + '=.*?(&|#|$)' , 'i' ) ;
@@ -31,6 +32,39 @@ function adjustIndexName (indexName, entityType, config) {
3132 }
3233}
3334
35+ function decorateBackendUrl ( entityType , url , req , config ) {
36+ if ( config . elasticsearch . useRequestFilter && typeof config . entities [ entityType ] === 'object' ) {
37+ const urlParts = url . split ( '?' )
38+ const { includeFields, excludeFields } = config . entities [ entityType ]
39+
40+ const filteredParams = Object . keys ( req . query )
41+ . filter ( key => ! config . elasticsearch . requestParamsBlacklist . includes ( key ) )
42+ . reduce ( ( object , key ) => {
43+ object [ key ] = req . query [ key ]
44+ return object
45+ } , { } )
46+
47+ let _source_include = includeFields || [ ]
48+ let _source_exclude = excludeFields || [ ]
49+
50+ if ( ! config . elasticsearch . overwriteRequestSourceParams ) {
51+ const requestSourceInclude = req . query . _source_include || [ ]
52+ const requestSourceExclude = req . query . _source_exclude || [ ]
53+ _source_include = [ ...includeFields , ...requestSourceInclude ]
54+ _source_exclude = [ ...excludeFields , ...requestSourceExclude ]
55+ }
56+
57+ const urlParams = {
58+ ...filteredParams ,
59+ _source_include,
60+ _source_exclude
61+ }
62+ url = `${ urlParts [ 0 ] } ?${ querystring . stringify ( urlParams ) } `
63+ }
64+
65+ return url
66+ }
67+
3468function adjustBackendProxyUrl ( req , indexName , entityType , config ) {
3569 let url
3670 const queryString = require ( 'query-string' ) ;
@@ -58,7 +92,8 @@ function adjustBackendProxyUrl (req, indexName, entityType, config) {
5892 if ( ! url . startsWith ( 'http' ) ) {
5993 url = config . elasticsearch . protocol + '://' + url
6094 }
61- return url
95+
96+ return decorateBackendUrl ( entityType , url , req , config )
6297}
6398
6499function adjustQuery ( esQuery , entityType , config ) {
0 commit comments