Groups: Continue processing group if endorsements are invalid
Co-authored-by: Scott Nonnenberg <scott@signal.org>
This commit is contained in:
parent
2ba9afb7cf
commit
7027bca293
1 changed files with 96 additions and 58 deletions
154
ts/groups.ts
154
ts/groups.ts
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue