Add a control on sha-1 creation, various

This commit is contained in:
Alexander Cerutti
2018-05-07 19:58:54 +02:00
parent 65e4ba6bd0
commit d3b4a17e84

View File

@@ -124,15 +124,16 @@ function generateManifest(fromObject, tempFolderPath) {
} }
instance.listen(80, "0.0.0.0", function(req, res) { instance.listen(80, "0.0.0.0", function(req, res) {
console.log("Listening on 80") console.log("Listening on 80");
}); });
instance.get("/", function (req, res) { instance.get("/", function (req, res) {
res.send("Hello there"); res.send("Hello there!");
}); });
instance.get("/gen/:type/", function (req, res) { instance.get("/gen/:type/", function (req, res) {
if (!supportedTypesOfPass.test(req.params.type)) { if (!supportedTypesOfPass.test(req.params.type)) {
// 😊
res.set("Content-Type", "application/json"); res.set("Content-Type", "application/json");
res.status(418).send({ ecode: 418, status: false, message: `Model unsupported. Refer to https://apple.co/2KKcCrB for supported pass models.`}); res.status(418).send({ ecode: 418, status: false, message: `Model unsupported. Refer to https://apple.co/2KKcCrB for supported pass models.`});
return; return;
@@ -141,6 +142,7 @@ instance.get("/gen/:type/", function (req, res) {
fs.readdir(`${passModelsDir}/${req.params.type}.pass`, {}, function (err, files) { fs.readdir(`${passModelsDir}/${req.params.type}.pass`, {}, function (err, files) {
/* Invalid path for passModelsDir */ /* Invalid path for passModelsDir */
if (err) { if (err) {
// 😊
res.set("Content-Type", "application/json"); res.set("Content-Type", "application/json");
res.status(418).send({ ecode: 418, status: false, message: `Model not available for requested type [${res.params.type}]. Provide a folder with specified name and .pass extension.`}); res.status(418).send({ ecode: 418, status: false, message: `Model not available for requested type [${res.params.type}]. Provide a folder with specified name and .pass extension.`});
return; return;
@@ -149,17 +151,26 @@ instance.get("/gen/:type/", function (req, res) {
let list = removeDotFiles(files); let list = removeDotFiles(files);
if (!list.length) { if (!list.length) {
// 😊
res.set("Content-Type", "application/json"); res.set("Content-Type", "application/json");
res.status(418).send({ ecode: 418, status: false, message: `Model for type [${req.params.type}] has no contents. Refer to https://apple.co/2IhJr0Q `}); res.status(418).send({ ecode: 418, status: false, message: `Model for type [${req.params.type}] has no contents. Refer to https://apple.co/2IhJr0Q `});
return; return;
} }
if (!list.includes("pass.json")) { if (!list.includes("pass.json")) {
// 😊
res.set("Content-Type", "application/json"); res.set("Content-Type", "application/json");
res.status(418).send({ ecode: 418, status: false, message: "I'm a tea pot. How am I supposed to serve you pass without pass.json in the chosen model as tea without water?" }); res.status(418).send({ ecode: 418, status: false, message: "I'm a tea pot. How am I supposed to serve you pass without pass.json in the chosen model as tea without water?" });
return; return;
} }
/*
* Creating a temporary directory to keep the manifest.json of each pass.
* This is done to pass the file as openssl parameter.
* It would be better to pass openssl a buffer but sadly it seems not possible.
* Feel free to contribute if you think there's a better way to achieve this.
*/
fs.mkdtemp(path.join(os.tmpdir(), "passkitWebServer-"), function(err, tempFolder) { fs.mkdtemp(path.join(os.tmpdir(), "passkitWebServer-"), function(err, tempFolder) {
if (err) { if (err) {
throw err; throw err;
@@ -170,6 +181,7 @@ instance.get("/gen/:type/", function (req, res) {
let archive = archiver("zip"); let archive = archiver("zip");
async.each(list, function getHashAndArchive(file, callback) { async.each(list, function getHashAndArchive(file, callback) {
if (file !== "manifest.json" && file !== "signature") {
let passFileStream = fs.createReadStream(`${passModelsDir}/${req.params.type}.pass/${file}`); let passFileStream = fs.createReadStream(`${passModelsDir}/${req.params.type}.pass/${file}`);
let hashFlow = crypto.createHash("sha1"); let hashFlow = crypto.createHash("sha1");
@@ -188,6 +200,10 @@ instance.get("/gen/:type/", function (req, res) {
manifestRaw[file] = hashFlow.digest("hex").trim(); manifestRaw[file] = hashFlow.digest("hex").trim();
return callback(); return callback();
}); });
} else {
// skipping files
return callback();
}
}, function end(error) { }, function end(error) {
if (error) { if (error) {
throw new Error(`Unable to compile manifest. ${error}`); throw new Error(`Unable to compile manifest. ${error}`);