From a120435257bf537c19c37e36a62a8826dfe4564d Mon Sep 17 00:00:00 2001 From: Mario Freitas Date: Mon, 10 Aug 2020 15:04:58 +0200 Subject: [PATCH 1/2] Allowing tile urls to carry the query params from the original request --- src/serve_style.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/serve_style.js b/src/serve_style.js index fb75ad8b1..a04f181c8 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -24,9 +24,25 @@ const fixUrl = (req, url, publicUrl, opt_nokey) => { query = `?${queryParams.join('&')}`; } return url.replace( - 'local://', utils.getPublicUrl(publicUrl, req)) + query; + 'local://', utils.getPublicUrl(publicUrl, req)) + + getQuery(req, opt_nokey); }; + +// Return the query suffix from the original request +const getQuery = (req, opt_nokey) => { + const queryParams = []; + if (!opt_nokey && req.query.key) { + queryParams.unshift(`key=${encodeURIComponent(req.query.key)}`); + } + + let query = ''; + if (queryParams.length) { + query = `?${queryParams.join('&')}`; + } + + return query; +} + module.exports = { init: (options, repo) => { const app = express().disable('x-powered-by'); @@ -40,6 +56,13 @@ module.exports = { for (const name of Object.keys(styleJSON_.sources)) { const source = styleJSON_.sources[name]; source.url = fixUrl(req, source.url, item.publicUrl); + + // Apply the query parameters to the tile urls + if (source.tiles) { + for (let i = 0; i < source.tiles.length; i++) { + source.tiles[i] = source.tiles[i] + getQuery(req); + } + } } // mapbox-gl-js viewer cannot handle sprite urls with query if (styleJSON_.sprite) { From 893528a652d0b75c8ddea43f7888414aad65834e Mon Sep 17 00:00:00 2001 From: Mario Freitas Date: Mon, 10 Aug 2020 15:04:58 +0200 Subject: [PATCH 2/2] Small fixes to remove repeated code --- src/serve_style.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/serve_style.js b/src/serve_style.js index fb75ad8b1..a0d762936 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -15,17 +15,26 @@ const fixUrl = (req, url, publicUrl, opt_nokey) => { if (!url || (typeof url !== 'string') || url.indexOf('local://') !== 0) { return url; } + + return url.replace( + 'local://', utils.getPublicUrl(publicUrl, req)) + getQuery(req, opt_nokey); +}; + + +// Return the query suffix from the original request +const getQuery = (req, opt_nokey) => { const queryParams = []; if (!opt_nokey && req.query.key) { queryParams.unshift(`key=${encodeURIComponent(req.query.key)}`); } + let query = ''; if (queryParams.length) { query = `?${queryParams.join('&')}`; } - return url.replace( - 'local://', utils.getPublicUrl(publicUrl, req)) + query; -}; + + return query; +} module.exports = { init: (options, repo) => { @@ -40,6 +49,13 @@ module.exports = { for (const name of Object.keys(styleJSON_.sources)) { const source = styleJSON_.sources[name]; source.url = fixUrl(req, source.url, item.publicUrl); + + // Apply the query parameters to the tile urls + if (source.tiles) { + for (let i = 0; i < source.tiles.length; i++) { + source.tiles[i] = source.tiles[i] + getQuery(req); + } + } } // mapbox-gl-js viewer cannot handle sprite urls with query if (styleJSON_.sprite) {