all tests passing
This commit is contained in:
parent
8bdd14a5e9
commit
32606113c0
2 changed files with 47 additions and 31 deletions
|
@ -453,6 +453,8 @@ const respondImage = async (
|
||||||
overlay = null,
|
overlay = null,
|
||||||
mode = 'tile',
|
mode = 'tile',
|
||||||
) => {
|
) => {
|
||||||
|
console.log(lat);
|
||||||
|
console.log(lon);
|
||||||
if (
|
if (
|
||||||
Math.abs(lon) > 180 ||
|
Math.abs(lon) > 180 ||
|
||||||
Math.abs(lat) > 85.06 ||
|
Math.abs(lat) > 85.06 ||
|
||||||
|
@ -724,6 +726,7 @@ async function handleTileRequest(
|
||||||
* @param {string} req.params.format - The format of the image.
|
* @param {string} req.params.format - The format of the image.
|
||||||
* @param {Function} next - Express next middleware function.
|
* @param {Function} next - Express next middleware function.
|
||||||
* @param {number} maxScaleFactor - The maximum scale factor allowed.
|
* @param {number} maxScaleFactor - The maximum scale factor allowed.
|
||||||
|
* @param verbose
|
||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async function handleStaticRequest(
|
async function handleStaticRequest(
|
||||||
|
@ -733,6 +736,7 @@ async function handleStaticRequest(
|
||||||
res,
|
res,
|
||||||
next,
|
next,
|
||||||
maxScaleFactor,
|
maxScaleFactor,
|
||||||
|
verbose,
|
||||||
) {
|
) {
|
||||||
const {
|
const {
|
||||||
id,
|
id,
|
||||||
|
@ -742,6 +746,13 @@ async function handleStaticRequest(
|
||||||
scale: scaleParam,
|
scale: scaleParam,
|
||||||
format,
|
format,
|
||||||
} = req.params;
|
} = req.params;
|
||||||
|
if (verbose) {
|
||||||
|
console.log(
|
||||||
|
`Handling static request for: /styles/${id}/static/${raw ? raw + '/' : ''}${staticType}${widthAndHeight ? '/' + widthAndHeight : ''}${
|
||||||
|
scaleParam ? '@' + scaleParam : ''
|
||||||
|
}.${format}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
console.log(req.params);
|
console.log(req.params);
|
||||||
const item = repo[id];
|
const item = repo[id];
|
||||||
|
|
||||||
|
@ -752,7 +763,6 @@ async function handleStaticRequest(
|
||||||
if (sizeMatch) {
|
if (sizeMatch) {
|
||||||
const width = parseInt(sizeMatch[1], 10);
|
const width = parseInt(sizeMatch[1], 10);
|
||||||
const height = parseInt(sizeMatch[2], 10);
|
const height = parseInt(sizeMatch[2], 10);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
isNaN(width) ||
|
isNaN(width) ||
|
||||||
isNaN(height) ||
|
isNaN(height) ||
|
||||||
|
@ -775,22 +785,22 @@ async function handleStaticRequest(
|
||||||
.status(400)
|
.status(400)
|
||||||
.send('Invalid width or height provided in size parameter');
|
.send('Invalid width or height provided in size parameter');
|
||||||
}
|
}
|
||||||
|
|
||||||
const scale = parseScale(scaleParam, maxScaleFactor);
|
const scale = parseScale(scaleParam, maxScaleFactor);
|
||||||
let isRaw = raw === 'raw';
|
let isRaw = raw === 'raw';
|
||||||
|
|
||||||
if (!item || !staticType || !format || !scale) {
|
const staticTypeMatch = staticType.match(staticTypeRegex);
|
||||||
|
if (!item || !format || !scale || !staticTypeMatch?.groups) {
|
||||||
return res.sendStatus(404);
|
return res.sendStatus(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
const staticTypeMatch = staticType.match(staticTypeRegex);
|
|
||||||
if (staticTypeMatch.groups.lon) {
|
if (staticTypeMatch.groups.lon) {
|
||||||
// Center Based Static Image
|
// Center Based Static Image
|
||||||
const z = staticTypeMatch.groups.zoom;
|
const z = parseFloat(staticTypeMatch.groups.zoom) || 0;
|
||||||
let x = staticTypeMatch.groups.lon;
|
let x = parseFloat(staticTypeMatch.groups.lon) || 0;
|
||||||
let y = staticTypeMatch.groups.lat;
|
let y = parseFloat(staticTypeMatch.groups.lat) || 0;
|
||||||
const bearing = staticTypeMatch.groups.bearing;
|
const bearing = parseFloat(staticTypeMatch.groups.bearing) || 0;
|
||||||
const pitch = staticTypeMatch.groups.pitch;
|
const pitch = parseInt(staticTypeMatch.groups.pitch) || 0;
|
||||||
|
|
||||||
if (z < 0) {
|
if (z < 0) {
|
||||||
return res.status(404).send('Invalid zoom');
|
return res.status(404).send('Invalid zoom');
|
||||||
}
|
}
|
||||||
|
@ -807,24 +817,27 @@ async function handleStaticRequest(
|
||||||
|
|
||||||
const paths = extractPathsFromQuery(req.query, transformer);
|
const paths = extractPathsFromQuery(req.query, transformer);
|
||||||
const markers = extractMarkersFromQuery(req.query, options, transformer);
|
const markers = extractMarkersFromQuery(req.query, options, transformer);
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const overlay = await renderOverlay(
|
const overlay = await renderOverlay(
|
||||||
z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query,
|
z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query,
|
||||||
);
|
);
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
return await respondImage(
|
return await respondImage(
|
||||||
options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static',
|
options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static',
|
||||||
);
|
);
|
||||||
} else if (staticTypeMatch.groups.minx) {
|
} else if (staticTypeMatch.groups.minx) {
|
||||||
// Area Based Static Image
|
// Area Based Static Image
|
||||||
const bbox = [
|
const minx = parseFloat(staticTypeMatch.groups.minx) || 0;
|
||||||
+staticTypeMatch.groups.minx,
|
const miny = parseFloat(staticTypeMatch.groups.miny) || 0;
|
||||||
+staticTypeMatch.groups.miny,
|
const maxx = parseFloat(staticTypeMatch.groups.maxx) || 0;
|
||||||
+staticTypeMatch.groups.maxx,
|
const maxy = parseFloat(staticTypeMatch.groups.maxy) || 0;
|
||||||
+staticTypeMatch.groups.maxx,
|
if (isNaN(minx) || isNaN(miny) || isNaN(maxx) || isNaN(maxy)) {
|
||||||
];
|
return res
|
||||||
|
.status(400)
|
||||||
|
.send('Invalid bounding box provided in staticType parameter');
|
||||||
|
}
|
||||||
|
const bbox = [minx, miny, maxx, maxy];
|
||||||
let center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];
|
let center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];
|
||||||
|
|
||||||
const transformer = isRaw
|
const transformer = isRaw
|
||||||
|
@ -841,23 +854,27 @@ async function handleStaticRequest(
|
||||||
center = transformer(center);
|
center = transformer(center);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Math.abs(center[0]) > 180 || Math.abs(center[1]) > 85.06) {
|
||||||
|
return res.status(400).send('Invalid center');
|
||||||
|
}
|
||||||
|
|
||||||
const z = calcZForBBox(bbox, parsedWidth, parsedHeight, req.query);
|
const z = calcZForBBox(bbox, parsedWidth, parsedHeight, req.query);
|
||||||
const x = center[0];
|
const x = center[0];
|
||||||
const y = center[1];
|
const y = center[1];
|
||||||
const bearing = 0;
|
const bearing = 0;
|
||||||
const pitch = 0;
|
const pitch = 0;
|
||||||
|
|
||||||
const paths = extractPathsFromQuery(req.query, transformer);
|
const paths = extractPathsFromQuery(req.query, transformer);
|
||||||
const markers = extractMarkersFromQuery(req.query, options, transformer);
|
const markers = extractMarkersFromQuery(req.query, options, transformer);
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const overlay = await renderOverlay(
|
const overlay = await renderOverlay(
|
||||||
z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query,
|
z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query,
|
||||||
);
|
);
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
return await respondImage(
|
return await respondImage(
|
||||||
options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static',
|
options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static',
|
||||||
);
|
);
|
||||||
} else if (staticTypeMatch.groups.auto) {
|
} else if (staticTypeMatch.groups.auto) {
|
||||||
// Area Static Image
|
// Area Static Image
|
||||||
const bearing = 0;
|
const bearing = 0;
|
||||||
|
@ -910,18 +927,17 @@ async function handleStaticRequest(
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const overlay = await renderOverlay(
|
const overlay = await renderOverlay(
|
||||||
z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query,
|
z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, paths, markers, req.query,
|
||||||
);
|
);
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
return await respondImage(
|
return await respondImage(
|
||||||
options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static',
|
options, item, z, x, y, bearing, pitch, parsedWidth, parsedHeight, scale, format, res, overlay, 'static',
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return res.sendStatus(404);
|
return res.sendStatus(404);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const existingFonts = {};
|
const existingFonts = {};
|
||||||
let maxScaleFactor = 2;
|
let maxScaleFactor = 2;
|
||||||
|
|
||||||
|
@ -980,7 +996,7 @@ export const serve_rendered = {
|
||||||
res,
|
res,
|
||||||
next,
|
next,
|
||||||
maxScaleFactor,
|
maxScaleFactor,
|
||||||
defailtTileSize,
|
verbose,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return res.sendStatus(404);
|
return res.sendStatus(404);
|
||||||
|
|
|
@ -78,7 +78,7 @@ describe('Static endpoints', function () {
|
||||||
testStatic(prefix, '0,0,0/256x256', 'png', 404, 1);
|
testStatic(prefix, '0,0,0/256x256', 'png', 404, 1);
|
||||||
|
|
||||||
testStatic(prefix, '0,0,-1/256x256', 'png', 404);
|
testStatic(prefix, '0,0,-1/256x256', 'png', 404);
|
||||||
testStatic(prefix, '0,0,0/256.5x256.5', 'png', 404);
|
testStatic(prefix, '0,0,0/256.5x256.5', 'png', 400);
|
||||||
|
|
||||||
testStatic(prefix, '0,0,0,/256x256', 'png', 404);
|
testStatic(prefix, '0,0,0,/256x256', 'png', 404);
|
||||||
testStatic(prefix, '0,0,0,0,/256x256', 'png', 404);
|
testStatic(prefix, '0,0,0,0,/256x256', 'png', 404);
|
||||||
|
|
Loading…
Reference in a new issue