You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-29 16:43:09 +03:00
add localstorage support for key backups
This commit is contained in:
@@ -32,6 +32,7 @@ const KEY_END_TO_END_ACCOUNT = E2E_PREFIX + "account";
|
|||||||
const KEY_DEVICE_DATA = E2E_PREFIX + "device_data";
|
const KEY_DEVICE_DATA = E2E_PREFIX + "device_data";
|
||||||
const KEY_INBOUND_SESSION_PREFIX = E2E_PREFIX + "inboundgroupsessions/";
|
const KEY_INBOUND_SESSION_PREFIX = E2E_PREFIX + "inboundgroupsessions/";
|
||||||
const KEY_ROOMS_PREFIX = E2E_PREFIX + "rooms/";
|
const KEY_ROOMS_PREFIX = E2E_PREFIX + "rooms/";
|
||||||
|
const KEY_SESSIONS_NEEDING_BACKUP = E2E_PREFIX + "sessionsneedingbackup";
|
||||||
|
|
||||||
function keyEndToEndSessions(deviceKey) {
|
function keyEndToEndSessions(deviceKey) {
|
||||||
return E2E_PREFIX + "sessions/" + deviceKey;
|
return E2E_PREFIX + "sessions/" + deviceKey;
|
||||||
@@ -165,6 +166,48 @@ export default class LocalStorageCryptoStore extends MemoryCryptoStore {
|
|||||||
func(result);
|
func(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getSessionsNeedingBackup(limit) {
|
||||||
|
const sessions = [];
|
||||||
|
|
||||||
|
for (const session in getJsonItem(this.store, KEY_SESSIONS_NEEDING_BACKUP)) {
|
||||||
|
const senderKey = session.substr(0, 43);
|
||||||
|
const sessionId = session.substr(44);
|
||||||
|
getEndToEndInboundGroupSession(senderKey, sessionId, null, (sessionData) => {
|
||||||
|
sessions.push({
|
||||||
|
senderKey: senderKey,
|
||||||
|
sessionId: sessionId,
|
||||||
|
sessionData: sessionData,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
if (limit && session.length >= limit) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Promise.resolve(sessions);
|
||||||
|
}
|
||||||
|
|
||||||
|
unmarkSessionsNeedingBackup(sessions) {
|
||||||
|
const sessionsNeedingBackup = getJsonItem(this.store, KEY_SESSIONS_NEEDING_BACKUP) || {};
|
||||||
|
for(const session of sessions) {
|
||||||
|
delete sessionsNeedingBackup[session.senderKey + '/' + session.sessionId];
|
||||||
|
}
|
||||||
|
setJsonItem(
|
||||||
|
this.store, KEY_SESSION_NEEDING_BACKUP, sessionsNeedinBackup,
|
||||||
|
);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
markSessionsNeedingBackup(sessions) {
|
||||||
|
const sessionsNeedingBackup = getJsonItem(this.store, KEY_SESSIONS_NEEDING_BACKUP) || {};
|
||||||
|
for(const session of sessions) {
|
||||||
|
sessionsNeedingBackup[session.senderKey + '/' + session.sessionId] = true;
|
||||||
|
}
|
||||||
|
setJsonItem(
|
||||||
|
this.store, KEY_SESSION_NEEDING_BACKUP, sessionsNeedinBackup,
|
||||||
|
);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete all data from this store.
|
* Delete all data from this store.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user