91 lines
1.6 KiB
JavaScript
91 lines
1.6 KiB
JavaScript
var signature = require('cookie-signature');
|
|
|
|
/**
|
|
* Parse signed cookies, returning an object
|
|
* containing the decoded key/value pairs,
|
|
* while removing the signed key from `obj`.
|
|
*
|
|
* @param {Object} obj
|
|
* @return {Object}
|
|
* @api private
|
|
*/
|
|
|
|
exports.signedCookies = function(obj, secret){
|
|
var cookies = Object.keys(obj);
|
|
var dec;
|
|
var key;
|
|
var ret = Object.create(null);
|
|
var val;
|
|
|
|
for (var i = 0; i < cookies.length; i++) {
|
|
key = cookies[i];
|
|
val = obj[key];
|
|
dec = exports.signedCookie(val, secret);
|
|
|
|
if (val !== dec) {
|
|
ret[key] = dec;
|
|
delete obj[key];
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
};
|
|
|
|
/**
|
|
* Parse a signed cookie string, return the decoded value
|
|
*
|
|
* @param {String} str signed cookie string
|
|
* @param {String} secret
|
|
* @return {String} decoded value
|
|
* @api private
|
|
*/
|
|
|
|
exports.signedCookie = function(str, secret){
|
|
return str.substr(0, 2) === 's:'
|
|
? signature.unsign(str.slice(2), secret)
|
|
: str;
|
|
};
|
|
|
|
/**
|
|
* Parse JSON cookies.
|
|
*
|
|
* @param {Object} obj
|
|
* @return {Object}
|
|
* @api private
|
|
*/
|
|
|
|
exports.JSONCookies = function(obj){
|
|
var cookies = Object.keys(obj);
|
|
var key;
|
|
var val;
|
|
|
|
for (var i = 0; i < cookies.length; i++) {
|
|
key = cookies[i];
|
|
val = exports.JSONCookie(obj[key]);
|
|
|
|
if (val) {
|
|
obj[key] = val;
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
};
|
|
|
|
/**
|
|
* Parse JSON cookie string
|
|
*
|
|
* @param {String} str
|
|
* @return {Object} Parsed object or null if not json cookie
|
|
* @api private
|
|
*/
|
|
|
|
exports.JSONCookie = function(str) {
|
|
if (!str || str.substr(0, 2) !== 'j:') return;
|
|
|
|
try {
|
|
return JSON.parse(str.slice(2));
|
|
} catch (err) {
|
|
// no op
|
|
}
|
|
};
|