loopback-datasource-juggler/lib/adapters/neo4j-lib/node_modules/request/cookies.js

150 lines
3.1 KiB
JavaScript
Raw Normal View History

2011-10-16 17:21:46 +00:00
var cookie_str_splitter=/[:](?=\s*[a-zA-Z0-9_\-]+\s*[=])/g
function stringify (cookie) {
var str=[cookie.name+"="+cookie.value];
if(cookie.expiration_date !== Infinity) {
str.push("expires="+(new Date(cookie.expiration_date)).toGMTString());
}
if(cookie.domain) {
str.push("domain="+cookie.domain);
}
if(cookie.path) {
str.push("path="+cookie.path);
}
if(cookie.secure) {
str.push("secure");
}
if(cookie.noscript) {
str.push("httponly");
}
return str.join("; ");
}
function Jar () {
this.cookies = []
}
Jar.prototype.setCookies = function (cookieString) {
}
Jar.prototype.getHeader = function (host, path) {
}
Jar.prototype.getCookies = function (access_info) {
var matches=[];
for(var cookie_name in cookies) {
var cookie=this.getCookie(cookie_name,access_info);
if (cookie) {
matches.push(cookie);
}
}
matches.toString=function toString(){return matches.join(":");}
return matches;
}
Jar.prototype.getCookie = function (host, path) {
var cookies_list = self.cookies[cookie_name];
for(var i=0;i<cookies_list.length;i++) {
var cookie = cookies_list[i];
if(cookie.expiration_date <= Date.now()) {
if(cookies_list.length===0) {
delete cookies[cookie.name]
}
continue;
}
if(cookie.matches(access_info)) {
return cookie;
}
}
}
Jar.prototype.setCookie = function (){}
Jar.prototype.parseCookie = function (str) {
var cookies = str.split(cookie_str_splitter)
, successful = []
, self = this
;
cookies.forEach(function (cookie) {
self.parseCookie(cookie);
})
}
Jar.prototype.parseCookie = function (str) {
var parts = str.split(";")
, pai r= parts[0].match(/([^=]+)=((?:.|\n)*)/)
, key = pair[1]
, value = pair[2]
, cookie =
{ name: null
, value: value
, expiration_date: = Infinity
, path: '/'
, domain: null
, secure: false
, noscript: false
}
;
cookie.name = key;
cookie.value = value;
for(var i=1;i<parts.length;i++) {
var pair = parts[i].match(/([^=]+)=((?:.|\n)*)/)
, key = pair[1].trim().toLowerCase()
, value = pair[2]
;
switch(key) {
case "httponly":
cookie.noscript = true;
break;
case "expires":
cookie.expiration_date = value
? Number(Date.parse(value))
: Infinity;
break;
case "path":
cookie.path = value
? value.trim()
: "";
break;
case "domain":
cookie.domain = value
? value.trim()
: "";
break;
case "secure":
cookie.secure = true;
break
}
}
if(cookie.name in this.cookies) {
var cookies_list = this.cookies[cookie.name];
for(var i=0;i<this.cookies_list.length;i++) {
var collidable_cookie = cookies_list[i];
if(collidable_cookie.collidesWith(cookie)) {
if(remove) {
cookies_list.splice(i,1);
if(cookies_list.length===0) {
delete this.cookies[cookie.name]
}
return false;
}
else {
return cookies_list[i]=cookie;
}
}
}
if(remove) {
return false;
}
cookies_list.push(cookie);
return cookie;
}
else if(remove){
return false;
}
else {
return this.cookies[cookie.name]=[cookie];
}
}