generated from nhcarrigan/template
feat: health check
This commit is contained in:
parent
085c192676
commit
a35d4ffe00
@ -20,68 +20,7 @@ export const serve = async (bot: ExtendedClient) => {
|
||||
app.use(express.json());
|
||||
|
||||
app.get("/", (_req, res) => {
|
||||
res.status(302).redirect("https://art4palestine.org/");
|
||||
});
|
||||
|
||||
/**
|
||||
* Trello expects a 200 head status.
|
||||
*/
|
||||
app.head("/trello", (_req, res) => {
|
||||
res.status(200).send("OK~");
|
||||
});
|
||||
|
||||
app.post("/trello", async (req, res) => {
|
||||
const secret = process.env.TRELLO_SECRET;
|
||||
if (!secret) {
|
||||
res.status(500).send("Missing trello key~!");
|
||||
await bot.debug.send({
|
||||
content:
|
||||
"Received a request to the trello endpoint, but key is not configured.",
|
||||
});
|
||||
return;
|
||||
}
|
||||
const headerHash = req.headers["x-trello-webhook"];
|
||||
const getDigest = (s: string) =>
|
||||
createHmac("sha1", secret).update(s).digest("base64");
|
||||
const content = JSON.stringify(req.body) + process.env.TRELLO_HOOK_CALLBACK;
|
||||
const contentHash = getDigest(content);
|
||||
if (headerHash !== contentHash) {
|
||||
res.status(403).send("Invalid hash!");
|
||||
await bot.debug.send({
|
||||
content:
|
||||
"Received a request to the trello endpoint, but hash was incorrect.",
|
||||
});
|
||||
return;
|
||||
}
|
||||
res.status(200).send("OK~!");
|
||||
const oldList = req.body.action?.data?.old?.idList;
|
||||
const newList = req.body.action?.data?.card?.idList;
|
||||
const cardId = req.body.action?.data?.card?.id;
|
||||
if (
|
||||
!oldList ||
|
||||
!newList ||
|
||||
!cardId ||
|
||||
oldList === newList ||
|
||||
newList !== Trello.readyToSendListId
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const cardRes = await fetch(
|
||||
`https://api.trello.com/1/cards/${cardId}?key=${process.env.TRELLO_KEY}&token=${process.env.TRELLO_TOKEN}`
|
||||
);
|
||||
const card = (await cardRes.json()) as {
|
||||
id: string;
|
||||
url: string;
|
||||
name: string;
|
||||
desc: string;
|
||||
};
|
||||
const contact = card.desc
|
||||
.split(/\n+/g)
|
||||
.find((s) => s.startsWith("Please contact them"));
|
||||
await bot.dist.send({
|
||||
content: `${card.name} | [Trello Card](<${card.url}>) | ${contact}\nYou can ignore this ID it's just for the bot: ${card.id}`,
|
||||
});
|
||||
res.status(200).send("Health check good!");
|
||||
});
|
||||
|
||||
const httpServer = http.createServer(app);
|
||||
|
Loading…
x
Reference in New Issue
Block a user