AnoPaper/index.js

71 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-04-02 10:53:32 +03:00
const sha3 = require("js-sha3").sha3_512;
const express = require("express");
const bodyParser = require("body-parser");
const isValidNote = require("./note_validator");
const fs = require("fs");
const path = require("path");
const cryptojs = require("crypto-js");
2023-04-03 14:07:47 +03:00
const { Server } = require("socket.io");
2023-04-02 10:53:32 +03:00
require("dotenv").config();
2023-04-03 14:07:47 +03:00
const app = express(),
server = require("http").createServer(app),
io = new Server().listen(server);
2023-04-02 10:53:32 +03:00
2023-04-02 11:14:52 +03:00
if (!fs.existsSync("./notes")) {
fs.mkdirSync("./notes");
}
2023-04-02 10:53:32 +03:00
app.use(bodyParser.json());
app.post("/publish", function (req, res) {
if (isValidNote(req.body)) {
let hash = sha3(JSON.stringify(req.body));
req.body.time = Date.now();
2023-04-03 17:03:01 +03:00
req.body.pub = true;
req.body.pubTime = req.body.time;
2023-04-02 10:53:32 +03:00
try {
fs.writeFileSync(
`./notes/${hash}.json`,
cryptojs.AES.encrypt(
JSON.stringify(req.body),
process.env.KEY
).toString()
);
res.send({ id: hash });
} catch {
res.status(500).send("Failed to write file");
}
} else {
res.status(403).send("Invalid body!");
}
});
app.get("/get-note/:delorno/:id", function (req, res) {
let path = `./notes/${req.params.id}.json`;
try {
let data = JSON.parse(
cryptojs.AES.decrypt(
fs.readFileSync(path, "utf-8"),
process.env.KEY
).toString(cryptojs.enc.Utf8)
);
res.send(data);
if (req.params.delorno === "del") fs.unlinkSync(path);
} catch {
res.status(404).send("There is no such note");
}
});
app.use(express.static("dist"));
app.get("*", function (req, res) {
res.sendFile(path.join(__dirname, "./dist", "index.html"));
});
2023-04-03 14:07:47 +03:00
server.listen(process.env.PORT, () => {
2023-04-02 10:53:32 +03:00
console.log(`Listening on port ${process.env.PORT}`);
});