Device manager - prune client information events after remote sign out (#9874)
* prune client infromation events from old devices * test client data pruning * remove debug * strict * Update src/components/views/settings/devices/useOwnDevices.ts Co-authored-by: Michael Weimann <michaelw@matrix.org> * improvements from review Co-authored-by: Michael Weimann <michaelw@matrix.org>
This commit is contained in:
parent
4f0a5d1eb4
commit
b1c32995c6
3 changed files with 80 additions and 15 deletions
|
@ -40,8 +40,8 @@ const formatUrl = (): string | undefined => {
|
|||
].join("");
|
||||
};
|
||||
|
||||
export const getClientInformationEventType = (deviceId: string): string =>
|
||||
`io.element.matrix_client_information.${deviceId}`;
|
||||
const clientInformationEventPrefix = "io.element.matrix_client_information.";
|
||||
export const getClientInformationEventType = (deviceId: string): string => `${clientInformationEventPrefix}${deviceId}`;
|
||||
|
||||
/**
|
||||
* Record extra client information for the current device
|
||||
|
@ -52,7 +52,7 @@ export const recordClientInformation = async (
|
|||
sdkConfig: IConfigOptions,
|
||||
platform: BasePlatform,
|
||||
): Promise<void> => {
|
||||
const deviceId = matrixClient.getDeviceId();
|
||||
const deviceId = matrixClient.getDeviceId()!;
|
||||
const { brand } = sdkConfig;
|
||||
const version = await platform.getAppVersion();
|
||||
const type = getClientInformationEventType(deviceId);
|
||||
|
@ -66,12 +66,27 @@ export const recordClientInformation = async (
|
|||
};
|
||||
|
||||
/**
|
||||
* Remove extra client information
|
||||
* @todo(kerrya) revisit after MSC3391: account data deletion is done
|
||||
* (PSBE-12)
|
||||
* Remove client information events for devices that no longer exist
|
||||
* @param validDeviceIds - ids of current devices,
|
||||
* client information for devices NOT in this list will be removed
|
||||
*/
|
||||
export const pruneClientInformation = (validDeviceIds: string[], matrixClient: MatrixClient): void => {
|
||||
Object.values(matrixClient.store.accountData).forEach((event) => {
|
||||
if (!event.getType().startsWith(clientInformationEventPrefix)) {
|
||||
return;
|
||||
}
|
||||
const [, deviceId] = event.getType().split(clientInformationEventPrefix);
|
||||
if (deviceId && !validDeviceIds.includes(deviceId)) {
|
||||
matrixClient.deleteAccountData(event.getType());
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove extra client information for current device
|
||||
*/
|
||||
export const removeClientInformation = async (matrixClient: MatrixClient): Promise<void> => {
|
||||
const deviceId = matrixClient.getDeviceId();
|
||||
const deviceId = matrixClient.getDeviceId()!;
|
||||
const type = getClientInformationEventType(deviceId);
|
||||
const clientInformation = getDeviceClientInformation(matrixClient, deviceId);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue