From 113012ddc39784c2f79925b387d09f8dc7799013 Mon Sep 17 00:00:00 2001 From: Vasilii Mikhailovskii Date: Fri, 6 Dec 2024 08:02:28 +0200 Subject: [PATCH] change topic safe in message-delivery-method-web-push --- .../message-delivery-method-web-push/src/server.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/services/message-delivery-method-web-push/src/server.ts b/services/message-delivery-method-web-push/src/server.ts index 9658fb7..7e8eee2 100644 --- a/services/message-delivery-method-web-push/src/server.ts +++ b/services/message-delivery-method-web-push/src/server.ts @@ -1,4 +1,5 @@ import webpush, { WebPushError } from "web-push"; +import { createHash } from "crypto"; const heartbeat = Number(process.env.HEARTBEAT_INTERVAL ?? 30_000); @@ -21,6 +22,11 @@ function limitStringLengthWithEllipsis(str: string, maxLength: number): string { return str.length > maxLength ? str.substring(0, maxLength) + "…" : str; } +function getTopicSafe(str: string) { + const hash = createHash("sha256").update(str).digest("base64"); + return Buffer.from(hash, "hex").toString("base64").replace(/=+$/, ""); +} + const start = async () => { const checkedDatabases = await checkDatabases(); await setupVapidDetails(); @@ -78,9 +84,10 @@ const start = async () => { const qrDoc = await qrDb.get(`qr_code:${msgDoc.qr_code_uri}`); const timestamp = new Date(msgDoc.created_at).getTime(); - const topic = `cht_${msgDoc.qr_code_uri}_${msgDoc.chat}`; + const topicUnsafe = `cht_${msgDoc.qr_code_uri}_${msgDoc.chat}`; + const topic = getTopicSafe(topicUnsafe); - const tag = `${topic}_${(timestamp - new Date(qrDoc.created_at).getTime()).toString(36)}`; + const tag = `${topicUnsafe}_${(timestamp - new Date(qrDoc.created_at).getTime()).toString(36)}`; if (msgDoc.from === "guest") { console.log("FROM GUEST");