use correct device_id in signatures for dehydrating device
completely replace device id for dehydrating device so we don't have to pass it down the stack
This commit is contained in:
parent
c89e414bb5
commit
e3378d5636
3 changed files with 13 additions and 7 deletions
|
@ -253,7 +253,7 @@ export class Session {
|
||||||
this._setupEncryption();
|
this._setupEncryption();
|
||||||
}
|
}
|
||||||
await this._e2eeAccount.generateOTKsIfNeeded(this._storage, log);
|
await this._e2eeAccount.generateOTKsIfNeeded(this._storage, log);
|
||||||
await log.wrap("uploadKeys", log => this._e2eeAccount.uploadKeys(this._storage, undefined, log));
|
await log.wrap("uploadKeys", log => this._e2eeAccount.uploadKeys(this._storage, false, log));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,7 +570,7 @@ export class Session {
|
||||||
if (!isCatchupSync) {
|
if (!isCatchupSync) {
|
||||||
const needsToUploadOTKs = await this._e2eeAccount.generateOTKsIfNeeded(this._storage, log);
|
const needsToUploadOTKs = await this._e2eeAccount.generateOTKsIfNeeded(this._storage, log);
|
||||||
if (needsToUploadOTKs) {
|
if (needsToUploadOTKs) {
|
||||||
await log.wrap("uploadKeys", log => this._e2eeAccount.uploadKeys(this._storage, undefined, log));
|
await log.wrap("uploadKeys", log => this._e2eeAccount.uploadKeys(this._storage, false, log));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,11 @@ export class Account {
|
||||||
return this._identityKeys;
|
return this._identityKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
async uploadKeys(storage, dehydratedDeviceId, log) {
|
setDeviceId(deviceId) {
|
||||||
|
this._deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
async uploadKeys(storage, isDehydratedDevice, log) {
|
||||||
const oneTimeKeys = JSON.parse(this._account.one_time_keys());
|
const oneTimeKeys = JSON.parse(this._account.one_time_keys());
|
||||||
// only one algorithm supported by olm atm, so hardcode its name
|
// only one algorithm supported by olm atm, so hardcode its name
|
||||||
const oneTimeKeysEntries = Object.entries(oneTimeKeys.curve25519);
|
const oneTimeKeysEntries = Object.entries(oneTimeKeys.curve25519);
|
||||||
|
@ -111,12 +115,13 @@ export class Account {
|
||||||
if (!this._areDeviceKeysUploaded) {
|
if (!this._areDeviceKeysUploaded) {
|
||||||
log.set("identity", true);
|
log.set("identity", true);
|
||||||
const identityKeys = JSON.parse(this._account.identity_keys());
|
const identityKeys = JSON.parse(this._account.identity_keys());
|
||||||
payload.device_keys = this._deviceKeysPayload(identityKeys, dehydratedDeviceId || this._deviceId);
|
payload.device_keys = this._deviceKeysPayload(identityKeys);
|
||||||
}
|
}
|
||||||
if (oneTimeKeysEntries.length) {
|
if (oneTimeKeysEntries.length) {
|
||||||
log.set("otks", true);
|
log.set("otks", true);
|
||||||
payload.one_time_keys = this._oneTimeKeysPayload(oneTimeKeysEntries);
|
payload.one_time_keys = this._oneTimeKeysPayload(oneTimeKeysEntries);
|
||||||
}
|
}
|
||||||
|
const dehydratedDeviceId = isDehydratedDevice ? this._deviceId : undefined;
|
||||||
const response = await this._hsApi.uploadKeys(dehydratedDeviceId, payload, {log}).response();
|
const response = await this._hsApi.uploadKeys(dehydratedDeviceId, payload, {log}).response();
|
||||||
this._serverOTKCount = response?.one_time_key_counts?.signed_curve25519;
|
this._serverOTKCount = response?.one_time_key_counts?.signed_curve25519;
|
||||||
log.set("serverOTKCount", this._serverOTKCount);
|
log.set("serverOTKCount", this._serverOTKCount);
|
||||||
|
@ -241,10 +246,10 @@ export class Account {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_deviceKeysPayload(identityKeys, deviceId) {
|
_deviceKeysPayload(identityKeys) {
|
||||||
const obj = {
|
const obj = {
|
||||||
user_id: this._userId,
|
user_id: this._userId,
|
||||||
device_id: deviceId,
|
device_id: this._deviceId,
|
||||||
algorithms: [OLM_ALGORITHM, MEGOLM_ALGORITHM],
|
algorithms: [OLM_ALGORITHM, MEGOLM_ALGORITHM],
|
||||||
keys: {}
|
keys: {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -40,7 +40,8 @@ export async function uploadAccountAsDehydratedDevice(account, hsApi, key, devic
|
||||||
initial_device_display_name: deviceDisplayName
|
initial_device_display_name: deviceDisplayName
|
||||||
}).response();
|
}).response();
|
||||||
const deviceId = response.device_id;
|
const deviceId = response.device_id;
|
||||||
await account.uploadKeys(undefined, deviceId, log);
|
account.setDeviceId(deviceId);
|
||||||
|
await account.uploadKeys(undefined, true, log);
|
||||||
return deviceId;
|
return deviceId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue