1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | const exec = require('child_process').exec
|
14 | , figlet = require('figlet')
|
15 | , fs = require('fs')
|
16 | , request = require('request')
|
17 | , fetch = require('node-fetch')
|
18 | , http = require('http')
|
19 | , path = require('path')
|
20 | , os = require('os')
|
21 | , moment = require('moment')
|
22 | , tr = require('tor-request')
|
23 | , io = require('socket.io-client')
|
24 | , parseString = require('xml2js').parseString;
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | exec("sudo clear", puts);
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | function puts(error, stdout, stderr) {
|
35 | console.log(stdout)
|
36 | }
|
37 |
|
38 |
|
39 | function showCurrentExternalIP(log=true) {
|
40 | return new Promise((resovle)=>{
|
41 | const rnd = Math.floor(Math.random() * 6);
|
42 | const ipurl = [
|
43 | 'http://ifconfig.co/ip',
|
44 | 'http://whatismyip.akamai.com/',
|
45 | 'http://ip.tyk.nu/',
|
46 | 'http://tnx.nl/ip',
|
47 | 'http://eth0.me/',
|
48 | 'https://4.ifcfg.me/ip'
|
49 | ]
|
50 | try{
|
51 | const options = {
|
52 | url: ipurl[rnd],
|
53 | timeout: 9000
|
54 | };
|
55 | request(options, function (err, resp, body) {
|
56 | if(body){
|
57 | if(log)console.log("Current IP: " +body);
|
58 | resovle(body)
|
59 | }
|
60 | else {
|
61 | showCurrentExternalIP(log)
|
62 | }
|
63 | })
|
64 | }
|
65 | catch (SynatxError)
|
66 | {
|
67 | console.error("error : showCurrentExternalIP")
|
68 | resovle(false)
|
69 | }
|
70 | })
|
71 | }
|
72 |
|
73 |
|
74 | function init() {
|
75 |
|
76 | figlet('HotelPartner', function(err, data) {
|
77 | if (err) console.dir(err);
|
78 |
|
79 | console.log(data);
|
80 | console.log(os.hostname()+ " is running " + moment().format("DD.MM.YYYY HH:mm"));
|
81 |
|
82 | getVersion(true);
|
83 | });
|
84 | }
|
85 |
|
86 |
|
87 | function rebootBot() {
|
88 | exec("reboot", puts);
|
89 | exec("echo 123 | sudo -S reboot", puts);
|
90 | }
|
91 |
|
92 |
|
93 | function restartBot() {
|
94 | exec("forever restartall", puts);
|
95 | process.exit(1);
|
96 | }
|
97 |
|
98 |
|
99 | function getVersion(log=false) {
|
100 | return new Promise(resolve=>{
|
101 | try{
|
102 | fs.readFile('/var/node/package.json','utf8', function read(err, data)
|
103 | {
|
104 |
|
105 | const jsnpackage = JSON.parse(data);
|
106 | let currentversion = jsnpackage.dependencies.hp_pricebot.replace(`^`,'').replace(/ /g,'').replace(' ','').toString()
|
107 |
|
108 |
|
109 | exec('npm show hp_pricebot version', function(error, nv, stderr)
|
110 | {
|
111 | let newversion = nv.replace(/ /g,'').toString();
|
112 | if(parseFloat(newversion) > parseFloat(currentversion))
|
113 | {
|
114 |
|
115 |
|
116 | jsnpackage.dependencies.hp_pricebot = newversion;
|
117 |
|
118 |
|
119 | updateServer(jsnpackage);
|
120 |
|
121 |
|
122 | if (log){
|
123 | console.log('Current Version: '+currentversion +" There is a newer version: "+newversion);
|
124 | }
|
125 | resolve(newversion);
|
126 | }
|
127 | else
|
128 | {
|
129 | if (log){
|
130 | console.info("Version: "+currentversion);
|
131 | }
|
132 | resolve(currentversion)
|
133 | }
|
134 | });
|
135 |
|
136 | })
|
137 | }catch (SyntaxError){}
|
138 | })
|
139 | }
|
140 | function updateServer(package) {
|
141 | if(!package)return;
|
142 |
|
143 |
|
144 | fs.writeFile('/var/node/package.json', JSON.stringify(package), 'utf8', function readFileCallback(err, data){
|
145 | if(err)console.log(err);
|
146 |
|
147 | else {
|
148 |
|
149 | console.log("restarting node for update")
|
150 |
|
151 | exec('rm -r /var/node/node_modules/hp_pricebot',puts);
|
152 | exec('forever restartall',puts);
|
153 | process.exit(0);
|
154 | }
|
155 |
|
156 | })
|
157 |
|
158 | }
|
159 |
|
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 | tr.TorControlPort.password = 'hotelpartner';
|
166 |
|
167 |
|
168 |
|
169 | module.exports = {
|
170 | "start" :init,
|
171 | "reboot" :rebootBot,
|
172 | "restart":restartBot,
|
173 | "showExternalIP":showCurrentExternalIP,
|
174 | "version":getVersion,
|
175 | "fetch" :fetch,
|
176 | "request":request,
|
177 | "http" :http,
|
178 | "os" :os,
|
179 | "exec" :exec,
|
180 | "fs" :fs,
|
181 | "time" :moment,
|
182 | "io" :io,
|
183 | "tor" :tr,
|
184 | "parseXML":parseString
|
185 | };
|
186 |
|
187 |
|