@@ -156,7 +156,11 @@ class E2E extends Emitter {
156
156
delete this . instancesByRoomId [ rid ] ;
157
157
}
158
158
159
- async persistKeys ( { public_key, private_key } : KeyPair , password : string ) : Promise < void > {
159
+ async persistKeys (
160
+ { public_key, private_key } : KeyPair ,
161
+ password : string ,
162
+ { force } : { force : boolean } = { force : false } ,
163
+ ) : Promise < void > {
160
164
if ( typeof public_key !== 'string' || typeof private_key !== 'string' ) {
161
165
throw new Error ( 'Failed to persist keys as they are not strings.' ) ;
162
166
}
@@ -170,6 +174,7 @@ class E2E extends Emitter {
170
174
await sdk . rest . post ( '/v1/e2e.setUserPublicAndPrivateKeys' , {
171
175
public_key,
172
176
private_key : encodedPrivateKey ,
177
+ force,
173
178
} ) ;
174
179
}
175
180
@@ -300,7 +305,7 @@ class E2E extends Emitter {
300
305
}
301
306
302
307
async changePassword ( newPassword : string ) : Promise < void > {
303
- await this . persistKeys ( this . getKeysFromLocalStorage ( ) , newPassword ) ;
308
+ await this . persistKeys ( this . getKeysFromLocalStorage ( ) , newPassword , { force : true } ) ;
304
309
305
310
if ( Meteor . _localStorage . getItem ( 'e2e.randomPassword' ) ) {
306
311
Meteor . _localStorage . setItem ( 'e2e.randomPassword' , newPassword ) ;
@@ -316,7 +321,10 @@ class E2E extends Emitter {
316
321
this . db_private_key = private_key ;
317
322
} catch ( error ) {
318
323
this . setState ( E2EEState . ERROR ) ;
319
- return this . error ( 'Error fetching RSA keys: ' , error ) ;
324
+ this . error ( 'Error fetching RSA keys: ' , error ) ;
325
+ // Stop any process since we can't communicate with the server
326
+ // to get the keys. This prevents new key generation
327
+ throw error ;
320
328
}
321
329
}
322
330
0 commit comments