mirror of
https://github.com/Drop-OSS/drop.git
synced 2026-01-31 15:37:09 +01:00
fix: notifications and store styling
This commit is contained in:
@@ -12,10 +12,18 @@ export default defineEventHandler(async (h3) => {
|
||||
statusMessage: "Missing notification ID",
|
||||
});
|
||||
|
||||
const userIds = [userId];
|
||||
const hasSystemPerms = await aclManager.allowSystemACL(h3, [
|
||||
"notifications:delete",
|
||||
]);
|
||||
if (hasSystemPerms) {
|
||||
userIds.push("system");
|
||||
}
|
||||
|
||||
const notification = await prisma.notification.delete({
|
||||
where: {
|
||||
id: notificationId,
|
||||
userId,
|
||||
userId: { in: userIds },
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -12,10 +12,18 @@ export default defineEventHandler(async (h3) => {
|
||||
statusMessage: "Missing notification ID",
|
||||
});
|
||||
|
||||
const userIds = [userId];
|
||||
const hasSystemPerms = await aclManager.allowSystemACL(h3, [
|
||||
"notifications:read",
|
||||
]);
|
||||
if (hasSystemPerms) {
|
||||
userIds.push("system");
|
||||
}
|
||||
|
||||
const notification = await prisma.notification.findFirst({
|
||||
where: {
|
||||
id: notificationId,
|
||||
userId,
|
||||
userId: { in: userIds },
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -12,10 +12,18 @@ export default defineEventHandler(async (h3) => {
|
||||
statusMessage: "Missing notification ID",
|
||||
});
|
||||
|
||||
const userIds = [userId];
|
||||
const hasSystemPerms = await aclManager.allowSystemACL(h3, [
|
||||
"notifications:mark",
|
||||
]);
|
||||
if (hasSystemPerms) {
|
||||
userIds.push("system");
|
||||
}
|
||||
|
||||
const notification = await prisma.notification.update({
|
||||
where: {
|
||||
id: notificationId,
|
||||
userId,
|
||||
userId: { in: userIds },
|
||||
},
|
||||
data: {
|
||||
read: true,
|
||||
|
||||
@@ -5,9 +5,17 @@ export default defineEventHandler(async (h3) => {
|
||||
const userId = await aclManager.getUserIdACL(h3, ["notifications:read"]);
|
||||
if (!userId) throw createError({ statusCode: 403 });
|
||||
|
||||
const userIds = [userId];
|
||||
const hasSystemPerms = await aclManager.allowSystemACL(h3, [
|
||||
"notifications:mark",
|
||||
]);
|
||||
if (hasSystemPerms) {
|
||||
userIds.push("system");
|
||||
}
|
||||
|
||||
const notifications = await prisma.notification.findMany({
|
||||
where: {
|
||||
userId,
|
||||
userId: { in: userIds },
|
||||
},
|
||||
orderBy: {
|
||||
created: "desc", // Newest first
|
||||
|
||||
@@ -5,9 +5,17 @@ export default defineEventHandler(async (h3) => {
|
||||
const userId = await aclManager.getUserIdACL(h3, ["notifications:mark"]);
|
||||
if (!userId) throw createError({ statusCode: 403 });
|
||||
|
||||
const userIds = [userId];
|
||||
const hasSystemPerms = await aclManager.allowSystemACL(h3, [
|
||||
"notifications:mark",
|
||||
]);
|
||||
if(hasSystemPerms){
|
||||
userIds.push("system");
|
||||
}
|
||||
|
||||
await prisma.notification.updateMany({
|
||||
where: {
|
||||
userId,
|
||||
userId: { in: userIds },
|
||||
},
|
||||
data: {
|
||||
read: true,
|
||||
|
||||
@@ -9,20 +9,29 @@ const socketSessions: { [key: string]: string } = {};
|
||||
|
||||
export default defineWebSocketHandler({
|
||||
async open(peer) {
|
||||
const userId = await aclManager.getUserIdACL(
|
||||
{ headers: peer.request?.headers ?? new Headers() },
|
||||
["notifications:listen"]
|
||||
);
|
||||
const h3 = { headers: peer.request?.headers ?? new Headers() };
|
||||
const userId = await aclManager.getUserIdACL(h3, ["notifications:listen"]);
|
||||
if (!userId) {
|
||||
peer.send("unauthenticated");
|
||||
return;
|
||||
}
|
||||
|
||||
const userIds = [userId];
|
||||
|
||||
const hasSystemPerms = await aclManager.allowSystemACL(h3, [
|
||||
"notifications:listen",
|
||||
]);
|
||||
if (hasSystemPerms) {
|
||||
userIds.push("system");
|
||||
}
|
||||
|
||||
socketSessions[peer.id] = userId;
|
||||
|
||||
notificationSystem.listen(userId, peer.id, (notification) => {
|
||||
peer.send(JSON.stringify(notification));
|
||||
});
|
||||
for (const listenUserId of userIds) {
|
||||
notificationSystem.listen(listenUserId, peer.id, (notification) => {
|
||||
peer.send(JSON.stringify(notification));
|
||||
});
|
||||
}
|
||||
},
|
||||
async close(peer, details) {
|
||||
const userId = socketSessions[peer.id];
|
||||
@@ -32,6 +41,7 @@ export default defineWebSocketHandler({
|
||||
}
|
||||
|
||||
notificationSystem.unlisten(userId, peer.id);
|
||||
notificationSystem.unlisten("system", peer.id); // In case we were listening as 'system'
|
||||
delete socketSessions[peer.id];
|
||||
},
|
||||
});
|
||||
|
||||
13
server/h3.d.ts
vendored
13
server/h3.d.ts
vendored
@@ -1,14 +1 @@
|
||||
import { CertificateAuthority } from "./internal/clients/ca";
|
||||
import { MetadataHandler } from "./internal/metadata";
|
||||
import { ObjectBackend } from "./internal/objects";
|
||||
import { SessionHandler } from "./internal/session";
|
||||
|
||||
export * from "h3";
|
||||
declare module "h3" {
|
||||
interface H3EventContext {
|
||||
ca: CertificateAuthority;
|
||||
objects: ObjectBackend;
|
||||
}
|
||||
}
|
||||
|
||||
export type MinimumRequestObject = { headers: Headers };
|
||||
|
||||
@@ -41,6 +41,11 @@ export const systemACLDescriptions: ObjectFromList<typeof systemACLs> = {
|
||||
|
||||
"library:read": "Fetch a list of all games on this instance.",
|
||||
|
||||
"notifications:read": "Read system notifications.",
|
||||
"notifications:mark": "Mark system notifications as read.",
|
||||
"notifications:listen": "Connect to the system notification websocket.",
|
||||
"notifications:delete": "Delete system notifications.",
|
||||
|
||||
"game:read": "Fetch a given game on this instance.",
|
||||
"game:update": "Update a game on this instance.",
|
||||
"game:delete": "Delete a game on this instance.",
|
||||
|
||||
@@ -37,6 +37,11 @@ export const systemACLs = [
|
||||
"auth:simple:invitation:new",
|
||||
"auth:simple:invitation:delete",
|
||||
|
||||
"notifications:read",
|
||||
"notifications:mark",
|
||||
"notifications:listen",
|
||||
"notifications:delete",
|
||||
|
||||
"library:read",
|
||||
"game:read",
|
||||
"game:update",
|
||||
|
||||
@@ -14,6 +14,7 @@ import { recursivelyReaddir } from "../utils/recursivedirs";
|
||||
import taskHandler from "../tasks";
|
||||
import { parsePlatform } from "../utils/parseplatform";
|
||||
import droplet from "@drop/droplet";
|
||||
import notificationSystem from "../notifications";
|
||||
|
||||
class LibraryManager {
|
||||
private basePath: string;
|
||||
@@ -297,6 +298,15 @@ class LibraryManager {
|
||||
|
||||
log("Successfully created version!");
|
||||
|
||||
notificationSystem.systemPush({
|
||||
nonce: `version-create-${gameId}-${versionName}`,
|
||||
title: `'${game.mName}' ('${versionName}') finished importing.`,
|
||||
description: `Drop finished importing version ${versionName} for ${game.mName}.`,
|
||||
actions: [
|
||||
`View|/admin/library/${gameId}`
|
||||
]
|
||||
})
|
||||
|
||||
progress(100);
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user