Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/push/crypto.js
Show First 20 Lines • Show All 195 Lines • ▼ Show 20 Lines | try { | ||||
}; | }; | ||||
} | } | ||||
} | } | ||||
async function encryptAndroidNotification( | async function encryptAndroidNotification( | ||||
cookieID: string, | cookieID: string, | ||||
notification: AndroidNotification, | notification: AndroidNotification, | ||||
notificationSizeValidator?: AndroidNotification => boolean, | notificationSizeValidator?: AndroidNotification => boolean, | ||||
blobHolder?: ?string, | |||||
): Promise<{ | ): Promise<{ | ||||
+notification: AndroidNotification, | +notification: AndroidNotification, | ||||
+payloadSizeExceeded: boolean, | +payloadSizeExceeded: boolean, | ||||
+encryptionOrder?: number, | +encryptionOrder?: number, | ||||
}> { | }> { | ||||
const { id, keyserverID, badgeOnly, ...unencryptedPayload } = | const { id, keyserverID, badgeOnly, ...rest } = notification.data; | ||||
notification.data; | |||||
let unencryptedData = { badgeOnly, keyserverID }; | let unencryptedData = { badgeOnly, keyserverID }; | ||||
if (id) { | if (id) { | ||||
unencryptedData = { ...unencryptedData, id }; | unencryptedData = { ...unencryptedData, id }; | ||||
} | } | ||||
let unencryptedPayload = rest; | |||||
if (blobHolder) { | |||||
unencryptedPayload = { ...unencryptedPayload, blobHolder }; | |||||
} | |||||
let payloadSizeValidator; | let payloadSizeValidator; | ||||
if (notificationSizeValidator) { | if (notificationSizeValidator) { | ||||
payloadSizeValidator = ( | payloadSizeValidator = ( | ||||
payload: AndroidNotificationPayload | { +encryptedPayload: string }, | payload: AndroidNotificationPayload | { +encryptedPayload: string }, | ||||
) => { | ) => { | ||||
return notificationSizeValidator({ | return notificationSizeValidator({ | ||||
data: { ...unencryptedData, ...payload }, | data: { ...unencryptedData, ...payload }, | ||||
}); | }); | ||||
▲ Show 20 Lines • Show All 163 Lines • ▼ Show 20 Lines | $ReadOnlyArray<{ | ||||
+cookieID: string, | +cookieID: string, | ||||
+deviceToken: string, | +deviceToken: string, | ||||
+notification: AndroidNotification, | +notification: AndroidNotification, | ||||
+payloadSizeExceeded: boolean, | +payloadSizeExceeded: boolean, | ||||
+encryptionOrder?: number, | +encryptionOrder?: number, | ||||
}>, | }>, | ||||
> { | > { | ||||
const notificationPromises = devices.map( | const notificationPromises = devices.map( | ||||
async ({ deviceToken, cookieID }) => { | async ({ deviceToken, cookieID, blobHolder }) => { | ||||
const notif = await encryptAndroidNotification( | const notif = await encryptAndroidNotification( | ||||
cookieID, | cookieID, | ||||
notification, | notification, | ||||
notificationSizeValidator, | notificationSizeValidator, | ||||
blobHolder, | |||||
); | ); | ||||
return { deviceToken, cookieID, ...notif }; | return { deviceToken, cookieID, ...notif }; | ||||
}, | }, | ||||
); | ); | ||||
return Promise.all(notificationPromises); | return Promise.all(notificationPromises); | ||||
} | } | ||||
function prepareEncryptedAndroidNotificationRescinds( | function prepareEncryptedAndroidNotificationRescinds( | ||||
▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines |