Skip to content

Commit e9a0b93

Browse files
lteacherdaniel-cottone
authored andcommitted
Adds special encoding for multipart/form-data (dherault#394)
1 parent d85b9df commit e9a0b93

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

src/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const createAuthScheme = require('./createAuthScheme');
2323
const functionHelper = require('./functionHelper');
2424
const Endpoint = require('./Endpoint');
2525
const parseResources = require('./parseResources');
26+
const utils = require('./utils');
2627

2728
/*
2829
I'm against monolithic code like this file, but splitting it induces unneeded complexity.
@@ -406,7 +407,9 @@ class Offline {
406407
config: routeConfig,
407408
handler: (request, reply) => { // Here we go
408409
// Payload processing
409-
request.payload = request.payload && request.payload.toString();
410+
const encoding = utils.detectEncoding(request);
411+
412+
request.payload = request.payload && request.payload.toString(encoding);
410413
request.rawPayload = request.payload;
411414

412415
// Headers processing

src/utils.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ module.exports = {
1414

1515
return capitalized;
1616
},
17+
// Detect the toString encoding from the request headers content-type
18+
// enhance if further content types need to be non utf8 encoded.
19+
detectEncoding: request => _.includes(request.headers['content-type'], 'multipart/form-data') ? 'binary' : 'utf8',
1720
};

test/unit/utilsTest.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,27 @@ describe('utils', () => {
4040
});
4141
});
4242
});
43+
44+
describe('#detectEncoding', () => {
45+
context('with application/json content-type', () => {
46+
it('should return utf8', () => {
47+
const request = {
48+
headers: {
49+
'content-type': 'application/json',
50+
},
51+
};
52+
expect(utils.detectEncoding(request)).to.eq('utf8');
53+
});
54+
});
55+
context('with multipart/form-data content-type', () => {
56+
it('should return binary', () => {
57+
const request = {
58+
headers: {
59+
'content-type': 'multipart/form-data',
60+
},
61+
};
62+
expect(utils.detectEncoding(request)).to.eq('binary');
63+
});
64+
});
65+
});
4366
});

0 commit comments

Comments
 (0)