Guest User

Untitled

a guest
May 14th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.03 KB | None | 0 0
  1. var express = require('express');
  2. var request = require('request');
  3.  
  4. const serverurl = "http://127.0.0.1:2000/";
  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 = '5cdac9ad6782e12884abe8cf';
  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.  
  112. parseUpdateFile(receivedData);
  113.  
  114. /*if(receivedData && receivedData.includes('{')){
  115. if(receivedData.includes('{')){
  116. console.log('includes some stuff so has to be json!');
  117. }
  118. console.log('json file! with content: '+receivedData);
  119.  
  120. applySettings(receivedData);
  121.  
  122.  
  123. }else{
  124. //console.log('callback final fniished!: '+receivedData);//+receivedData);
  125. updateInstallation(receivedData);
  126. }*/
  127.  
  128. });
  129. }
  130.  
  131. function parseUpdateFile(receivedData){
  132. let updatePackage = JSON.parse(receivedData);
  133.  
  134.  
  135. for(var i = 0; i< updatePackage.UpdateFiles.length; i++){
  136. downloadFile(updatePackage.UpdateFiles[i]);
  137. }
  138.  
  139. setTimeout(startShellScript,20000);
  140. }
  141.  
  142. function applySettings(jsonString){
  143. let loadedSettings = JSON.parse(jsonString);
  144. console.log('loaded settings auto update: '+loadedSettings.AutoUpdate)
  145. //if(loadedSettings.AutoUpdate != autoUpdate){
  146. autoUpdate = loadedSettings.AutoUpdate;
  147. let newSettings = {
  148. AutoUpdate : loadedSettings.AutoUpdate
  149. };
  150.  
  151. console.log('newsettings before: '+newSettings);
  152.  
  153. var finalSettings = JSON.stringify(newSettings);
  154. console.log('new settings after: '+finalSettings);
  155. serverCallback(newSettings.AutoUpdate);
  156. fs.writeFileSync('settings.json',finalSettings,function(err){
  157. if(err)throw err;
  158. });
  159. console.log('\n \ndone writing settings!!');
  160. //}else{
  161. // console.log('same settings no need to write!');
  162. //}
  163. // todo:: call server callback to remove the temp update from the db
  164.  
  165.  
  166. }
  167.  
  168. function serverCallback(autoUpdate){
  169. console.log('try to get: '+serverurl+'updateClientSettings/'+InstallationID+'/'+autoUpdate);
  170. request(serverurl+'updateClientSettings/'+InstallationID+'/'+autoUpdate, {
  171. 'auth': {
  172. user: 'thomas',
  173. pass: '123fat123'
  174. },
  175. encoding: 'binary'
  176. }, function(error, response, body){
  177. if(response){
  178. if(response.statusCode== 300){
  179. //console.log('response: '+body);
  180. console.log('client is happy!');
  181. }
  182. }
  183. });
  184. }
  185.  
  186.  
  187. function updateInstallation(content){
  188. var lines = content.split(',');//.replace(/\n$/, '');
  189. console.log('lines count: '+lines.length);
  190. var newLines = lines;
  191. for(var i = 0; i< lines.length; i++){
  192. newLines[i] = lines[i].trim().replace(',','');
  193. downloadFile(newLines[i]);
  194. }
  195. //console.log('files downloaded!'); // todo execute shell script to apply on fatplayer
  196. //running a command!
  197.  
  198. //console.log('try to check for files... wait maybe there still gonna come..');
  199.  
  200. setTimeout(startShellScript,20000);
  201. //console.log('timeouto ver');
  202.  
  203. }
  204.  
  205. function startShellScript(){
  206. console.log('start shell script');
  207. 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';
  208. // var cmd = 'startx'; //Used for debugging --> launches desktop
  209. exec(cmd, function(error, stdout, stderr) {
  210. if(error){
  211. console.log(error);
  212. console.log("AAAHH DOET T NIET");
  213. } else {
  214. console.log("launching action!");
  215. }
  216. console.log(stdout);
  217. console.log(stderr);
  218. });
  219. }
  220.  
  221. function downloadFile(filePath){
  222. if(filePath=='') return;
  223. console.log('try to get: '+serverurl+'downloadFile/'+InstallationID+'/'+filePath);
  224. request(serverurl+'downloadFile/'+InstallationID+'/'+filePath, {
  225. 'auth': {
  226. user: 'thomas',
  227. pass: '123fat123'
  228. },
  229. encoding: 'binary'
  230. }, function(error, response, body){
  231. if(response){
  232. //if(response.statusCode== 300){
  233. //console.log('response: '+body);
  234. console.log('created file: '+filePath);
  235.  
  236. // if files already in fatplayerfiles.. make backup of older file..
  237.  
  238.  
  239.  
  240. writeFile(__dirname+"/Downloads/"+filePath,body,function(err){
  241. if(err){
  242. console.log(err);
  243. }
  244. });
  245. SaveFileStatusOnServer(filePath);
  246. //}
  247. }
  248. });
  249. }
  250.  
  251. function SaveFileStatusOnServer(filePath){
  252. console.log('try to get: '+serverurl+'updateClientFile/'+InstallationID+'/'+filePath);
  253. request(serverurl+'updateClientFile/'+InstallationID+'/'+filePath, {
  254. 'auth': {
  255. user: 'thomas',
  256. pass:'123fat123'
  257. },
  258. encoding: 'binary '
  259. }, function(error, response, body){
  260. if(response){
  261. if(response.statusCode== 300){
  262. //console.log('response: '+body);
  263. console.log('goddamn we got a response! launch shell script when got all responses...');
  264. }
  265. }
  266. });
  267. }
  268.  
  269. var mkdirp = require('mkdirp');
  270. var getDirName = require('path').dirname;
  271.  
  272. function writeFile(path, contents, cb) {
  273. mkdirp(getDirName(path), function (err) {
  274. if (err) return cb(err);
  275.  
  276. fs.writeFile(path, contents, 'binary',function(err){
  277. if(err){
  278. console.log('err '+err);
  279. }
  280. });
  281. });
  282. }
  283.  
  284. function readSettings(){
  285. let rawdata = fs.readFileSync('settings.json');
  286. let settings = JSON.parse(rawdata);
  287. autoUpdate = settings.AutoUpdate;
  288. console.log('settings auto update: '+autoUpdate);
  289. }
Add Comment
Please, Sign In to add comment