forked from plugCubed/plugAPI
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcookie.js
More file actions
111 lines (97 loc) · 2.44 KB
/
Copy pathcookie.js
File metadata and controls
111 lines (97 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
var fs = require('fs');
var path = require('path');
/**
* Cookies
* @type {Object}
*/
var cookies = {};
/**
* Path to the cookie file
* @type {String}
*/
var cookiePath = path.resolve(__dirname, '..', 'cookies.tmp');
/**
* Key, defining which user the cookie is for
* @type {string}
*/
var cookieKey = '';
/**
* Clear cookies
*/
exports.clear = function() {
cookies = {};
};
/**
* Does cookie handler contain cookie with key?
* @param {String} key
* @returns {boolean}
*/
exports.contain = function(key) {
return cookies[cookieKey][key] != null;
};
/**
* Load from the cookie file, if it exists
*/
exports.load = function() {
if (fs.existsSync(cookiePath)) {
cookies = JSON.parse(fs.readFileSync(cookiePath));
return true;
}
return false;
};
/**
* Save to the cookie file
*/
exports.save = function() {
fs.writeFileSync(cookiePath, JSON.stringify(cookies));
};
/**
* Extract cookies from response headers
* @param {Object} headers Response headers
*/
exports.fromHeaders = function(headers) {
for (var i in headers) {
if (!headers.hasOwnProperty(i)) continue;
if (i == 'set-cookie') {
for (var j in headers[i]) {
if (!headers[i].hasOwnProperty(j)) continue;
var cookieString, cookieKeyValue, key, value;
cookieString = headers[i][j];
cookieKeyValue = cookieString.split(';')[0].split('=');
key = cookieKeyValue.shift();
value = cookieKeyValue.join('=');
if (cookies[cookieKey] == undefined) {
cookies[cookieKey] = {};
}
cookies[cookieKey][key] = value;
}
}
}
};
/**
* Return the cookie as a request header string
* @returns {String}
*/
exports.toString = function() {
var _cookies = [];
for (var i in cookies[cookieKey]) {
if (!cookies[cookieKey].hasOwnProperty(i)) continue;
_cookies.push(i + '=' + cookies[cookieKey][i]);
}
return _cookies.join('; ');
};
/**
* Cookie Handler
* @param {String} key A key used to figure out, which user the key is for
* @constructor
*/
function CookieHandler(key) {
cookieKey = key;
this.clear = exports.clear;
this.contain = exports.contain;
this.load = exports.load;
this.save = exports.save;
this.fromHeaders = exports.fromHeaders;
this.toString = exports.toString;
}
module.exports = CookieHandler;