Do not accept stories without a name and no deletedAtTimestamp

This commit is contained in:
Josh Perez 2022-08-11 18:03:22 -04:00 committed by GitHub
parent f09b214016
commit 0a81376ca0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 3 deletions

View File

@ -1305,12 +1305,14 @@ export async function mergeStoryDistributionListRecord(
details.push('adding unknown fields');
}
const deletedAtTimestamp = getTimestampFromLong(
storyDistributionListRecord.deletedAtTimestamp
);
const storyDistribution: StoryDistributionWithMembersType = {
id: listId,
name: String(storyDistributionListRecord.name),
deletedAtTimestamp: isMyStories
? undefined
: getTimestampFromLong(storyDistributionListRecord.deletedAtTimestamp),
deletedAtTimestamp: isMyStories ? undefined : deletedAtTimestamp,
allowsReplies: Boolean(storyDistributionListRecord.allowsReplies),
isBlockList: Boolean(storyDistributionListRecord.isBlockList),
members: remoteListMembers,
@ -1352,6 +1354,14 @@ export async function mergeStoryDistributionListRecord(
details.push('clearing unknown fields');
}
const isBadRemoteData = !deletedAtTimestamp && !storyDistribution.name;
if (isBadRemoteData) {
Object.assign(storyDistribution, {
name: localStoryDistributionList.name,
members: localStoryDistributionList.members,
});
}
const { hasConflict, details: conflictDetails } = doRecordsConflict(
toStoryDistributionListRecord(storyDistribution),
storyDistributionListRecord

View File

@ -1746,6 +1746,10 @@ async function _deleteAllStoryDistributions(): Promise<void> {
async function createNewStoryDistribution(
distribution: StoryDistributionWithMembersType
): Promise<void> {
strictAssert(
distribution.name,
'Distribution list does not have a valid name'
);
await channels.createNewStoryDistribution(distribution);
}
async function getAllStoryDistributionsWithMembers(): Promise<
@ -1761,6 +1765,17 @@ async function getStoryDistributionWithMembers(
async function modifyStoryDistribution(
distribution: StoryDistributionType
): Promise<void> {
if (distribution.deletedAtTimestamp) {
strictAssert(
!distribution.name,
'Attempt to delete distribution list but still has a name'
);
} else {
strictAssert(
distribution.name,
'Cannot clear distribution list name without deletedAtTimestamp set'
);
}
await channels.modifyStoryDistribution(distribution);
}
async function modifyStoryDistributionMembers(
@ -1779,6 +1794,17 @@ async function modifyStoryDistributionWithMembers(
toRemove: Array<UUIDStringType>;
}
): Promise<void> {
if (distribution.deletedAtTimestamp) {
strictAssert(
!distribution.name,
'Attempt to delete distribution list but still has a name'
);
} else {
strictAssert(
distribution.name,
'Cannot clear distribution list name without deletedAtTimestamp set'
);
}
await channels.modifyStoryDistributionWithMembers(distribution, options);
}
async function deleteStoryDistribution(id: UUIDStringType): Promise<void> {