From 88fc57da822b0dd5c444d0eeafcb5b9244beb7ab Mon Sep 17 00:00:00 2001 From: oat Date: Sat, 26 Dec 2020 23:25:53 +0300 Subject: [PATCH] changed up the zip package, fixed bad zip issues --- package-lock.json | 19 +++++-------------- package.json | 3 +-- src/upload.ts | 26 ++++++++++++++------------ 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index ba1694f..7f649d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -174,15 +174,6 @@ "@types/node": "*" } }, - "@types/mongoose": { - "version": "5.10.3", - "resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.10.3.tgz", - "integrity": "sha512-VfdnaFImXEJZZiuL2ID/ysZs4inOIjxwrAnUgkr5eum2O2BLhFkiSI0i87AwignVva1qWTJ3H3DyM0Rf4USJ4A==", - "requires": { - "@types/mongodb": "*", - "@types/node": "*" - } - }, "@types/node": { "version": "14.14.16", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", @@ -365,6 +356,11 @@ "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, + "adm-zip": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.1.tgz", + "integrity": "sha512-a5ABmIFUJ9OxHV5zrXM9Q41JzpRIflFtdgpL4UQM9DsTHHxQzPRaeyAdnMW7kxL0NRWm/NHafJdj6pO+ty7L2g==" + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1593,11 +1589,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "node-stream-zip": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.12.0.tgz", - "integrity": "sha512-HZ3XehqShTFj9gHauRJ3Bri9eiCTOII7/crtXzURtT14NdnOFs9Ia5E82W7z3izVBNx760tqwddxrBJVG52Y1Q==" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", diff --git a/package.json b/package.json index 8c6a4cc..839852c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MIT", "dependencies": { "@types/express": "github:types/express", - "@types/mongoose": "^5.10.3", + "adm-zip": "^0.5.1", "axios": "^0.20.0", "connect-mongo": "^3.2.0", "dotenv": "^8.2.0", @@ -21,7 +21,6 @@ "express-session": "^1.17.1", "mongoose": "^5.11.8", "mongoose-int32": "^0.4.1", - "node-stream-zip": "^1.12.0", "serve-favicon": "^2.5.0", "typescript": "^4.1.3", "uuid": "^8.3.2", diff --git a/src/upload.ts b/src/upload.ts index 1ddcaaf..48e0acb 100644 --- a/src/upload.ts +++ b/src/upload.ts @@ -1,6 +1,6 @@ import { tmpdir } from 'os'; import * as fs from 'fs'; -const StreamZip = require('node-stream-zip'); +import * as AdmZip from 'adm-zip'; import { parseSM } from './lib/smparse'; import { File, User } from './schema'; @@ -21,23 +21,21 @@ export function run(app) { if (file.mimetype !== 'application/zip' && file.mimetype !== 'application/x-zip-compressed') return res.status(400).send('Invalid filetype'); const dir = tmpdir() + '/' + file.md5; - fs.writeFile(dir, file.data, (err) => { + fs.writeFile(dir, file.data, async (err) => { if (err) throw err; - const zip = new StreamZip({ - file: dir, - storeEntries: true - }); + try { + const zip = new AdmZip(dir); + const zipEntries = zip.getEntries(); - zip.on('ready', async () => { - const smFile = Object.values(zip.entries()).find((f: any) => - !f.isDirectory && (f.name.endsWith('.sm')) + const smFile: any = Object.values(zipEntries).find((f: any) => + !f.isDirectory && (f.entryName.endsWith('.sm')) ); if (!smFile) { res.status(400).send('No .sm found'); } else { - const data = zip.entryDataSync((smFile as any).name); + const data = smFile.getData().toString('utf8'); const chart = parseSM(data.toString()); logger.info(`${chart.artist} - ${chart.title} was just uploaded`); @@ -63,11 +61,15 @@ export function run(app) { }); } - zip.close(); fs.unlink(dir, (err) => { if (err) throw err; }); - }); + } catch(err) { + logger.error(err.toString()); + console.error(err); + res.status(400); + res.send(err.toString()); + } }); }); } \ No newline at end of file