From 0d5e61a41dbd00a643f8c22915550bba1ba1974f Mon Sep 17 00:00:00 2001 From: Jerico Aragon Date: Wed, 31 Aug 2022 20:20:23 +0800 Subject: [PATCH 1/5] Add arg/parameter validation and log errors to an array https://github.com/humanmade/tachyon/issues/145 --- index.js | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/index.js b/index.js index e9497ff..1d72341 100644 --- a/index.js +++ b/index.js @@ -125,6 +125,82 @@ module.exports.resizeBuffer = async function(buffer, args, callback) { } } + // validate args, remove from the object if not valid + var errors = []; + + if (args.w) { + if (!/^[1-9]\d*$/.test(args.w)) { + delete args.w; + errors.push("w arg is not valid"); + } + } + if (args.h) { + if (!/^[1-9]\d*$/.test(args.h)) { + delete args.h; + errors.push("h arg is not valid"); + } + } + if (args.quality) { + if (!/^[0-9]{1,3}$/.test(args.quality) || args.quality < 0 || args.quality > 100) { + delete args.quality; + errors.push("quality arg is not valid"); + } + } + if (args.resize) { + if (!/^\d+(px)?,\d+(px)?$/.test(args.resize)) { + delete args.resize; + errors.push("resize arg is not valid"); + } + } + if (args.crop_strategy) { + if (!/^(smart|entropy|attention)$/.test(args.crop_strategy)) { + delete args.crop_strategy; + errors.push("crop_strategy arg is not valid"); + } + } + if (args.gravity) { + if (!/^(north|northeast|east|southeast|south|southwest|west|northwest|center)$/.test(args.gravity)) { + delete args.gravity; + errors.push("gravity arg is not valid"); + } + } + if (args.fit) { + if (!/^\d+(px)?,\d+(px)?$/.test(args.fit)) { + delete args.fit; + errors.push("fit arg is not valid"); + } + } + if (args.crop) { + if (!/^\d+(px)?,\d+(px)?,\d+(px)?,\d+(px)?$/.test(args.crop)) { + delete args.crop; + errors.push("crop arg is not valid"); + } + } + if (args.zoom) { + if (!/^\d+(\.\d+)?$/.test(args.zoom)) { + delete args.zoom; + errors.push("zoom arg is not valid"); + } + } + if (args.webp) { + if (!/^0|1|true|false$/.test(args.webp)) { + delete args.webp; + errors.push("webp arg is not valid"); + } + } + if (args.lb) { + if (!/^\d+(px)?,\d+(px)?$/.test(args.lb)) { + delete args.lb; + errors.push("lb arg is not valid"); + } + } + if (args.background) { + if (!/^#[a-f0-9]{3}[a-f0-9]{3}?$/.test(args.background)) { + delete args.background; + errors.push("background arg is not valid"); + } + } + // crop (assumes crop data from original) if (args.crop) { var cropValues = @@ -254,6 +330,9 @@ module.exports.resizeBuffer = async function(buffer, args, callback) { info.size = data.length; } + // add invalid args + info.errors = errors.join(';'); + callback && callback(null, data, info); resolve({ data, info }); }); From c52b6bd6222ddff98a18beb18fcada29163e9d90 Mon Sep 17 00:00:00 2001 From: Jerico Aragon Date: Wed, 31 Aug 2022 20:21:47 +0800 Subject: [PATCH 2/5] Add X-Tachyon-Errors to response header if the parameter is not valid https://github.com/humanmade/tachyon/issues/145 --- lambda-handler.js | 5 +++++ server.js | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lambda-handler.js b/lambda-handler.js index 210520b..06e3d51 100644 --- a/lambda-handler.js +++ b/lambda-handler.js @@ -55,6 +55,11 @@ exports.handler = function(event, context, callback) { body: Buffer.from(data).toString('base64'), isBase64Encoded: true, }; + + if (info.errors) { + resp.headers["X-Tachyon-Errors"] = info.errors; + } + callback(null, resp); data = null; diff --git a/server.js b/server.js index a3007e4..485b172 100644 --- a/server.js +++ b/server.js @@ -82,11 +82,15 @@ http.createServer( function( request, response ) { } return callback( err ); } - response.writeHead( 200, { + var resp = { 'Content-Type': 'image/' + info.format, 'Content-Length': info.size, 'Cache-Control': 'public, max-age=31557600', - } ); + } + if (info.errors) { + resp["X-Tachyon-Errors"] = info.errors; + } + response.writeHead( 200, resp ); response.write( data ); return response.end(); } ); From cf5c843df559cfefc5492aa3f9a2a1b822d1a784 Mon Sep 17 00:00:00 2001 From: Jerico Aragon Date: Mon, 5 Sep 2022 15:45:46 +0800 Subject: [PATCH 3/5] Update TravisCI config to run update-test-fixtures before running test --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index bb87434..ea3bb24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ before_install: before_script: - npm run build-node-modules + - npm run update-test-fixtures script: - npm run test From 8be00d8da4dc0945f2fd46aef6d5125a65723c19 Mon Sep 17 00:00:00 2001 From: Jerico Aragon Date: Mon, 5 Sep 2022 16:13:52 +0800 Subject: [PATCH 4/5] Update test fixtures.json --- test-filesize/fixtures.json | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/test-filesize/fixtures.json b/test-filesize/fixtures.json index 12813c2..d673be7 100644 --- a/test-filesize/fixtures.json +++ b/test-filesize/fixtures.json @@ -1,27 +1,27 @@ { - "briefing-copywriting.jpg-original.jpeg": 115390, - "briefing-copywriting.jpg-small.jpeg": 3092, - "briefing-copywriting.jpg-medium.jpeg": 9584, - "briefing-copywriting.jpg-large.jpeg": 29223, - "briefing-copywriting.jpg-webp.webp": 15660, - "hdr.jpg-original.jpeg": 149042, - "hdr.jpg-small.jpeg": 10589, - "hdr.jpg-medium.jpeg": 24100, - "hdr.jpg-large.jpeg": 87533, - "hdr.jpg-webp.webp": 82784, + "hdr.jpg-original.jpeg": 148964, + "hdr.jpg-small.jpeg": 10632, + "hdr.jpg-medium.jpeg": 24387, + "hdr.jpg-large.jpeg": 87555, + "hdr.jpg-webp.webp": 82710, "Website.png-original.png": 34589, - "Website.png-small.png": 3420, - "Website.png-medium.png": 13778, + "Website.png-small.png": 3343, + "Website.png-medium.png": 13591, "Website.png-large.png": 34589, "Website.png-webp.webp": 20288, + "briefing-copywriting.jpg-original.jpeg": 115372, + "briefing-copywriting.jpg-small.jpeg": 3063, + "briefing-copywriting.jpg-medium.jpeg": 9541, + "briefing-copywriting.jpg-large.jpeg": 29281, + "briefing-copywriting.jpg-webp.webp": 15776, "icons.png-original.png": 28026, - "icons.png-small.png": 3948, - "icons.png-medium.png": 11212, - "icons.png-large.png": 26372, - "icons.png-webp.webp": 24816, - "humans.png-original.png": 873684, - "humans.png-small.png": 9175, - "humans.png-medium.png": 56093, - "humans.png-large.png": 279635, - "humans.png-webp.webp": 141340 -} + "icons.png-small.png": 3987, + "icons.png-medium.png": 11580, + "icons.png-large.png": 27584, + "icons.png-webp.webp": 24500, + "humans.png-original.png": 873673, + "humans.png-small.png": 9162, + "humans.png-medium.png": 55961, + "humans.png-large.png": 280452, + "humans.png-webp.webp": 142528 +} \ No newline at end of file From 625cf8a902ac380ee1c85e7421cb0d4733948ef0 Mon Sep 17 00:00:00 2001 From: Jerico Aragon Date: Mon, 5 Sep 2022 16:25:43 +0800 Subject: [PATCH 5/5] Revert including update-test-fixtures in TravisCI config --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ea3bb24..bb87434 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,6 @@ before_install: before_script: - npm run build-node-modules - - npm run update-test-fixtures script: - npm run test