Skip to content

Commit

Permalink
PR 375: Suggested changes
Browse files Browse the repository at this point in the history
- `buildOptions` now throws an error if `hashAlgorithm` is not defined,
  instead of resetting to the default value of 'md5'
- Moved + symbol for a string concatination to the beginning of the next line
- Updated the README.md with information on the new hashAlgorithm
  option, and how the `md5` property is defined in the new version
- Iterated the version in package.json from 1.5.0 -> 1.5.1

ref: #375
  • Loading branch information
Kpovoc committed Jun 26, 2024
1 parent a230423 commit 7349650
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 18 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ The **req.files.foo** object will contain the following:

* Before 1.0.0, `md5` is an MD5 checksum of the uploaded file.
* From 1.0.0 until 1.1.1, `md5` is a function to compute an MD5 hash ([Read about it here.](https://github.com/richardgirges/express-fileupload/releases/tag/v1.0.0-alpha.1)).
* From 1.1.1 onward, `md5` is reverted back to MD5 checksum value and also added full MD5 support in case you are using temporary files.
* From 1.1.1 until 1.5.1, `md5` is reverted back to MD5 checksum value and also added full MD5 support in case you are using temporary files.
* From 1.5.1 onward, `md5` still holds the checksum value, but the checksum is generated with the provided `hashAlgorithm` option. The property name remains `md5` for backwards compatibility.


### Examples
Expand Down Expand Up @@ -124,6 +125,7 @@ parseNested | <ul><li><code>false</code>&nbsp;**(default)**</li><li><code>true</
debug | <ul><li><code>false</code>&nbsp;**(default)**</li><li><code>true</code></ul> | Turn on/off upload process logging. Can be useful for troubleshooting.
logger | <ul><li><code>console</code>&nbsp;**(default)**</li><li><code>{log: function(msg: string)}</code></li></ul> | Customizable logger to write debug messages to. Console is default.
uploadTimeout | <ul><li><code>60000</code>&nbsp;**(default)**</li><li><code>Integer</code></ul> | This defines how long to wait for data before aborting. Set to 0 if you want to turn off timeout checks.
hashAlgorithm | <ul><li><code>md5</code>&nbsp;**(default)**</li><li><code>String</code></li></ul> | Allows the usage of alternative hashing algorithms for file integrity checks. This option must be an algorithm that is supported on the running system's installed OpenSSL version. On recent releases of OpenSSL, <code>openssl list -digest-algorithms</code> will display the available digest algorithms.

# Help Wanted
Looking for additional maintainers. Please contact `richardgirges [ at ] gmail.com` if you're interested. Pull Requests are welcome!
Expand Down
10 changes: 3 additions & 7 deletions lib/utilities.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ const promiseCallback = (resolve, reject) => {
/**
* Builds instance options from arguments objects(can't be arrow function).
* @returns {Object} - result options.
* @throws {Error} - when a valid hashAlgorithm option is not provided.
*/
const buildOptions = function() {
const result = {};
Expand All @@ -77,16 +78,11 @@ const buildOptions = function() {
Object.keys(options).forEach(i => result[i] = options[i]);
});

// Ensure a hashAlgorithm option exists.
if (!result.hashAlgorithm) {
result.hashAlgorithm = 'md5';
}

// Ensure the configured hashAlgorithm is available on the system
if (crypto.getHashes().find(h => result.hashAlgorithm === h) === undefined) {
throw Error(
`Hashing algorithm '${result.hashAlgorithm}' is not supported by this system's OpenSSL ` +
`version`
`Hashing algorithm '${result.hashAlgorithm}' is not supported by this system's OpenSSL `
+ `version`
);
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "express-fileupload",
"version": "1.5.0",
"version": "1.5.1",
"author": "Richard Girges <[email protected]>",
"description": "Simple express file upload middleware that wraps around Busboy",
"main": "./lib/index",
Expand Down
18 changes: 9 additions & 9 deletions test/utilities.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -198,19 +198,15 @@ describe('utilities: Test of the utilities functions', function() {
//buildOptions tests
describe('Test buildOptions function', () => {

const source = { option1: '1', option2: '2' };
const source = { option1: '1', option2: '2', hashAlgorithm: 'md5' };
const sourceAddon = { option3: '3', hashAlgorithm: 'sha256'};
const expected = { option1: '1', option2: '2', hashAlgorithm: 'md5' };
const expectedAddon = { option1: '1', option2: '2', option3: '3', hashAlgorithm: 'sha256'};

it(
'buildOptions returns an equal object to the object which was passed + hashAlgorithm '
+ 'property',
() => {
let result = buildOptions(source);
assert.deepStrictEqual(result, expected);
}
);
it('buildOptions returns an equal object to the object which was passed', () => {
let result = buildOptions(source);
assert.deepStrictEqual(result, source);
});

it('buildOptions doesnt add non object or null arguments to the result', () => {
let result = buildOptions(source, 2, '3', null);
Expand All @@ -222,6 +218,10 @@ describe('utilities: Test of the utilities functions', function() {
assert.deepStrictEqual(result, expectedAddon);
});

it('buildOptions throws an error when not provided a supported hashAlgorithm', () => {
assert.throws(() => buildOptions({}));
});

it('buildOptions throws an error when given an unsupported hashAlgorithm', () => {
assert.throws(() => buildOptions({ hashAlgorithm: 'not-actual-algo' }));
});
Expand Down

0 comments on commit 7349650

Please sign in to comment.