dataflo.ws
Version:
Zero-code JSON config-based dataflow engine for Node, PhoneGap and browser.
103 lines (57 loc) • 1.79 kB
JavaScript
var task = require ('./base'),
util = require ('util');
var clientCookie = module.exports = function (config) {
this.init (config);
};
util.inherits (clientCookie, task);
util.extend (clientCookie.prototype, {
run: function() {
var self = this;
self.failed('use method [parse|render]');
},
// - - - client-side
parse: function() {
var self = this,
headers = self.headers || (self.response && self.response.headers) || null,
cookie = self.cookie || (headers && headers['set-cookie']) || '';
if (cookie.constructor != Array) cookie = [cookie];
if (self.hashMap) {
var cookieObj = {};
cookie.forEach (function(item) {
item = self.deserializeCookie(item);
cookieObj[item.name] = item;
});
self.completed (cookieObj);
} else {
var cookieArr = cookie.map (function(item) {
return self.deserializeCookie(item);
});
self.completed (cookieArr);
}
},
deserializeCookie: function(coockieStr) {
var self = this,
pairs = coockieStr.split('; '),
cookie = {};
var nameValue = pairs.shift().split('=');
cookie.name = nameValue[0];
cookie.value = decodeURIComponent(nameValue[1]);
if (pairs.length) pairs.forEach(function(pair) {
pair = pair.split('=');
var key = pair.shift(),
value = pair.join('');
cookie[key] = value || true;
});
if (cookie.expires) cookie.expires = ~~(new Date(cookie.expires).getTime()/1000);
if (!cookie.domain) cookie.domain = self.defaultDomain;
return cookie;
},
render: function () {
var self = this;
var cookie = [];
self.cookie.map(function(item) {
cookie.push(item.name + '=' + encodeURIComponent(item.value));
});
self.completed (cookie);
}
});