Advertisement
Guest User

Untitled

a guest
May 28th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const express = require("express");
  2. var cookieParser = require('cookie-parser')
  3. var session = require('express-session')
  4. const app = express();
  5. var dateFormat = require('dateformat');
  6. var exec = require('child_process').exec;
  7.  
  8. const fs = require('fs-extra')
  9. var bcrypt = require('bcrypt');
  10. const saltRounds = 4;
  11.  
  12. var pagers = [];
  13. var eventLog = [];
  14.  
  15.  
  16. function checkAuth (req, res, next) {
  17.     var isUnprotected = false;
  18.     var unprotectEndpoints = ['','/','/auth', '/logout', '/poll']
  19.     for(var i = 0; i < unprotectEndpoints.length; i++){
  20.         if(unprotectEndpoints[i] == url.parse(req.url).pathname){
  21.             isUnprotected = true;
  22.             break;
  23.         }
  24.     }
  25.     if(!isUnprotected){
  26.         if ((!req.session || !req.session.authenticated)) {
  27.             res.send('unauthorised');
  28.             return;
  29.         }
  30.     }
  31.  
  32.  
  33.     next();
  34. }
  35.  
  36. app.use(express.static(__dirname + '/dist'));
  37. app.use(function(req, res, next) {
  38.   res.header("Access-Control-Allow-Origin", "*");
  39.   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  40.   next();
  41. });
  42. //app.use(cookieParser)
  43.   var sess = {
  44.   secret: 'keyboard cat',
  45.   cookie: {}
  46. }
  47. app.use(session(sess))
  48. app.use(checkAuth)
  49.  
  50. app.get('/secure', function(req,res){
  51.     res.send("ok!")
  52. })
  53.  
  54. app.get('/shutdown', function(req, res){
  55.     res.send("<meta name='viewport' content='width=device-width, initial-scale=1.0'><h3>Aguarde <span id='time'>38</span> segundos.</h3> <script>var timeremaining=38; window.setInterval(function(){timeremaining--; document.getElementById('time').innerHTML=timeremaining; if(timeremaining == 0){alert('Você já pode tirar da tomada com segurança!')}}, 1000)</script>")
  56.     setTimeout(function(){
  57.         exec('sudo shutdown now', function(callback){
  58.             console.log(callback);
  59.          });
  60.     }, 2000)
  61.  
  62. })
  63.  
  64. app.get('/auth', function (req, res) {
  65.  
  66.   var username = req.query.username;
  67.   var password = req.query.password;
  68.   console.log("1 " + res);
  69.   fs.readJson(__dirname + '/config.json', (err, config) => {
  70.     console.log("2 " + res);
  71.     if (err) {res.send("501")};
  72.     var usernamefound = false;
  73.     for(var i = 0; i < config.users.length; i++){
  74.       if(username == config.users[i].username){
  75.         usernamefound = true;
  76.         bcrypt.hash(password, 10, function(err, hash) {
  77.           bcrypt.compare(password, config.users[i].password, function(err, confirm) {
  78.               if(confirm){
  79.                 req.session.authenticated = true;
  80.                 res.send('ok');
  81.               }else{
  82.                 //req.flash('error', 'Username and password are incorrect');
  83.                 res.send('err');
  84.               }
  85.           });
  86.         });
  87.         break;
  88.       }
  89.     }
  90.     if(usernamefound == false){
  91.       res.send("err")
  92.     }
  93.     console.log(config.users)
  94.   })
  95. });
  96.  
  97.  
  98. app.get('/logout',function(req, res){
  99.     req.session.destroy(function(err) {
  100.             return res.send('done');
  101.      });
  102. })
  103.  
  104. app.get('/call',function(req, res){
  105.   var pagerID = req.query.id;
  106.   for(var i = 0; i < pagers.length; i ++){
  107.     if(pagers[i].pagerID == pagerID){
  108.       pagers[i].calling = true;
  109.       console.log("Calling pager id " + pagerID);
  110.       res.send("1");
  111.       return;
  112.     }
  113.   }
  114.   res.send("0");
  115. })
  116.  
  117. app.get('/stopcclientcall',function(req, res){
  118.   var pagerID = req.query.id;
  119.   for(var i = 0; i < pagers.length; i ++){
  120.     if(pagers[i].pagerID == pagerID){
  121.       pagers[i].clientCalling = false;
  122.       console.log("Stop client calling pager id " + pagerID);
  123.       res.send("1");
  124.       return;
  125.     }
  126.   }
  127.   res.send("0")
  128. })
  129.  
  130.  
  131. app.get('/stopcall',function(req, res){
  132.   var pagerID = req.query.id;
  133.   for(var i = 0; i < pagers.length; i ++){
  134.     if(pagers[i].pagerID == pagerID){
  135.       pagers[i].calling = false;
  136.       console.log("Stop calling pager id " + pagerID);
  137.       res.send("1");
  138.       return;
  139.     }
  140.   }
  141.   res.send("0")
  142. })
  143.  
  144. app.get('/managerPoll', function(req,res){
  145.   res.send(JSON.stringify(pagers))
  146. })
  147.  
  148. app.get('/givePager', function(req,res){
  149.   for(var i = 0; i < pagers.length; i ++){
  150.     if(pagers[i].given == false){
  151.       pagers[i].given = true;
  152.       res.send(pagers[i].pagerID);
  153.       return;
  154.     }
  155.   }
  156.   res.send("-1");
  157. })
  158. app.get('/removePager', function(req,res){
  159.   var pagerID = req.query.id;
  160.   for(var i = 0; i < pagers.length; i ++){
  161.     if(pagers[i].pagerID == pagerID){
  162.       pagers[i].given = false;
  163.       res.send("1");
  164.       return;
  165.     }
  166.   }
  167.   res.send("-1");
  168. })
  169.  
  170. app.get('/poll',function(req,res){
  171.   var registred = false;
  172.   const pagerID = req.query.id;
  173.   const clientCalling = req.query.calling;
  174.   const pBattery = req.query.battery;
  175.   for(var i = 0; i < pagers.length; i ++){
  176.     if(pagers[i].pagerID == pagerID){
  177.       //Pager registrado!
  178.       var response = "";
  179.       registred = true;
  180.       pagers[i].lastSeen =  new Date();
  181.       pagers[i].retries = 0;
  182.       pagers[i].battery= pBattery;
  183.       if(clientCalling == 1){
  184.         pagers[i].clientCalling = true;
  185.       }
  186.       console.log("Pager encontrado");
  187.       if(pagers[i].calling == true){
  188.         response = response + "1";
  189.       } else {
  190.         response = response + "0";
  191.       }
  192.       if(pagers[i].clientCalling == true){
  193.         response = response + "1";
  194.       } else {
  195.         response = response + "0";
  196.       }
  197.  
  198.       res.send(response);
  199.     }
  200.   }
  201.   if(registred == false){
  202.     console.log("Pager nao encontrado");
  203.     res.send("0")
  204.     var pager = {
  205.       pagerID: pagerID,
  206.       calling: false,
  207.       given: false,
  208.       lastSeen: new Date(),
  209.       retries: 0,
  210.       battery: pBattery
  211.     }
  212.     pagers.push(pager)
  213.   }
  214. })
  215.  
  216. app.get('/eventLog',function(req, res){
  217.   res.send(JSON.stringify(eventLog))
  218. })
  219.  
  220. app.get('/clearEventLog',function(req, res){
  221.   eventLog = [];
  222.   res.send(JSON.stringify(eventLog))
  223. })
  224.  
  225. app.get('/removeEventFromLog',function(req, res){
  226.   var eventCount = req.query.index;
  227.   var count = -1;
  228.   for(var i = eventLog.length; i>=0; i--){
  229.     count++;
  230.     if(eventCount == count){
  231.       eventLog.splice((i-1), 1);
  232.     }
  233.   }
  234.   res.send(JSON.stringify(eventLog))
  235. })
  236.  
  237. function logEvent(level, isPager, affectedPager, title, description){
  238.   var now = new Date();
  239.   var dateString = dateFormat(now, "hh:MM:ss")
  240.   var event = {
  241.     level: level,
  242.     isPager: isPager,
  243.     affectedPager: affectedPager,
  244.     title: title,
  245.     description: description,
  246.     time: dateString
  247.   }
  248.   eventLog.push(event);
  249. }
  250.  
  251. app.listen(3000, function(){
  252.   console.log("Servidor iniciado")
  253.   logEvent("success", true, -1, "Servidor iniciado", "Rodando na porta 3000.")
  254.  
  255.   setInterval(function(){
  256.     for(var i = 0; i < pagers.length; i++){
  257.       var now = new Date();
  258.       var difference = (now - pagers[i].lastSeen) / 1000;
  259.       if(difference > 10){
  260.         if(pagers[i].retries == 0){
  261.           console.log("We have not seen pager " + pagers[i].pagerID + " in a while...");
  262.           logEvent("warning", true, pagers[i].pagerID, "Pager " + pagers[i].pagerID + " não responde", "O sinal pode estar fraco.")
  263.         }
  264.         pagers[i].retries = pagers[i].retries + 1;
  265.         if(pagers[i].retries > 20){
  266.           console.log(pagers[i].pagerID + " is offline.");
  267.           logEvent("severe", true, pagers[i].pagerID, "Pager " + pagers[i].pagerID + " ficou offline!", "Possível falta de bateria.")
  268.           pagers.splice(i, 1);
  269.         }
  270.       }
  271.     }
  272.   }, 1000)
  273. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement