Do not accept stories without a name and no deletedAtTimestamp
This commit is contained in:
parent
f09b214016
commit
0a81376ca0
2 changed files with 39 additions and 3 deletions
|
@ -1305,12 +1305,14 @@ export async function mergeStoryDistributionListRecord(
|
||||||
details.push('adding unknown fields');
|
details.push('adding unknown fields');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const deletedAtTimestamp = getTimestampFromLong(
|
||||||
|
storyDistributionListRecord.deletedAtTimestamp
|
||||||
|
);
|
||||||
|
|
||||||
const storyDistribution: StoryDistributionWithMembersType = {
|
const storyDistribution: StoryDistributionWithMembersType = {
|
||||||
id: listId,
|
id: listId,
|
||||||
name: String(storyDistributionListRecord.name),
|
name: String(storyDistributionListRecord.name),
|
||||||
deletedAtTimestamp: isMyStories
|
deletedAtTimestamp: isMyStories ? undefined : deletedAtTimestamp,
|
||||||
? undefined
|
|
||||||
: getTimestampFromLong(storyDistributionListRecord.deletedAtTimestamp),
|
|
||||||
allowsReplies: Boolean(storyDistributionListRecord.allowsReplies),
|
allowsReplies: Boolean(storyDistributionListRecord.allowsReplies),
|
||||||
isBlockList: Boolean(storyDistributionListRecord.isBlockList),
|
isBlockList: Boolean(storyDistributionListRecord.isBlockList),
|
||||||
members: remoteListMembers,
|
members: remoteListMembers,
|
||||||
|
@ -1352,6 +1354,14 @@ export async function mergeStoryDistributionListRecord(
|
||||||
details.push('clearing unknown fields');
|
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(
|
const { hasConflict, details: conflictDetails } = doRecordsConflict(
|
||||||
toStoryDistributionListRecord(storyDistribution),
|
toStoryDistributionListRecord(storyDistribution),
|
||||||
storyDistributionListRecord
|
storyDistributionListRecord
|
||||||
|
|
|
@ -1746,6 +1746,10 @@ async function _deleteAllStoryDistributions(): Promise<void> {
|
||||||
async function createNewStoryDistribution(
|
async function createNewStoryDistribution(
|
||||||
distribution: StoryDistributionWithMembersType
|
distribution: StoryDistributionWithMembersType
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
strictAssert(
|
||||||
|
distribution.name,
|
||||||
|
'Distribution list does not have a valid name'
|
||||||
|
);
|
||||||
await channels.createNewStoryDistribution(distribution);
|
await channels.createNewStoryDistribution(distribution);
|
||||||
}
|
}
|
||||||
async function getAllStoryDistributionsWithMembers(): Promise<
|
async function getAllStoryDistributionsWithMembers(): Promise<
|
||||||
|
@ -1761,6 +1765,17 @@ async function getStoryDistributionWithMembers(
|
||||||
async function modifyStoryDistribution(
|
async function modifyStoryDistribution(
|
||||||
distribution: StoryDistributionType
|
distribution: StoryDistributionType
|
||||||
): Promise<void> {
|
): 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);
|
await channels.modifyStoryDistribution(distribution);
|
||||||
}
|
}
|
||||||
async function modifyStoryDistributionMembers(
|
async function modifyStoryDistributionMembers(
|
||||||
|
@ -1779,6 +1794,17 @@ async function modifyStoryDistributionWithMembers(
|
||||||
toRemove: Array<UUIDStringType>;
|
toRemove: Array<UUIDStringType>;
|
||||||
}
|
}
|
||||||
): Promise<void> {
|
): 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);
|
await channels.modifyStoryDistributionWithMembers(distribution, options);
|
||||||
}
|
}
|
||||||
async function deleteStoryDistribution(id: UUIDStringType): Promise<void> {
|
async function deleteStoryDistribution(id: UUIDStringType): Promise<void> {
|
||||||
|
|
Loading…
Add table
Reference in a new issue