Groups: Continue processing group if endorsements are invalid

Co-authored-by: Scott Nonnenberg <scott@signal.org>
This commit is contained in:
automated-signal 2024-08-21 02:52:53 -05:00 committed by GitHub
parent 2ba9afb7cf
commit 7027bca293
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1593,16 +1593,24 @@ export async function modifyGroupV2({
// If we are no longer a member - endorsement won't be present // If we are no longer a member - endorsement won't be present
if (Bytes.isNotEmpty(groupSendEndorsementResponse)) { if (Bytes.isNotEmpty(groupSendEndorsementResponse)) {
log.info(`modifyGroupV2/${logId}: Saving group endorsements`); try {
log.info(`modifyGroupV2/${logId}: Saving group endorsements`);
const groupEndorsementData = decodeGroupSendEndorsementResponse({ const groupEndorsementData = decodeGroupSendEndorsementResponse({
groupId, groupId,
groupSendEndorsementResponse, groupSendEndorsementResponse,
groupSecretParamsBase64: secretParams, groupSecretParamsBase64: secretParams,
groupMembersV2: membersV2, groupMembersV2: membersV2,
}); });
await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData); await DataWriter.replaceAllEndorsementsForGroup(
groupEndorsementData
);
} catch (error) {
log.warn(
`modifyGroupV2/${logId}: Problem saving group endorsements ${Errors.toLogFormat(error)}`
);
}
} }
}); });
@ -1912,14 +1920,20 @@ export async function createGroupV2(
'missing groupSendEndorsementResponse' 'missing groupSendEndorsementResponse'
); );
const groupEndorsementData = decodeGroupSendEndorsementResponse({ try {
groupId, const groupEndorsementData = decodeGroupSendEndorsementResponse({
groupSendEndorsementResponse, groupId,
groupSecretParamsBase64: secretParams, groupSendEndorsementResponse,
groupMembersV2: membersV2, groupSecretParamsBase64: secretParams,
}); groupMembersV2: membersV2,
});
await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData); await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData);
} catch (error) {
log.warn(
`createGroupV2/${logId}: Problem saving group endorsements ${Errors.toLogFormat(error)}`
);
}
} catch (error) { } catch (error) {
if (!(error instanceof HTTPError)) { if (!(error instanceof HTTPError)) {
throw error; throw error;
@ -2430,7 +2444,7 @@ export async function initiateMigrationToGroupV2(
let groupSendEndorsementResponse: Uint8Array | null | undefined; let groupSendEndorsementResponse: Uint8Array | null | undefined;
try { try {
const groupResponse = await makeRequestWithCredentials({ const groupResponse = await makeRequestWithCredentials({
logId: `createGroup/${logId}`, logId: `initiateMigrationToGroupV2/${logId}`,
publicParams, publicParams,
secretParams, secretParams,
request: (sender, options) => sender.createGroup(groupProto, options), request: (sender, options) => sender.createGroup(groupProto, options),
@ -2485,14 +2499,20 @@ export async function initiateMigrationToGroupV2(
'missing groupSendEndorsementResponse' 'missing groupSendEndorsementResponse'
); );
const groupEndorsementData = decodeGroupSendEndorsementResponse({ try {
groupId, const groupEndorsementData = decodeGroupSendEndorsementResponse({
groupSendEndorsementResponse, groupId,
groupSecretParamsBase64: secretParams, groupSendEndorsementResponse,
groupMembersV2: membersV2, groupSecretParamsBase64: secretParams,
}); groupMembersV2: membersV2,
});
await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData); await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData);
} catch (error) {
log.warn(
`initiateMigrationToGroupV2/${logId}: Problem saving group endorsements ${Errors.toLogFormat(error)}`
);
}
}); });
} catch (error) { } catch (error) {
const logId = conversation.idForLogging(); const logId = conversation.idForLogging();
@ -2969,17 +2989,23 @@ export async function respondToGroupV2Migration({
}); });
if (Bytes.isNotEmpty(groupSendEndorsementResponse)) { if (Bytes.isNotEmpty(groupSendEndorsementResponse)) {
const { membersV2 } = conversation.attributes; try {
strictAssert(membersV2, 'missing membersV2'); const { membersV2 } = conversation.attributes;
strictAssert(membersV2, 'missing membersV2');
const groupEndorsementData = decodeGroupSendEndorsementResponse({ const groupEndorsementData = decodeGroupSendEndorsementResponse({
groupId, groupId,
groupSendEndorsementResponse, groupSendEndorsementResponse,
groupSecretParamsBase64: secretParams, groupSecretParamsBase64: secretParams,
groupMembersV2: membersV2, groupMembersV2: membersV2,
}); });
await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData); await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData);
} catch (error) {
log.warn(
`respondToGroupV2Migration/${logId}: Problem saving group endorsements ${Errors.toLogFormat(error)}`
);
}
} }
} }
@ -3747,21 +3773,27 @@ async function updateGroupViaState({
// If we're not in the group, we won't receive endorsements // If we're not in the group, we won't receive endorsements
if (Bytes.isNotEmpty(groupSendEndorsementResponse)) { if (Bytes.isNotEmpty(groupSendEndorsementResponse)) {
// Use the latest state of the group after applying changes try {
const { groupId, membersV2 } = newAttributes; // Use the latest state of the group after applying changes
strictAssert(groupId, 'updateGroupViaState: Group must have groupId'); const { groupId, membersV2 } = newAttributes;
strictAssert(membersV2, 'updateGroupViaState: Group must have membersV2'); strictAssert(groupId, 'updateGroupViaState: Group must have groupId');
strictAssert(membersV2, 'updateGroupViaState: Group must have membersV2');
log.info(`getCurrentGroupState/${logId}: Saving group endorsements`); log.info(`getCurrentGroupState/${logId}: Saving group endorsements`);
const groupEndorsementData = decodeGroupSendEndorsementResponse({ const groupEndorsementData = decodeGroupSendEndorsementResponse({
groupId, groupId,
groupSendEndorsementResponse, groupSendEndorsementResponse,
groupSecretParamsBase64: secretParams, groupSecretParamsBase64: secretParams,
groupMembersV2: membersV2, groupMembersV2: membersV2,
}); });
await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData); await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData);
} catch (error) {
log.warn(
`updateGroupViaState/${logId}: Problem saving group endorsements ${Errors.toLogFormat(error)}`
);
}
} }
return { return {
@ -3951,22 +3983,28 @@ async function updateGroupViaLogs({
// If we're not in the group, we won't receive endorsements // If we're not in the group, we won't receive endorsements
if (Bytes.isNotEmpty(groupSendEndorsementResponse)) { if (Bytes.isNotEmpty(groupSendEndorsementResponse)) {
log.info(`updateGroupViaLogs/${logId}: Saving group endorsements`); try {
// Use the latest state of the group after applying changes log.info(`updateGroupViaLogs/${logId}: Saving group endorsements`);
const { membersV2 } = updates.newAttributes; // Use the latest state of the group after applying changes
strictAssert( const { membersV2 } = updates.newAttributes;
membersV2 != null, strictAssert(
'updateGroupViaLogs: Group must have membersV2' membersV2 != null,
); 'updateGroupViaLogs: Group must have membersV2'
);
const groupEndorsementData = decodeGroupSendEndorsementResponse({ const groupEndorsementData = decodeGroupSendEndorsementResponse({
groupId, groupId,
groupSendEndorsementResponse, groupSendEndorsementResponse,
groupMembersV2: membersV2, groupMembersV2: membersV2,
groupSecretParamsBase64: secretParams, groupSecretParamsBase64: secretParams,
}); });
await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData); await DataWriter.replaceAllEndorsementsForGroup(groupEndorsementData);
} catch (error) {
log.warn(
`updateGroupViaLogs/${logId}: Problem saving group endorsements ${Errors.toLogFormat(error)}`
);
}
} }
return updates; return updates;