Make hard-coded key parameter name configurable
Based on https://github.com/maptiler/tileserver-gl/pull/224
This commit is contained in:
parent
7ce4805cdd
commit
92029dcec9
4 changed files with 33 additions and 17 deletions
|
|
@ -8,6 +8,9 @@ Example::
|
||||||
|
|
||||||
{
|
{
|
||||||
"options": {
|
"options": {
|
||||||
|
"auth": {
|
||||||
|
"keyName": "api_key"
|
||||||
|
},
|
||||||
"paths": {
|
"paths": {
|
||||||
"root": "",
|
"root": "",
|
||||||
"fonts": "fonts",
|
"fonts": "fonts",
|
||||||
|
|
@ -58,6 +61,11 @@ Example::
|
||||||
``options``
|
``options``
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
``auth``
|
||||||
|
---------
|
||||||
|
|
||||||
|
Defines another name for the key query parameter in ``keyName``. Default is ``key``.
|
||||||
|
|
||||||
``paths``
|
``paths``
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,13 @@ const utils = require('./utils');
|
||||||
|
|
||||||
const httpTester = /^(http(s)?:)?\/\//;
|
const httpTester = /^(http(s)?:)?\/\//;
|
||||||
|
|
||||||
const fixUrl = (req, url, publicUrl, opt_nokey) => {
|
const fixUrl = (req, url, publicUrl, opt_nokey, options) => {
|
||||||
if (!url || (typeof url !== 'string') || url.indexOf('local://') !== 0) {
|
if (!url || (typeof url !== 'string') || url.indexOf('local://') !== 0) {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
const queryParams = [];
|
const queryParams = [];
|
||||||
if (!opt_nokey && req.query.key) {
|
if (!opt_nokey && req.query[options.auth.keyName]) {
|
||||||
queryParams.unshift(`key=${encodeURIComponent(req.query.key)}`);
|
queryParams.unshift(`${options.auth.keyName}=${encodeURIComponent(req.query[options.auth.keyName])}`);
|
||||||
}
|
}
|
||||||
let query = '';
|
let query = '';
|
||||||
if (queryParams.length) {
|
if (queryParams.length) {
|
||||||
|
|
@ -39,14 +39,14 @@ module.exports = {
|
||||||
const styleJSON_ = clone(item.styleJSON);
|
const styleJSON_ = clone(item.styleJSON);
|
||||||
for (const name of Object.keys(styleJSON_.sources)) {
|
for (const name of Object.keys(styleJSON_.sources)) {
|
||||||
const source = styleJSON_.sources[name];
|
const source = styleJSON_.sources[name];
|
||||||
source.url = fixUrl(req, source.url, item.publicUrl);
|
source.url = fixUrl(req, source.url, item.publicUrl, false, options);
|
||||||
}
|
}
|
||||||
// mapbox-gl-js viewer cannot handle sprite urls with query
|
// mapbox-gl-js viewer cannot handle sprite urls with query
|
||||||
if (styleJSON_.sprite) {
|
if (styleJSON_.sprite) {
|
||||||
styleJSON_.sprite = fixUrl(req, styleJSON_.sprite, item.publicUrl, true);
|
styleJSON_.sprite = fixUrl(req, styleJSON_.sprite, item.publicUrl, false, options);
|
||||||
}
|
}
|
||||||
if (styleJSON_.glyphs) {
|
if (styleJSON_.glyphs) {
|
||||||
styleJSON_.glyphs = fixUrl(req, styleJSON_.glyphs, item.publicUrl, false);
|
styleJSON_.glyphs = fixUrl(req, styleJSON_.glyphs, item.publicUrl, false, options);
|
||||||
}
|
}
|
||||||
return res.send(styleJSON_);
|
return res.send(styleJSON_);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,10 @@ function start(opts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = config.options || {};
|
const options = config.options || {};
|
||||||
|
|
||||||
|
options.auth = options.auth || {};
|
||||||
|
options.auth.keyName = options.auth.keyName || 'key';
|
||||||
|
|
||||||
const paths = options.paths || {};
|
const paths = options.paths || {};
|
||||||
options.paths = paths;
|
options.paths = paths;
|
||||||
paths.root = path.resolve(
|
paths.root = path.resolve(
|
||||||
|
|
@ -243,7 +247,9 @@ function start(opts) {
|
||||||
|
|
||||||
app.get('/styles.json', (req, res, next) => {
|
app.get('/styles.json', (req, res, next) => {
|
||||||
const result = [];
|
const result = [];
|
||||||
const query = req.query.key ? (`?key=${encodeURIComponent(req.query.key)}`) : '';
|
const query = req.query[options.auth.keyName]
|
||||||
|
? `?${options.auth.keyName}=${encodeURIComponent(req.query[options.auth.keyName])}`
|
||||||
|
: '';
|
||||||
for (const id of Object.keys(serving.styles)) {
|
for (const id of Object.keys(serving.styles)) {
|
||||||
const styleJSON = serving.styles[id].styleJSON;
|
const styleJSON = serving.styles[id].styleJSON;
|
||||||
result.push({
|
result.push({
|
||||||
|
|
@ -267,7 +273,7 @@ function start(opts) {
|
||||||
}
|
}
|
||||||
info.tiles = utils.getTileUrls(req, info.tiles, path, info.format, opts.publicUrl, {
|
info.tiles = utils.getTileUrls(req, info.tiles, path, info.format, opts.publicUrl, {
|
||||||
'pbf': options.pbfAlias
|
'pbf': options.pbfAlias
|
||||||
});
|
}, options);
|
||||||
arr.push(info);
|
arr.push(info);
|
||||||
}
|
}
|
||||||
return arr;
|
return arr;
|
||||||
|
|
@ -318,9 +324,12 @@ function start(opts) {
|
||||||
data['server_version'] = `${packageJson.name} v${packageJson.version}`;
|
data['server_version'] = `${packageJson.name} v${packageJson.version}`;
|
||||||
data['public_url'] = opts.publicUrl || '/';
|
data['public_url'] = opts.publicUrl || '/';
|
||||||
data['is_light'] = isLight;
|
data['is_light'] = isLight;
|
||||||
data['key_query_part'] =
|
data['key_query_part'] = req.query[options.auth.keyName]
|
||||||
req.query.key ? `key=${encodeURIComponent(req.query.key)}&` : '';
|
? `${options.auth.keyName}=${encodeURIComponent(req.query[options.auth.keyName])}&`
|
||||||
data['key_query'] = req.query.key ? `?key=${encodeURIComponent(req.query.key)}` : '';
|
: '';
|
||||||
|
data['key_query'] = req.query[options.auth.keyName]
|
||||||
|
? `?${options.auth.keyName}=${encodeURIComponent(req.query[options.auth.keyName])}`
|
||||||
|
: '';
|
||||||
if (template === 'wmts') res.set('Content-Type', 'text/xml');
|
if (template === 'wmts') res.set('Content-Type', 'text/xml');
|
||||||
return res.status(200).send(compiled(data));
|
return res.status(200).send(compiled(data));
|
||||||
});
|
});
|
||||||
|
|
@ -347,7 +356,7 @@ function start(opts) {
|
||||||
|
|
||||||
style.xyz_link = utils.getTileUrls(
|
style.xyz_link = utils.getTileUrls(
|
||||||
req, style.serving_rendered.tileJSON.tiles,
|
req, style.serving_rendered.tileJSON.tiles,
|
||||||
`styles/${id}`, style.serving_rendered.tileJSON.format, opts.publicUrl)[0];
|
`styles/${id}`, style.serving_rendered.tileJSON.format, opts.publicUrl, null, options)[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const data = clone(serving.data || {});
|
const data = clone(serving.data || {});
|
||||||
|
|
@ -368,7 +377,7 @@ function start(opts) {
|
||||||
data_.xyz_link = utils.getTileUrls(
|
data_.xyz_link = utils.getTileUrls(
|
||||||
req, tilejson.tiles, `data/${id}`, tilejson.format, opts.publicUrl, {
|
req, tilejson.tiles, `data/${id}`, tilejson.format, opts.publicUrl, {
|
||||||
'pbf': options.pbfAlias
|
'pbf': options.pbfAlias
|
||||||
})[0];
|
}, options)[0];
|
||||||
}
|
}
|
||||||
if (data_.filesize) {
|
if (data_.filesize) {
|
||||||
let suffix = 'kB';
|
let suffix = 'kB';
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ const glyphCompose = require('@mapbox/glyph-pbf-composite');
|
||||||
|
|
||||||
module.exports.getPublicUrl = (publicUrl, req) => publicUrl || `${req.protocol}://${req.headers.host}/`;
|
module.exports.getPublicUrl = (publicUrl, req) => publicUrl || `${req.protocol}://${req.headers.host}/`;
|
||||||
|
|
||||||
module.exports.getTileUrls = (req, domains, path, format, publicUrl, aliases) => {
|
module.exports.getTileUrls = (req, domains, path, format, publicUrl, aliases, options) => {
|
||||||
|
|
||||||
if (domains) {
|
if (domains) {
|
||||||
if (domains.constructor === String && domains.length > 0) {
|
if (domains.constructor === String && domains.length > 0) {
|
||||||
|
|
@ -37,10 +37,9 @@ module.exports.getTileUrls = (req, domains, path, format, publicUrl, aliases) =>
|
||||||
domains = [req.headers.host];
|
domains = [req.headers.host];
|
||||||
}
|
}
|
||||||
|
|
||||||
const key = req.query.key;
|
|
||||||
const queryParams = [];
|
const queryParams = [];
|
||||||
if (req.query.key) {
|
if (req.query[options.auth.keyName]) {
|
||||||
queryParams.push(`key=${encodeURIComponent(req.query.key)}`);
|
queryParams.push(`${options.auth.keyName}=${encodeURIComponent(req.query[options.auth.keyName])}`);
|
||||||
}
|
}
|
||||||
if (req.query.style) {
|
if (req.query.style) {
|
||||||
queryParams.push(`style=${encodeURIComponent(req.query.style)}`);
|
queryParams.push(`style=${encodeURIComponent(req.query.style)}`);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue