UNPKG

5.4 kBJavaScriptView Raw
1/*
2Name: Weslley De Souza
3Date: 30.08.2017
4Version: 2.0
5Notes: minimal Server
6
7CHANGELOG:
807.09.17 Update is now with npm
9
10 */
11
12/* Libraries */
13const 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//CLEAR TERMINAL
29exec("sudo clear", puts);
30
31//FUNCTIONS
32
33//Output of exec commands
34function puts(error, stdout, stderr) {
35 console.log(stdout)
36}
37
38//get current external ip by doing a request
39function 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 tr.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//start the server and check for update
74function init() {
75 //Output IP,Port, ServerStatus
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//Reboot Bot by exec
87function rebootBot(socket=null) {
88 if(socket){
89 socket.emit('bot_disconnect',os.hostname().replace('slave',''))
90 }
91 exec("reboot", puts);
92 exec("echo 123 | sudo -S reboot", puts);
93}
94
95//Restart bot
96function restartBot(socket=null) {
97
98 if(socket){
99 socket.emit('bot_disconnect',os.hostname().replace('slave',''))
100 }
101
102 exec("echo 123 | sudo -S forever restartall", puts);
103 process.exit(1);
104}
105
106//Update server by comparing package.json with the newest version
107function getVersion(log=false) {
108 return new Promise(resolve=>{
109 try{
110 fs.readFile('/var/node/package.json','utf8', function read(err, data)
111 {
112 //Get Current version of bot
113 const jsnpackage = JSON.parse(data);
114 let currentversion = jsnpackage.dependencies.hp_pricebot.replace(`^`,'').replace(/ /g,'').replace(' ','').toString()
115
116 //Compare version and update if needed
117 exec('npm show hp_pricebot version', function(error, nv, stderr)
118 {
119 let newversion = nv.replace(/ /g,'').toString();
120 if(parseFloat(newversion) > parseFloat(currentversion))
121 {
122
123 //Set new version to json file
124 jsnpackage.dependencies.hp_pricebot = newversion;
125
126 //Save json file
127 updateServer(jsnpackage);
128
129
130 if (log){
131 console.log('Current Version: '+currentversion +" There is a newer version: "+newversion);
132 }
133 resolve(newversion);
134 }
135 else
136 {
137 if (log){
138 console.info("Version: "+currentversion);
139 }
140 resolve(currentversion)
141 }
142 });
143
144 })
145 }catch (SyntaxError){}
146 })
147}
148function updateServer(package) {
149 if(!package)return;
150
151 //Override package.json file
152 fs.writeFile('/var/node/package.json', JSON.stringify(package), 'utf8', function readFileCallback(err, data){
153 if(err)console.log(err);
154
155 else {
156
157 console.log("restarting node for update")
158
159 exec('rm -r /var/node/node_modules/hp_pricebot',puts);
160 exec('forever restartall',puts);
161 process.exit(0);
162 }
163
164 })
165
166}
167
168
169// ----------- ------------- END SERVER CONF----------------------------------
170
171
172//###PREFERENCES
173tr.TorControlPort.password = 'hotelpartner';
174
175
176//###Export
177module.exports = {
178 "start" :init,
179 "reboot" :rebootBot,
180 "restart":restartBot,
181 "showExternalIP":showCurrentExternalIP,
182 "version":getVersion,
183 "fetch" :fetch,
184 "request":request,
185 "http" :http,
186 "os" :os,
187 "exec" :exec,
188 "fs" :fs,
189 "time" :moment,
190 "io" :io,
191 "tor" :tr,
192 "parseXML":parseString
193};
194
195