-
Notifications
You must be signed in to change notification settings - Fork 1
/
cookies.js
69 lines (61 loc) · 1.91 KB
/
cookies.js
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
#!/usr/bin/env node
/*jshint esversion:8*/
//
// cookies.js - convert Netscape/Curl/Wget coookies to JSON
//
const fs = require('fs');
const file=process.argv[2];
if (file) {
var text = fs.readFileSync(file, 'utf-8');
var cookies=curl2puppet(text);
if (cookies) {
console.log(JSON.stringify(cookies,0,2));
} else {
console.error("Not a curl/wget/netscpae cookie file: %s", file);
process.exit(1);
}
} else {
console.error("Missing filename, usage: [node] cookies.js <curl-wget-cookie-file>");
process.exit(2);
}
// convert curl/wget cokkies to puppeter format
// $1 = string, containing newline seperated data in netscape cookie file format
// returns an array for use with puppeteer
// return false if curl or wget signature is not detected
function curl2puppet(source) {
// split source into lines
var cookies = [];
var lines = source.split("\n");
// source is not a curl/wget/netscape cookie file
if (! lines[0].toLowerCase().includes("http cookie file")) { return false; }
// iterate over lines in array
lines.forEach(function(line, index){
// split line into tab separated tokens
var tokens = line.split("\t").map(function(e){return e.trim();});
var cookie = {};
// a valid cookie line must contian 7 tokens
if (tokens.length == 7) {
if (tokens[0].startsWith("#HttpOnly_")) {
cookie.domain = tokens[0].replace("#HttpOnly_", '');
cookie.httpOnly = true;
} else {
cookie.domain = tokens[0];
cookie.httpOnly = false;
}
cookie.flag = tokens[1] === 'TRUE';
cookie.path = tokens[2];
cookie.secure = tokens[3] === 'TRUE';
// Convert timestamp to a readable format
var timestamp = tokens[4];
if (timestamp.length == 17){
timestamp = Math.floor(timestamp / 1000000 - 11644473600);
}
cookie.expiration = timestamp;
cookie.name = tokens[5];
cookie.value = tokens[6];
// add cokkie to puppeter array
cookies.push(cookie);
}
});
return cookies;
}