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 @@ -35,7 +35,8 @@ }> { invariant( !notification.collapseId, - 'Collapsible notifications encryption currently not implemented', + `Collapse ID can't be directly stored in apn.Notification object due ` + + `to security reasons. Please put it in payload property`, ); const encryptedNotification = new apn.Notification(); 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 @@ -913,7 +913,7 @@ platformDetails, } = convertedData; - const canDecryptNonCollapsibleTextNotifs = + const canDecryptNonCollapsibleTextIOSNotifs = platformDetails.codeVersion && platformDetails.codeVersion > 222; const isNonCollapsibleTextNotification = @@ -921,13 +921,14 @@ newRawMessageInfo => newRawMessageInfo.type === messageTypes.TEXT, ) && !collapseKey; - const canDecryptAllNotifTypes = + const canDecryptAllIOSNotifs = platformDetails.codeVersion && platformDetails.codeVersion >= 267; - const canDecryptIOSNotifs = + const canDecryptIOSNotif = platformDetails.platform === 'ios' && - (canDecryptAllNotifTypes || - (isNonCollapsibleTextNotification && canDecryptNonCollapsibleTextNotifs)); + (canDecryptAllIOSNotifs || + (isNonCollapsibleTextNotification && + canDecryptNonCollapsibleTextIOSNotifs)); const isStaffOrDev = isStaff(userID) || isDev; const canDecryptMacOSNotifs = @@ -938,7 +939,7 @@ majorDesktop: 9, }); - const shouldBeEncrypted = canDecryptIOSNotifs || canDecryptMacOSNotifs; + const shouldBeEncrypted = canDecryptIOSNotif || canDecryptMacOSNotifs; const uniqueID = uuidv4(); const notification = new apn.Notification(); @@ -967,7 +968,7 @@ if (platformDetails.codeVersion && platformDetails.codeVersion > 198) { notification.mutableContent = true; } - if (collapseKey && canDecryptAllNotifTypes) { + if (collapseKey && (canDecryptAllIOSNotifs || canDecryptMacOSNotifs)) { notification.payload.collapseID = collapseKey; } else if (collapseKey) { notification.collapseId = collapseKey;