This commit is contained in:
Ajay Bura 2022-04-21 15:51:22 +05:30
parent 35ba92ae20
commit e7d4f203c3
3 changed files with 39 additions and 18 deletions

View file

@ -8,6 +8,7 @@ import initMatrix from '../../../client/initMatrix';
import { openReusableDialog } from '../../../client/action/navigation';
import { hasCrossSigningAccountData } from '../../../util/matrixUtil';
import { copyToClipboard } from '../../../util/common';
import { clearSecretStorageKeys } from '../../../client/state/secretStorageKeys';
import Text from '../../atoms/text/Text';
import Button from '../../atoms/button/Button';
@ -56,10 +57,25 @@ function CrossSigningSetup() {
const mx = initMatrix.matrixClient;
setGenWithPhrase(typeof securityPhrase === 'string');
const recoveryKey = await mx.createRecoveryKeyFromPassphrase(securityPhrase);
clearSecretStorageKeys();
await mx.bootstrapSecretStorage({
createSecretStorageKey: async () => recoveryKey,
setupNewKeyBackup: true,
setupNewSecretStorage: true,
});
const authUploadDeviceSigningKeys = async (makeRequest) => {
try {
await makeRequest({});
const password = prompt('Password', '');
await makeRequest({
type: 'm.login.password',
password,
identifier: {
type: 'm.id.user',
user: mx.getUserId(),
},
});
} catch (e) {
console.log(e);
// TODO: handle error
@ -71,16 +87,6 @@ function CrossSigningSetup() {
setupNewCrossSigning: true,
});
const bootstrapSSOpts = {
createSecretStorageKey: async () => recoveryKey,
setupNewKeyBackup: true,
setupNewSecretStorage: true,
};
await mx.bootstrapSecretStorage(bootstrapSSOpts);
// setup newKeyBackup only bootstrap it
// TODO: createKeyBackupVersion;
securityKeyDialog(recoveryKey);
};

View file

@ -189,6 +189,17 @@ function KeyBackup() {
useEffect(() => {
mountStore.setItem(true);
fetchKeyBackupVersion();
const handleAccountData = (event) => {
if (event.getType() === 'm.megolm_backup.v1') {
fetchKeyBackupVersion();
}
};
mx.on('accountData', handleAccountData);
return () => {
mx.removeListener('accountData', handleAccountData);
};
}, []);
const accessSecretStorage = (title, onComplete) => {

View file

@ -1,22 +1,26 @@
const secretStorageKeys = {};
const secretStorageKeys = new Map();
export function storePrivateKey(keyId, privateKey) {
if (privateKey instanceof Uint8Array === false) {
throw new Error('Unable to store, privateKey is invalid.');
}
secretStorageKeys[keyId] = privateKey;
secretStorageKeys.set(keyId, privateKey);
}
export function hasPrivateKey(keyId) {
return secretStorageKeys[keyId] instanceof Uint8Array;
return secretStorageKeys.get(keyId) instanceof Uint8Array;
}
export function getPrivateKey(keyId) {
return secretStorageKeys[keyId];
return secretStorageKeys.get(keyId);
}
export function deletePrivateKey(keyId) {
delete secretStorageKeys[keyId];
delete secretStorageKeys.delete(keyId);
}
export function clearSecretStorageKeys() {
secretStorageKeys.clear();
}
async function getSecretStorageKey({ keys }) {
@ -28,10 +32,10 @@ async function getSecretStorageKey({ keys }) {
}
function cacheSecretStorageKey(keyId, keyInfo, privateKey) {
secretStorageKeys[keyId] = privateKey;
secretStorageKeys.set(keyId, privateKey);
}
export const cryptoCallbacks = {
getSecretStorageKey,
cacheSecretStorageKey,
};
};