1
0
mirror of https://api.glitch.com/git/presence-button synced 2024-12-05 02:17:29 +00:00

🐸👀 Checkpoint

./server.js:933874/21736
This commit is contained in:
Glitch (presence-button) 2020-06-10 23:40:05 +00:00
parent 77a59a8f23
commit 8799fd4ed4

View File

@ -4,20 +4,25 @@ const request = require("request");
var fuzIsOpen = false;
var lastSeen = new Date("1970-01-01");
var lastNofified = new Date("1970-01-01");
var lastOpened = new Date("1970-01-01");
var lastClosed = new Date("1970-01-01");
const fs = require("fs");
const path = require("path");
const db = "./.data/data.json";
const defaultClosingTimeout = 5 * 60 * 1000; // 5 mins
try {
fs.mkdirSync(path.dirname(db), { recursive: true });
} catch (err) {}
try {
var content = fs.readFileSync(db, "utf8");
fuzIsOpen = JSON.parse(content)["fuzIsOpen"] || fuzIsOpen;
lastSeen = new Date(JSON.parse(content)["lastSeen"] || lastSeen);
lastNofified = new Date(JSON.parse(content)["lastNofified"] || lastNofified);
lastOpened = new Date(JSON.parse(content)["lastOpened"] || lastOpened);
lastClosed = new Date(JSON.parse(content)["lastClosed"] || lastClosed);
} catch (err) {}
} catch (err) {console.log("err", err)}
app.use(express.static("public"));
app.enable("trust proxy"); // needed for HTTP -> HTTPS redirect and successful test against req.secure
@ -70,6 +75,7 @@ app.get("/api", (req, res) => {
{
fuzIsOpen,
lastSeen,
lastOpened,
lastClosed,
processUptime: formatSeconds(process.uptime())
},
@ -97,55 +103,68 @@ app.get("/status", (req, res) => {
login !== auth.login ||
password !== auth.password
) {
console.log(login, password);
res.set("WWW-Authenticate", 'Basic realm="Authentication required"');
return res.status(401).send("Authentication required.");
}
fuzIsOpen = req.query.fuzisopen === "1";
lastSeen = new Date();
try {
fs.writeFileSync(db, JSON.stringify({ fuzIsOpen, lastSeen, lastClosed }));
fs.writeFileSync(db, JSON.stringify({ fuzIsOpen, lastSeen, lastOpened, lastClosed }));
} catch (err) {}
res.sendStatus(200);
});
const listener = app.listen(process.env.PORT, function() {
console.log("Your app is listening on port " + listener.address().port);
});
request.post(
if (
fuzIsOpen &&
lastOpened < lastClosed
) {
// the Fuz is newly opened, notify on matrix and write file to survive reboot
request.put(
{
url:
"https://" +
process.env.MATRIXUSERNAME.substring(
process.env.MATRIXUSERNAME.indexOf(":") + 1
) +
"/_matrix/client/r0/login",
"/_matrix/client/r0/rooms/" +
process.env.MATRIXROOM +
"/send/m.room.message/" +
new Date().getTime() +
"?access_token=" +
accessToken +
"&limit=1",
body: JSON.stringify({
type: "m.login.password",
user: process.env.MATRIXUSERNAME.substring(
0,
process.env.MATRIXUSERNAME.indexOf(":")
),
password: process.env.MATRIXPASSWORD,
identifier: {
type: "m.id.user",
user: process.env.MATRIXUSERNAME.substring(
0,
process.env.MATRIXUSERNAME.indexOf(":")
)
}
msgtype: "m.text",
body:
process.env.MATRIXOPENINGMESSAGE
}),
headers: {
"Content-Type": "application/json"
}
},
function(error, response, body) {
console.log(body);
const accessToken = JSON.parse(body)["access_token"];
function(error, response, body2) {
if (!error) {
try {
lastOpened = new Date();
fs.writeFileSync(
db,
JSON.stringify({ fuzIsOpen, lastSeen, lastOpened, lastClosed })
);
} catch (err) {}
}
console.log(body2);
}
);
}
});
const listener = app.listen(process.env.PORT, function() {
console.log("Your app is listening on port " + listener.address().port);
});
const accessToken = process.env.MATRIXACCESSTOKEN;
const loop = () => {
console.log("loop", lastClosed);
console.log("loop", JSON.stringify({ fuzIsOpen, lastSeen, lastOpened, lastClosed }));
if (
//fuzIsOpen &&
lastSeen < new Date() - defaultClosingTimeout &&
@ -170,7 +189,7 @@ request.post(
body: JSON.stringify({
msgtype: "m.text",
body:
process.env.MATRIXMESSAGE +
process.env.MATRIXCLOSINGMESSAGE +
(fuzIsOpen ? "" : " (crash, oubli, passage bref…)")
}),
headers: {
@ -183,7 +202,7 @@ request.post(
lastClosed = new Date();
fs.writeFileSync(
db,
JSON.stringify({ fuzIsOpen, lastSeen, lastClosed })
JSON.stringify({ fuzIsOpen, lastSeen, lastOpened, lastClosed })
);
} catch (err) {}
}
@ -196,8 +215,6 @@ request.post(
}
};
setTimeout(loop, 1 * 60 * 1000); // give some time for presence button to show up (1 min)
}
);
const formatSeconds = function (seconds) { // https://stackoverflow.com/a/13368349
var seconds = Math.floor(seconds),