diff --git a/extensions/nextcloud-talk/src/send.ts b/extensions/nextcloud-talk/src/send.ts index 2ac71f461..365526c40 100644 --- a/extensions/nextcloud-talk/src/send.ts +++ b/extensions/nextcloud-talk/src/send.ts @@ -93,8 +93,12 @@ export async function sendMessageNextcloudTalk( } const bodyStr = JSON.stringify(body); + // Nextcloud Talk verifies signature against the extracted message text, + // not the full JSON body. See ChecksumVerificationService.php: + // hash_hmac('sha256', $random . $data, $secret) + // where $data is the "message" parameter, not the raw request body. const { random, signature } = generateNextcloudTalkSignature({ - body: bodyStr, + body: message, secret, }); @@ -183,8 +187,9 @@ export async function sendReactionNextcloudTalk( const normalizedToken = normalizeRoomToken(roomToken); const body = JSON.stringify({ reaction }); + // Sign only the reaction string, not the full JSON body const { random, signature } = generateNextcloudTalkSignature({ - body, + body: reaction, secret, });