changed up the zip package, fixed bad zip issues

This commit is contained in:
oat 2020-12-26 23:25:53 +03:00
parent 564d71c48f
commit 88fc57da82
Signed by untrusted user who does not match committer: oat
GPG key ID: DD83A9617A252385
3 changed files with 20 additions and 28 deletions

19
package-lock.json generated
View file

@ -174,15 +174,6 @@
"@types/node": "*" "@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": { "@types/node": {
"version": "14.14.16", "version": "14.14.16",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", "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==", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
"dev": true "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": { "ajv": {
"version": "6.12.6", "version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "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", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" "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": { "on-finished": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",

View file

@ -12,7 +12,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/express": "github:types/express", "@types/express": "github:types/express",
"@types/mongoose": "^5.10.3", "adm-zip": "^0.5.1",
"axios": "^0.20.0", "axios": "^0.20.0",
"connect-mongo": "^3.2.0", "connect-mongo": "^3.2.0",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
@ -21,7 +21,6 @@
"express-session": "^1.17.1", "express-session": "^1.17.1",
"mongoose": "^5.11.8", "mongoose": "^5.11.8",
"mongoose-int32": "^0.4.1", "mongoose-int32": "^0.4.1",
"node-stream-zip": "^1.12.0",
"serve-favicon": "^2.5.0", "serve-favicon": "^2.5.0",
"typescript": "^4.1.3", "typescript": "^4.1.3",
"uuid": "^8.3.2", "uuid": "^8.3.2",

View file

@ -1,6 +1,6 @@
import { tmpdir } from 'os'; import { tmpdir } from 'os';
import * as fs from 'fs'; import * as fs from 'fs';
const StreamZip = require('node-stream-zip'); import * as AdmZip from 'adm-zip';
import { parseSM } from './lib/smparse'; import { parseSM } from './lib/smparse';
import { File, User } from './schema'; 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'); if (file.mimetype !== 'application/zip' && file.mimetype !== 'application/x-zip-compressed') return res.status(400).send('Invalid filetype');
const dir = tmpdir() + '/' + file.md5; const dir = tmpdir() + '/' + file.md5;
fs.writeFile(dir, file.data, (err) => { fs.writeFile(dir, file.data, async (err) => {
if (err) throw err; if (err) throw err;
const zip = new StreamZip({ try {
file: dir, const zip = new AdmZip(dir);
storeEntries: true const zipEntries = zip.getEntries();
});
zip.on('ready', async () => { const smFile: any = Object.values(zipEntries).find((f: any) =>
const smFile = Object.values(zip.entries()).find((f: any) => !f.isDirectory && (f.entryName.endsWith('.sm'))
!f.isDirectory && (f.name.endsWith('.sm'))
); );
if (!smFile) { if (!smFile) {
res.status(400).send('No .sm found'); res.status(400).send('No .sm found');
} else { } else {
const data = zip.entryDataSync((smFile as any).name); const data = smFile.getData().toString('utf8');
const chart = parseSM(data.toString()); const chart = parseSM(data.toString());
logger.info(`${chart.artist} - ${chart.title} was just uploaded`); logger.info(`${chart.artist} - ${chart.title} was just uploaded`);
@ -63,11 +61,15 @@ export function run(app) {
}); });
} }
zip.close();
fs.unlink(dir, (err) => { fs.unlink(dir, (err) => {
if (err) throw err; if (err) throw err;
}); });
}); } catch(err) {
logger.error(err.toString());
console.error(err);
res.status(400);
res.send(err.toString());
}
}); });
}); });
} }