-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaquastar-service.js
More file actions
125 lines (106 loc) · 3.24 KB
/
aquastar-service.js
File metadata and controls
125 lines (106 loc) · 3.24 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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
(function () {
"use strict";
var rp = require("request-promise"),
cheerio = require("cheerio"),
_ = require("lodash"),
q = require("q");
require("stringformat").extendString("format");
var service = (function (baseUrl) {
if (typeof baseUrl !== "string") throw("baseUrl is not defined");
var cookieJar = rp.jar(),
request = rp.defaults({
proxy: process.env.AQ_PROXY || null,
jar: cookieJar,
rejectUnauthorized: false,
headers: {
"accept": "text/html,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7",
"user-agent": "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)",
"dnt": "1",
"accept-language": "en-US,en;q=0.8"
}
}),
urlForPath = function (path) {
return "{0}/{1}".format(baseUrl, path);
};
var connect = function () {
var deferred = q.defer();
request.get(urlForPath("tcnc"))
.then(function(body) {
deferred.resolve(body);
})
.catch(function(reason) {
deferred.reject(reason);
});
return deferred.promise;
},
authenticate = function (credentials) {
var deferred = q.defer();
request.post({
headers: {"content-type" : "application/x-www-form-urlencoded"},
url: urlForPath("logon.do"),
body: credentials
})
.then(function (body) {
deferred.resolve(body);
})
.catch(function(reason) {
deferred.reject(reason);
});
return deferred.promise;
};
var getHiddenParams = function (html) {
var $ = cheerio.load(html),
params = {};
_.forEach($("form[name=ActionForm] input[type=hidden]"), function (element) {
var key = element.attribs["name"];
(typeof key === "string") && (params[key] = element.attribs["value"]);
});
return params;
};
var getStatements = function (html) {
var $ = cheerio.load(html),
statements = [];
_.forEach($("tr[class^=search_cell_]"), function (element) {
var selector = "td[align=center][nowrap=nowrap]",
dateCell = $(element).find(selector).eq(0),
dateString = dateCell.text(),
linkCell = dateCell.siblings(selector).eq(0),
linkTag = linkCell.find("a[href*=aquastar\\.townofcary\\.org]").eq(0),
linkString = linkTag[0].attribs["href"];
statements.push({
date: new Date(Date.parse(dateString)),
link: linkString
});
});
return statements;
};
var serialize = function (obj) {
return _.map(Array.isArray(obj) ? obj : [ obj ], function (dictionary) {
var pairs = [];
for (var key in dictionary) {
if (dictionary.hasOwnProperty(key)) {
pairs.push("{0}={1}".format(escape(key), escape(dictionary[key])));
}
}
return pairs.join("&");
}).join("&");
};
return {
login: function(params) {
connect()
.then(function (body) {
authenticate(serialize([params, getHiddenParams(body)]))
.then(function (body) {
var statements = getStatements(body);
_.forEach(statements, function (statement) {
console.log(statement.date.toISOString().slice(0,10));
console.log(statement.link);
console.log();
})
});
});
}
};
})("https://ipn.paymentus.com/epd/stde");
module.exports = service;
})();