summaryrefslogtreecommitdiff
path: root/modules/up_log/up_log.js
blob: 61d2af0f79c290c013d7085acd6faa421dfc137b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
const cmn = require("../$common.js");
const fs = require("fs");
const bodyParser = require("body-parser");

let moddir = null;

module.exports = function(app, io, _moddir) {
  moddir = _moddir;

  let config, accounts;
  try {
    accounts = require("./accounts.json");
  } catch (e) {
    console.error(e);
    return false;
  }

  app.post("/up_log/log", bodyParser.json(), cmn.authgen(accounts), (req, res) => {
    if (typeof req.body.machine != "string") {
      return res.sendStatus(400);
    }

    const machine = req.body.machine.replace(/[^a-zA-Z0-9._-]/g, "");

    fs.appendFileSync(moddir + "/log.txt", new Date().toISOString() + " machine=" + machine + "\n");

    res.status(200).end();
  });

  app.get("/up_log/log/:count", cmn.authgen(), (req, res) => {
    const reqln = +req.params.count;
    if (reqln < 0 || reqln % 1 != 0 || isNaN(reqln)) { res.sendStatus(400); return; }

    fs.readFile(moddir + "/log.txt", (err, data) => {
      if (err) { res.sendStatus(500); return; }

      let i = data.length - 1 - (data[data.length-1] == 10);
      let nln = 0;
      while (true) {
        if (data[i] == 10) { nln++; if (nln >= reqln) { i++; break; } }
        i--;
        if (i <= 0) { nln++; break; }
      }

      res.send(data.slice(i));
    });
  });

  app.get("/up_log", cmn.authgen(), (req, res) => {
    res.sendFile(moddir + "/index.html");
  });
};