Compare commits

...

2 Commits

Author SHA1 Message Date
John McLear 15d4f87f03 formidable migration 2023-07-24 02:34:10 +02:00
dependabot[bot] 3f079e6786
build(deps): bump formidable from 2.1.2 to 3.5.0 in /src
Bumps [formidable](https://github.com/node-formidable/formidable) from 2.1.2 to 3.5.0.
- [Release notes](https://github.com/node-formidable/formidable/releases)
- [Changelog](https://github.com/node-formidable/formidable/blob/master/CHANGELOG.md)
- [Commits](https://github.com/node-formidable/formidable/commits/v3.5.0)

---
updated-dependencies:
- dependency-name: formidable
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-05 09:42:11 +00:00
5 changed files with 64 additions and 38 deletions

View File

@ -89,24 +89,24 @@ const doImport = async (req, res, padId, authorId) => {
maxFileSize: settings.importMaxFileSize, maxFileSize: settings.importMaxFileSize,
}); });
// locally wrapped Promise, since form.parse requires a callback let srcFile;
let srcFile = await new Promise((resolve, reject) => { let files;
form.parse(req, (err, fields, files) => { let fields;
if (err != null) { try {
logger.warn(`Import failed due to form error: ${err.stack || err}`); [fields, files] = await form.parse(req);
// I hate doing indexOf here but I can't see anything to use... } catch (err) {
if (err && err.stack && err.stack.indexOf('maxFileSize') !== -1) { logger.warn(`Import failed due to form error: ${err.stack || err}`);
return reject(new ImportError('maxFileSize')); if (err.code === Formidable.formidableErrors.biggerThanMaxFileSize) {
} throw new ImportError('maxFileSize');
return reject(new ImportError('uploadFailed')); }
} throw new ImportError('uploadFailed');
if (!files.file) { }
logger.warn('Import failed because form had no file'); if (!files.file) {
return reject(new ImportError('uploadFailed')); logger.warn('Import failed because form had no file');
} throw new ImportError('uploadFailed');
resolve(files.file.filepath); } else {
}); srcFile = files.file[0].filepath;
}); }
// ensure this is a file ending we know, else we change the file ending to .txt // ensure this is a file ending we know, else we change the file ending to .txt
// this allows us to accept source code files like .c or .java // this allows us to accept source code files like .c or .java

View File

@ -8,20 +8,19 @@ const util = require('util');
exports.expressPreSession = async (hookName, {app}) => { exports.expressPreSession = async (hookName, {app}) => {
// The Etherpad client side sends information about how a disconnect happened // The Etherpad client side sends information about how a disconnect happened
app.post('/ep/pad/connection-diagnostic-info', (req, res) => { app.post('/ep/pad/connection-diagnostic-info', async (req, res) => {
new Formidable().parse(req, (err, fields, files) => { const [fields, files] = await (new Formidable({})).parse(req);
clientLogger.info(`DIAGNOSTIC-INFO: ${fields.diagnosticInfo}`); clientLogger.info(`DIAGNOSTIC-INFO: ${fields.diagnosticInfo}`);
res.end('OK'); res.end('OK');
});
}); });
const parseJserrorForm = async (req) => await new Promise((resolve, reject) => { const parseJserrorForm = async (req) => {
const form = new Formidable({ const form = new Formidable({
maxFileSize: 1, // Files are not expected. Not sure if 0 means unlimited, so 1 is used. maxFileSize: 1, // Files are not expected. Not sure if 0 means unlimited, so 1 is used.
}); });
form.on('error', (err) => reject(err)); const [fields, files] = await form.parse(req);
form.parse(req, (err, fields) => err != null ? reject(err) : resolve(fields.errorInfo)); return fields.errorInfo;
}); };
// The Etherpad client side sends information about client side javscript errors // The Etherpad client side sends information about client side javscript errors
app.post('/jserror', (req, res, next) => { app.post('/jserror', (req, res, next) => {

View File

@ -15,8 +15,7 @@
*/ */
const OpenAPIBackend = require('openapi-backend').default; const OpenAPIBackend = require('openapi-backend').default;
const formidable = require('formidable'); const IncomingForm = require('formidable').IncomingForm;
const {promisify} = require('util');
const cloneDeep = require('lodash.clonedeep'); const cloneDeep = require('lodash.clonedeep');
const createHTTPError = require('http-errors'); const createHTTPError = require('http-errors');
@ -596,9 +595,13 @@ exports.expressPreSession = async (hookName, {app}) => {
// read form data if method was POST // read form data if method was POST
let formData = {}; let formData = {};
if (c.request.method === 'post') { if (c.request.method === 'post') {
const form = new formidable.IncomingForm(); const form = new IncomingForm();
const parseForm = promisify(form.parse).bind(form); formData = (await form.parse(req))[0];
formData = await parseForm(req); for (const k of Object.keys(formData)) {
if (formData[k] instanceof Array) {
formData[k] = formData[k][0];
}
}
} }
const fields = Object.assign({}, header, params, query, formData); const fields = Object.assign({}, header, params, query, formData);

34
src/package-lock.json generated
View File

@ -3113,6 +3113,20 @@
"qs": "^6.10.3", "qs": "^6.10.3",
"readable-stream": "^3.6.0", "readable-stream": "^3.6.0",
"semver": "^7.3.7" "semver": "^7.3.7"
},
"dependencies": {
"formidable": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
"integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
"dev": true,
"requires": {
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0",
"qs": "^6.11.0"
}
}
} }
} }
} }
@ -3438,14 +3452,13 @@
} }
}, },
"formidable": { "formidable": {
"version": "2.1.2", "version": "3.5.0",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.0.tgz",
"integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", "integrity": "sha512-WwsMWvPmY+Kv37C3+KP3A+2Ym1aZoac4nz4ZEe5z0UPBoCg0O/wHay3eeYkZr4KJIbCzpSUeno+STMhde+KCfw==",
"requires": { "requires": {
"dezalgo": "^1.0.4", "dezalgo": "^1.0.4",
"hexoid": "^1.0.0", "hexoid": "^1.0.0",
"once": "^1.4.0", "once": "^1.4.0"
"qs": "^6.11.0"
} }
}, },
"forwarded": { "forwarded": {
@ -10109,6 +10122,17 @@
"ms": "2.1.2" "ms": "2.1.2"
} }
}, },
"formidable": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
"integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
"requires": {
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0",
"qs": "^6.11.0"
}
},
"mime": { "mime": {
"version": "2.6.0", "version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",

View File

@ -43,7 +43,7 @@
"express-session": "npm:@etherpad/express-session@^1.18.1", "express-session": "npm:@etherpad/express-session@^1.18.1",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"find-root": "1.1.0", "find-root": "1.1.0",
"formidable": "^2.1.2", "formidable": "^3.5.0",
"http-errors": "^2.0.0", "http-errors": "^2.0.0",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"jsdom": "^20.0.0", "jsdom": "^20.0.0",