Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require("express");
- var cookieParser = require('cookie-parser')
- var session = require('express-session')
- const app = express();
- var dateFormat = require('dateformat');
- var exec = require('child_process').exec;
- const fs = require('fs-extra')
- var bcrypt = require('bcrypt');
- const saltRounds = 4;
- var pagers = [];
- var eventLog = [];
- function checkAuth (req, res, next) {
- var isUnprotected = false;
- var unprotectEndpoints = ['','/','/auth', '/logout', '/poll']
- for(var i = 0; i < unprotectEndpoints.length; i++){
- if(unprotectEndpoints[i] == url.parse(req.url).pathname){
- isUnprotected = true;
- break;
- }
- }
- if(!isUnprotected){
- if ((!req.session || !req.session.authenticated)) {
- res.send('unauthorised');
- return;
- }
- }
- next();
- }
- app.use(express.static(__dirname + '/dist'));
- app.use(function(req, res, next) {
- res.header("Access-Control-Allow-Origin", "*");
- res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
- next();
- });
- //app.use(cookieParser)
- var sess = {
- secret: 'keyboard cat',
- cookie: {}
- }
- app.use(session(sess))
- app.use(checkAuth)
- app.get('/secure', function(req,res){
- res.send("ok!")
- })
- app.get('/shutdown', function(req, res){
- 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>")
- setTimeout(function(){
- exec('sudo shutdown now', function(callback){
- console.log(callback);
- });
- }, 2000)
- })
- app.get('/auth', function (req, res) {
- var username = req.query.username;
- var password = req.query.password;
- console.log("1 " + res);
- fs.readJson(__dirname + '/config.json', (err, config) => {
- console.log("2 " + res);
- if (err) {res.send("501")};
- var usernamefound = false;
- for(var i = 0; i < config.users.length; i++){
- if(username == config.users[i].username){
- usernamefound = true;
- bcrypt.hash(password, 10, function(err, hash) {
- bcrypt.compare(password, config.users[i].password, function(err, confirm) {
- if(confirm){
- req.session.authenticated = true;
- res.send('ok');
- }else{
- //req.flash('error', 'Username and password are incorrect');
- res.send('err');
- }
- });
- });
- break;
- }
- }
- if(usernamefound == false){
- res.send("err")
- }
- console.log(config.users)
- })
- });
- app.get('/logout',function(req, res){
- req.session.destroy(function(err) {
- return res.send('done');
- });
- })
- app.get('/call',function(req, res){
- var pagerID = req.query.id;
- for(var i = 0; i < pagers.length; i ++){
- if(pagers[i].pagerID == pagerID){
- pagers[i].calling = true;
- console.log("Calling pager id " + pagerID);
- res.send("1");
- return;
- }
- }
- res.send("0");
- })
- app.get('/stopcclientcall',function(req, res){
- var pagerID = req.query.id;
- for(var i = 0; i < pagers.length; i ++){
- if(pagers[i].pagerID == pagerID){
- pagers[i].clientCalling = false;
- console.log("Stop client calling pager id " + pagerID);
- res.send("1");
- return;
- }
- }
- res.send("0")
- })
- app.get('/stopcall',function(req, res){
- var pagerID = req.query.id;
- for(var i = 0; i < pagers.length; i ++){
- if(pagers[i].pagerID == pagerID){
- pagers[i].calling = false;
- console.log("Stop calling pager id " + pagerID);
- res.send("1");
- return;
- }
- }
- res.send("0")
- })
- app.get('/managerPoll', function(req,res){
- res.send(JSON.stringify(pagers))
- })
- app.get('/givePager', function(req,res){
- for(var i = 0; i < pagers.length; i ++){
- if(pagers[i].given == false){
- pagers[i].given = true;
- res.send(pagers[i].pagerID);
- return;
- }
- }
- res.send("-1");
- })
- app.get('/removePager', function(req,res){
- var pagerID = req.query.id;
- for(var i = 0; i < pagers.length; i ++){
- if(pagers[i].pagerID == pagerID){
- pagers[i].given = false;
- res.send("1");
- return;
- }
- }
- res.send("-1");
- })
- app.get('/poll',function(req,res){
- var registred = false;
- const pagerID = req.query.id;
- const clientCalling = req.query.calling;
- const pBattery = req.query.battery;
- for(var i = 0; i < pagers.length; i ++){
- if(pagers[i].pagerID == pagerID){
- //Pager registrado!
- var response = "";
- registred = true;
- pagers[i].lastSeen = new Date();
- pagers[i].retries = 0;
- pagers[i].battery= pBattery;
- if(clientCalling == 1){
- pagers[i].clientCalling = true;
- }
- console.log("Pager encontrado");
- if(pagers[i].calling == true){
- response = response + "1";
- } else {
- response = response + "0";
- }
- if(pagers[i].clientCalling == true){
- response = response + "1";
- } else {
- response = response + "0";
- }
- res.send(response);
- }
- }
- if(registred == false){
- console.log("Pager nao encontrado");
- res.send("0")
- var pager = {
- pagerID: pagerID,
- calling: false,
- given: false,
- lastSeen: new Date(),
- retries: 0,
- battery: pBattery
- }
- pagers.push(pager)
- }
- })
- app.get('/eventLog',function(req, res){
- res.send(JSON.stringify(eventLog))
- })
- app.get('/clearEventLog',function(req, res){
- eventLog = [];
- res.send(JSON.stringify(eventLog))
- })
- app.get('/removeEventFromLog',function(req, res){
- var eventCount = req.query.index;
- var count = -1;
- for(var i = eventLog.length; i>=0; i--){
- count++;
- if(eventCount == count){
- eventLog.splice((i-1), 1);
- }
- }
- res.send(JSON.stringify(eventLog))
- })
- function logEvent(level, isPager, affectedPager, title, description){
- var now = new Date();
- var dateString = dateFormat(now, "hh:MM:ss")
- var event = {
- level: level,
- isPager: isPager,
- affectedPager: affectedPager,
- title: title,
- description: description,
- time: dateString
- }
- eventLog.push(event);
- }
- app.listen(3000, function(){
- console.log("Servidor iniciado")
- logEvent("success", true, -1, "Servidor iniciado", "Rodando na porta 3000.")
- setInterval(function(){
- for(var i = 0; i < pagers.length; i++){
- var now = new Date();
- var difference = (now - pagers[i].lastSeen) / 1000;
- if(difference > 10){
- if(pagers[i].retries == 0){
- console.log("We have not seen pager " + pagers[i].pagerID + " in a while...");
- logEvent("warning", true, pagers[i].pagerID, "Pager " + pagers[i].pagerID + " não responde", "O sinal pode estar fraco.")
- }
- pagers[i].retries = pagers[i].retries + 1;
- if(pagers[i].retries > 20){
- console.log(pagers[i].pagerID + " is offline.");
- logEvent("severe", true, pagers[i].pagerID, "Pager " + pagers[i].pagerID + " ficou offline!", "Possível falta de bateria.")
- pagers.splice(i, 1);
- }
- }
- }
- }, 1000)
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement