UNPKG

5.16 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() {
88 exec("reboot", puts);
89 exec("echo 123 | sudo -S reboot", puts);
90}
91
92//Restart bot
93function restartBot() {
94 exec("forever restartall", puts);
95 process.exit(1);
96}
97
98//Update server by comparing package.json with the newest version
99function getVersion(log=false) {
100 return new Promise(resolve=>{
101 try{
102 fs.readFile('/var/node/package.json','utf8', function read(err, data)
103 {
104 //Get Current version of bot
105 const jsnpackage = JSON.parse(data);
106 let currentversion = jsnpackage.dependencies.hp_pricebot.replace(`^`,'').replace(/ /g,'').replace(' ','').toString()
107
108 //Compare version and update if needed
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 //Set new version to json file
116 jsnpackage.dependencies.hp_pricebot = newversion;
117
118 //Save json file
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}
140function updateServer(package) {
141 if(!package)return;
142
143 //Override package.json file
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// ----------- ------------- END SERVER CONF----------------------------------
162
163
164//###PREFERENCES
165tr.TorControlPort.password = 'hotelpartner';
166
167
168//###Export
169module.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