Skip to content

Commit cf7710f

Browse files
committed
fix: should get undecoded flash message when it is not been base64 encode in session
1 parent d65b423 commit cf7710f

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

lib/flash.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ function base64Encode(str) {
99
}
1010

1111
function base64Decode(str) {
12-
return Buffer.from(str, 'base64').toString();
12+
return Buffer.from(str, 'base64').toString('utf-8');
13+
}
14+
15+
function isBase64(str) {
16+
return Buffer.from(str, 'base64').toString('base64') === str;
1317
}
1418

1519
/**
@@ -87,7 +91,11 @@ function _flash(type, msg) {
8791
delete msgs[type];
8892
// decode msg from base64
8993
if (Array.isArray(arr)) {
90-
return arr.map(base64Decode);
94+
return arr.map((val) => {
95+
// if it is not base64, return it as is
96+
if (!isBase64(val)) return val;
97+
return base64Decode(val);
98+
});
9199
}
92100
return [];
93101
} else {

test/flash-test.js

+18-5
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,27 @@ vows.describe('flash').addBatch({
5050
assert.equal(msgs[0], 'Something went wrong');
5151
assert.lengthOf(Object.keys(req.session.flash), 0);
5252
},
53-
'should set/get flash unicode message' : function(err, req, res) {
54-
const count = req.flash('error', 'a Ā 𐀀 文 🦄');
55-
assert.equal(count, 1);
53+
'should be encoded to base64 in session' : function(err, req, res) {
54+
req.flash('error', 'Something went wrong');
55+
assert.equal(req.session.flash.error[0], 'U29tZXRoaW5nIHdlbnQgd3Jvbmc=');
56+
const msgs = req.flash('error');
57+
assert.equal(msgs[0], 'Something went wrong');
58+
},
59+
'should set/get unicode flash message' : function(err, req, res) {
60+
req.flash('error', 'a Ā 𐀀 文 🦄');
5661
assert.equal(req.session.flash.error[0], 'YSDEgCDwkICAIOaWhyDwn6aE');
5762
const msgs = req.flash('error');
58-
assert.lengthOf(msgs, 1);
5963
assert.equal(msgs[0], 'a Ā 𐀀 文 🦄');
60-
assert.lengthOf(Object.keys(req.session.flash), 0);
64+
},
65+
'should get undecoded flash message when it is not been base64 encode in session' : function(err, req, res) {
66+
req.flash('error', 'Something went wrong');
67+
req.session.flash.error.push('Something went wrong');
68+
assert.equal(req.session.flash.error[0], 'U29tZXRoaW5nIHdlbnQgd3Jvbmc=');
69+
assert.equal(req.session.flash.error[1], 'Something went wrong');
70+
console.log(req.session.flash.error);
71+
const msgs = req.flash('error');
72+
assert.equal(msgs[0], 'Something went wrong');
73+
assert.equal(msgs[1], 'Something went wrong');
6174
},
6275
'should set multiple flash messages' : function(err, req, res) {
6376
req.flash('info', 'Welcome');

0 commit comments

Comments
 (0)