Skip to content

Commit 9ef525f

Browse files
authored
runfix(backup): prevent exporting undefined self user id [WPB-17558] (#19124)
* fix(backup): prevent exporting undefined self user id [WPB-17558] * address conversations without other participants * refactor participating users logic
1 parent 38fe586 commit 9ef525f

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

src/script/backup/CrossPlatformBackup/CPB.export.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,10 @@ export const exportCPBHistoryFromDatabase = async ({
156156
}
157157

158158
const conversationId = new BackupQualifiedId(qualified_conversation.id, qualified_conversation.domain ?? '');
159-
const senderUserId = new BackupQualifiedId(qualified_from?.id ?? from ?? '', qualified_from?.domain ?? '');
159+
const senderUserId = new BackupQualifiedId(
160+
qualified_from?.id ?? from ?? user.id,
161+
qualified_from?.domain ?? user.domain,
162+
);
160163
const senderClientId = from_client_id ?? '';
161164
const creationDate = new BackupDateTime(new Date(time));
162165
// for debugging purposes
@@ -178,7 +181,7 @@ export const exportCPBHistoryFromDatabase = async ({
178181
const asset = new BackupMessageContent.Asset(
179182
assetParseData.content_type,
180183
Number.parseInt(`${assetParseData.content_length}`),
181-
assetParseData.info.name,
184+
assetParseData.info?.name ?? '',
182185
transformObjectToArray(assetParseData.otr_key),
183186
transformObjectToArray(assetParseData.sha256),
184187
assetParseData.key,

src/script/backup/CrossPlatformBackup/data.schema.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export type ConversationTableEntry = zod.infer<typeof ConversationTableEntrySche
3232
export const UserTableEntrySchema = zod.object({
3333
handle: zod.string().optional(),
3434
id: zod.string(),
35-
name: zod.string().optional(),
35+
name: zod.string().optional().nullable(),
3636
qualified_id: QualifiedIdSchema.optional(),
3737
});
3838
export type UserTableEntry = zod.infer<typeof UserTableEntrySchema>;
@@ -41,7 +41,7 @@ export const EventTableEntrySchema = zod.object({
4141
category: zod.number().int().optional(),
4242
conversation: zod.string().min(1, 'Conversation is required'),
4343
data: zod.any(),
44-
from: zod.string().optional(),
44+
from: zod.string().optional().nullable(),
4545
from_client_id: zod.string().optional(),
4646
id: zod.string().optional(),
4747
primary_key: zod.number().int().positive('Primary key must be a positive integer'),

src/script/conversation/ConversationMapper.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
ADD_PERMISSION,
3131
CONVERSATION_CELLS_STATE,
3232
} from '@wireapp/api-client/lib/conversation';
33+
import {QualifiedId} from '@wireapp/api-client/lib/user';
3334
import ko from 'knockout';
3435
import {isObject} from 'underscore';
3536

@@ -292,11 +293,25 @@ export class ConversationMapper {
292293
}
293294

294295
// Active participants from database or backend payload
295-
const participatingUserIds =
296-
qualified_others ||
297-
(members?.others
298-
? members.others.map(other => ({domain: other.qualified_id?.domain || '', id: other.id}))
299-
: others.map(userId => ({domain: '', id: userId})));
296+
let participatingUserIds: QualifiedId[] = [];
297+
298+
if (qualified_others) {
299+
participatingUserIds = qualified_others;
300+
}
301+
302+
if (!qualified_others && members?.others?.length) {
303+
participatingUserIds = members.others.map(other => ({
304+
domain: other.qualified_id?.domain ?? '',
305+
id: other.id,
306+
}));
307+
}
308+
309+
if (!qualified_others && !members?.others?.length && others) {
310+
participatingUserIds = others.map(userId => ({
311+
domain: '',
312+
id: userId,
313+
}));
314+
}
300315

301316
conversationEntity.participating_user_ids(participatingUserIds);
302317

0 commit comments

Comments
 (0)