Guest User

Untitled

a guest
May 7th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.73 KB | None | 0 0
  1. var express = require('express');
  2. var request = require('request');
  3.  
  4. const serverurl = "http://127.0.0.1:80/";
  5. //'http://172.16.1.129:2000/';// "http://watchdog.100fat.nl/installations/";
  6. const apiKey = "7f1bdf98a3674b14b51851c906e9bce4";
  7. const timerInterval = 25; //in minutes
  8. var InstallationID = '5cd040d30b4a9f372c9083fc';
  9. const maxTries = 5;
  10. var tries = 0;
  11. var exec = require('child_process').exec;
  12.  
  13.  
  14. var fs = require('fs');
  15.  
  16. var app = express();
  17.  
  18. var autoUpdate;
  19.  
  20.  
  21. console.log('client is running!');
  22. //startShellScript();
  23. start();
  24.  
  25. function start(){
  26. // todo:: create request to the server.
  27. // send json settings over.
  28. // check on server if applyautoUpdate is true (overhead is for the server where as the clients first time gets an update)
  29.  
  30. //server side:
  31. // if(applyautoUpdate){
  32. //update client to be same as server
  33. //}else{
  34. //something changed in client, update server to be same.
  35. //}
  36.  
  37. readSettings();
  38. console.log('autoUpdate: '+autoUpdate);
  39. pingAgain();
  40. }
  41.  
  42. var user='thomas';
  43. var password = '123fat123';
  44. //var base64encodedData = Buffer.allocUnsafe(user + ':' + password).toString('base64');
  45.  
  46.  
  47. function pingAgain(){
  48. //writeSettings();
  49.  
  50. makePostRequest();
  51. }
  52.  
  53.  
  54. function makePostRequest(){
  55. var receivedData='';
  56. console.log('make request!');
  57. //original
  58. //request.post(serverurl+'installations/'+InstallationID+'/'+autoUpdate, {
  59. // 'auth': {
  60. // 'bearer': apiKey
  61. //}
  62.  
  63. request.post(serverurl+'installations/'+InstallationID+'/'+autoUpdate, {
  64. 'auth': {
  65. user:'thomas',
  66. pass: '123fat123'
  67. }
  68. }, function(error, response, body){
  69.  
  70. if(error){
  71. console.log('Error pinging watchdog server: ' + error);
  72. if(tries < maxTries)
  73. {
  74. tries++;
  75. console.log("Retry pinging watchdog server: " + tries);
  76. setTimeout(pingAgain, 20000); //Retry ping after 20 seconds
  77. }
  78. }
  79.  
  80. if(response){
  81. if (response.statusCode== 300){
  82. console.log('try to fetch update form server with file: '+body.response);
  83. //response.once('finish',function(){
  84. // console.log('hopefully finished??');
  85. //setTimeout(updateInstallation(response.body,response),2000); // temp wait 2 seconds for the whole body to arrive
  86.  
  87. //updateInstallation(response.body, response);
  88. // });
  89.  
  90. //response.download(body.response);
  91.  
  92. }else
  93.  
  94. if(response.statusCode != 200){
  95. // console.log("Watchdog Error: could not ping server. Server responded: " + response.statusCode + " " + response.body);
  96. //updateInstallation(response.body, response);
  97. if (tries < maxTries)
  98. {
  99. tries++;
  100. console.log("Retry pinging watchdog server: " + tries);
  101. setTimeout(pingAgain, 20000); //Retry ping after 20 seconds
  102. }
  103. } else {
  104. tries = 0;
  105. }
  106. }
  107.  
  108. }).on('data',function(data){
  109. receivedData+=data;
  110. }).on('end',function(data){
  111. if(receivedData && receivedData.includes('{')){
  112. if(receivedData.includes('{')){
  113. console.log('includes some stuff so has to be json!');
  114. }
  115. console.log('json file! with content: '+receivedData);
  116.  
  117. applySettings(receivedData);
  118.  
  119.  
  120. }else{
  121. //console.log('callback final fniished!: '+receivedData);//+receivedData);
  122. updateInstallation(receivedData);
  123. }
  124. });
  125. }
  126.  
  127. function applySettings(jsonString){
  128. let loadedSettings = JSON.parse(jsonString);
  129. console.log('loaded settings auto update: '+loadedSettings.AutoUpdate)
  130. //if(loadedSettings.AutoUpdate != autoUpdate){
  131. autoUpdate = loadedSettings.AutoUpdate;
  132. let newSettings = {
  133. AutoUpdate : loadedSettings.AutoUpdate
  134. };
  135.  
  136. console.log('newsettings before: '+newSettings);
  137.  
  138. var finalSettings = JSON.stringify(newSettings);
  139. console.log('new settings after: '+finalSettings);
  140. serverCallback(newSettings.AutoUpdate);
  141. fs.writeFileSync('settings.json',finalSettings,function(err){
  142. if(err)throw err;
  143. });
  144. console.log('\n \ndone writing settings!!');
  145. //}else{
  146. // console.log('same settings no need to write!');
  147. //}
  148. // todo:: call server callback to remove the temp update from the db
  149.  
  150.  
  151. }
  152.  
  153. function serverCallback(autoUpdate){
  154. console.log('try to get: '+serverurl+'updateClientSettings/'+InstallationID+'/'+autoUpdate);
  155. request(serverurl+'updateClientSettings/'+InstallationID+'/'+autoUpdate, {
  156. 'auth': {
  157. user: 'thomas',
  158. pass: '123fat123'
  159. },
  160. encoding: 'binary'
  161. }, function(error, response, body){
  162. if(response){
  163. if(response.statusCode== 300){
  164. //console.log('response: '+body);
  165. console.log('client is happy!');
  166. }
  167. }
  168. });
  169. }
  170.  
  171.  
  172. function updateInstallation(content){
  173. var lines = content.split(',');//.replace(/\n$/, '');
  174. console.log('lines count: '+lines.length);
  175. var newLines = lines;
  176. for(var i = 0; i< lines.length; i++){
  177. newLines[i] = lines[i].trim().replace(',','');
  178. downloadFile(newLines[i]);
  179. }
  180. //console.log('files downloaded!'); // todo execute shell script to apply on fatplayer
  181. //running a command!
  182.  
  183. //console.log('try to check for files... wait maybe there still gonna come..');
  184.  
  185. setTimeout(startShellScript,20000);
  186. //console.log('timeouto ver');
  187.  
  188. }
  189.  
  190. function startShellScript(){
  191. console.log('start shell script');
  192. var cmd = '/Fatplayer/Downloads/launchUpdate.sh';//'startx /usr/bin/chromium-browser --no-sandbox --test-type --noerrdialog --kiosk --incognito --no-context-menu --disable-pinch --overscroll-history-navigation=0 --no-touch-pinch localhost';
  193. // var cmd = 'startx'; //Used for debugging --> launches desktop
  194. exec(cmd, function(error, stdout, stderr) {
  195. if(error){
  196. console.log(error);
  197. console.log("AAAHH DOET T NIET");
  198. } else {
  199. console.log("launching action!");
  200. }
  201. console.log(stdout);
  202. console.log(stderr);
  203. });
  204. }
  205.  
  206. function downloadFile(filePath){
  207. if(filePath=='') return;
  208. console.log('try to get: '+serverurl+'downloadFile/'+InstallationID+'/'+filePath);
  209. request(serverurl+'downloadFile/'+InstallationID+'/'+filePath, {
  210. 'auth': {
  211. user: 'thomas',
  212. pass: '123fat123'
  213. },
  214. encoding: 'binary'
  215. }, function(error, response, body){
  216. if(response){
  217. //if(response.statusCode== 300){
  218. //console.log('response: '+body);
  219. console.log('created file: '+filePath);
  220.  
  221. // if files already in fatplayerfiles.. make backup of older file..
  222.  
  223.  
  224.  
  225. writeFile(__dirname+"/Downloads/"+filePath,body,function(err){
  226. if(err){
  227. console.log(err);
  228. }
  229. });
  230. SaveFileStatusOnServer(filePath);
  231. //}
  232. }
  233. });
  234. }
  235.  
  236. function SaveFileStatusOnServer(filePath){
  237. console.log('try to get: '+serverurl+'updateClientFile/'+InstallationID+'/'+filePath);
  238. request(serverurl+'updateClientFile/'+InstallationID+'/'+filePath, {
  239. 'auth': {
  240. user: 'thomas',
  241. pass:'123fat123'
  242. },
  243. encoding: 'binary '
  244. }, function(error, response, body){
  245. if(response){
  246. if(response.statusCode== 300){
  247. //console.log('response: '+body);
  248. console.log('goddamn we got a response! launch shell script when got all responses...');
  249. }
  250. }
  251. });
  252. }
  253.  
  254. var mkdirp = require('mkdirp');
  255. var getDirName = require('path').dirname;
  256.  
  257. function writeFile(path, contents, cb) {
  258. mkdirp(getDirName(path), function (err) {
  259. if (err) return cb(err);
  260.  
  261. fs.writeFile(path, contents, 'binary',function(err){
  262. if(err){
  263. console.log('err '+err);
  264. }
  265. });
  266. });
  267. }
  268.  
  269. function readSettings(){
  270. let rawdata = fs.readFileSync('settings.json');
  271. let settings = JSON.parse(rawdata);
  272. autoUpdate = settings.AutoUpdate;
  273. console.log('settings auto update: '+autoUpdate);
  274. }
Add Comment
Please, Sign In to add comment