Merge branch 'feat-send-user-notice' into 'main'

Implement user notices

Closes #53

See merge request sc07/canvas!10
This commit is contained in:
Grant 2024-07-13 01:30:54 +00:00
commit 5b0a064261
1 changed files with 89 additions and 0 deletions

View File

@ -590,6 +590,95 @@ app.delete("/user/:sub/ban", async (req, res) => {
res.json({ success: true, auditLog });
});
/**
* Send notice to every connected socket
*
* @body title string
* @body body string?
*/
app.post("/user/all/notice", async (req, res) => {
let title: string = req.body.title;
if (typeof req.body.title !== "string") {
return res
.status(400)
.json({ success: false, error: "Title is not a string" });
}
if (
typeof req.body.body !== "undefined" &&
typeof req.body.body !== "string"
) {
return res
.status(400)
.json({ success: false, error: "Body is set but is not a string" });
}
const sockets = await SocketServer.instance.io.fetchSockets();
for (const socket of sockets) {
socket.emit("alert", {
is: "modal",
action: "moderation",
dismissable: true,
title,
body: req.body.body,
});
}
res.json({ success: true });
});
/**
* Send notice to user
*
* @param :sub User id
* @body title string
* @body body string?
*/
app.post("/user/:sub/notice", async (req, res) => {
let user: User;
try {
user = await User.fromSub(req.params.sub);
} catch (e) {
if (e instanceof UserNotFound) {
res.status(404).json({ success: false, error: "User not found" });
} else {
Logger.error(`/user/${req.params.sub}/ban Error ` + (e as any)?.message);
res.status(500).json({ success: false, error: "Internal error" });
}
return;
}
let title: string = req.body.title;
if (typeof req.body.title !== "string") {
return res
.status(400)
.json({ success: false, error: "Title is not a string" });
}
if (
typeof req.body.body !== "undefined" &&
typeof req.body.body !== "string"
) {
return res
.status(400)
.json({ success: false, error: "Body is set but is not a string" });
}
user.notify({
is: "modal",
action: "moderation",
dismissable: true,
title,
body: req.body.body,
});
res.json({ success: true });
});
app.get("/instance/:domain/ban", async (req, res) => {
// get ban information