diff --git a/keyserver/src/push/crypto.js b/keyserver/src/push/crypto.js --- a/keyserver/src/push/crypto.js +++ b/keyserver/src/push/crypto.js @@ -11,6 +11,7 @@ PlainTextWebNotificationPayload, WebNotification, PlainTextWNSNotification, + PlainTextWNSNotificationPayload, WNSNotification, } from 'lib/types/notif-types.js'; import { toBase64URL } from 'lib/utils/base64.js'; @@ -289,22 +290,32 @@ cookieID: string, notification: PlainTextWebNotification, ): Promise<{ +notification: WebNotification, +encryptionOrder?: number }> { - const { id, ...payloadSansId } = notification; + const { id, keyserverID, ...payloadSansId } = notification; const { encryptionOrder, ...encryptionResult } = await encryptBasicPayload( cookieID, payloadSansId, ); - return { notification: { id, ...encryptionResult }, encryptionOrder }; + return { + notification: { id, keyserverID, ...encryptionResult }, + encryptionOrder, + }; } async function encryptWNSNotification( cookieID: string, notification: PlainTextWNSNotification, ): Promise<{ +notification: WNSNotification, +encryptionOrder?: number }> { + const { keyserverID, ...payloadSansKeyserverID } = notification; const { encryptionOrder, ...encryptionResult } = - await encryptBasicPayload(cookieID, notification); - return { notification: encryptionResult, encryptionOrder }; + await encryptBasicPayload( + cookieID, + payloadSansKeyserverID, + ); + return { + notification: { keyserverID, ...encryptionResult }, + encryptionOrder, + }; } function prepareEncryptedAPNsNotifications( diff --git a/keyserver/src/push/send.js b/keyserver/src/push/send.js --- a/keyserver/src/push/send.js +++ b/keyserver/src/push/send.js @@ -407,6 +407,7 @@ { notifTexts, threadID: threadInfo.id, + keyserverID, unreadCount, platformDetails, }, @@ -486,6 +487,7 @@ const targetedNotifications = await prepareWNSNotification(devices, { notifTexts, threadID: threadInfo.id, + keyserverID, unreadCount, platformDetails, }); @@ -977,9 +979,6 @@ ...notification.payload, ...rest, }; - if (platformDetails.platform !== 'macos') { - notification.payload.keyserverID = keyserverID; - } notification.badge = unreadCount; notification.threadId = threadID; @@ -987,6 +986,7 @@ notification.pushType = 'alert'; notification.payload.id = uniqueID; notification.payload.threadID = threadID; + notification.payload.keyserverID = keyserverID; if (platformDetails.codeVersion && platformDetails.codeVersion > 198) { notification.mutableContent = true; @@ -1246,12 +1246,14 @@ type WebNotifInputData = { +notifTexts: ResolvedNotifTexts, +threadID: string, + +keyserverID: string, +unreadCount: number, +platformDetails: PlatformDetails, }; const webNotifInputDataValidator = tShape({ notifTexts: resolvedNotifTextsValidator, threadID: tID, + keyserverID: t.String, unreadCount: t.Number, platformDetails: tPlatformDetails, }); @@ -1264,7 +1266,7 @@ webNotifInputDataValidator, inputData, ); - const { notifTexts, threadID, unreadCount } = convertedData; + const { notifTexts, threadID, unreadCount, keyserverID } = convertedData; const id = uuidv4(); const { merged, ...rest } = notifTexts; const notification = { @@ -1272,6 +1274,7 @@ unreadCount, id, threadID, + keyserverID, }; const shouldBeEncrypted = hasMinCodeVersion(convertedData.platformDetails, { @@ -1288,12 +1291,14 @@ type WNSNotifInputData = { +notifTexts: ResolvedNotifTexts, +threadID: string, + +keyserverID: string, +unreadCount: number, +platformDetails: PlatformDetails, }; const wnsNotifInputDataValidator = tShape({ notifTexts: resolvedNotifTextsValidator, threadID: tID, + keyserverID: t.String, unreadCount: t.Number, platformDetails: tPlatformDetails, }); @@ -1306,12 +1311,13 @@ wnsNotifInputDataValidator, inputData, ); - const { notifTexts, threadID, unreadCount } = convertedData; + const { notifTexts, threadID, unreadCount, keyserverID } = convertedData; const { merged, ...rest } = notifTexts; const notification = { ...rest, unreadCount, threadID, + keyserverID, }; if ( @@ -1780,6 +1786,7 @@ }); notification.badge = unreadCount; notification.pushType = 'alert'; + notification.payload.keyserverID = keyserverID; const preparePromise: Promise = (async () => { const shouldBeEncrypted = hasMinCodeVersion(viewer.platformDetails, { web: 47, diff --git a/lib/types/notif-types.js b/lib/types/notif-types.js --- a/lib/types/notif-types.js +++ b/lib/types/notif-types.js @@ -37,11 +37,13 @@ export type PlainTextWebNotification = { +id: string, + +keyserverID: string, ...PlainTextWebNotificationPayload, }; export type EncryptedWebNotification = { +id: string, + +keyserverID: string, +encryptedPayload: string, }; @@ -49,7 +51,7 @@ | PlainTextWebNotification | EncryptedWebNotification; -export type PlainTextWNSNotification = { +export type PlainTextWNSNotificationPayload = { +body: string, +prefix?: string, +title: string, @@ -58,7 +60,13 @@ +encryptionFailed?: '1', }; +export type PlainTextWNSNotification = { + +keyserverID: string, + ...PlainTextWNSNotificationPayload, +}; + export type EncryptedWNSNotification = { + +keyserverID: string, +encryptedPayload: string, };