Key rotation: log failures, retry, force on new version (#1833)
* Retry failed signed key rotation; start rotation when registered (#1772) * rotateSignedPrekeys: Fix 'res is not defined' error * If the server rejects key rotation, don't retry immediately * Force a signed key rotation on launch of any new version
This commit is contained in:
parent
b8b26d3e79
commit
a5923c2177
4 changed files with 41 additions and 14 deletions
|
@ -83,6 +83,7 @@
|
|||
|
||||
if (!lastVersion || currentVersion !== lastVersion) {
|
||||
console.log('New version detected:', currentVersion);
|
||||
getAccountManager().rotateSignedPreKey();
|
||||
}
|
||||
|
||||
window.dispatchEvent(new Event('storage_ready'));
|
||||
|
@ -90,19 +91,20 @@
|
|||
console.log('listening for registration events');
|
||||
Whisper.events.on('registration_done', function() {
|
||||
console.log('handling registration event');
|
||||
Whisper.RotateSignedPreKeyListener.init(Whisper.events);
|
||||
connect(true);
|
||||
});
|
||||
|
||||
var appView = window.owsDesktopApp.appView = new Whisper.AppView({el: $('body')});
|
||||
|
||||
Whisper.WallClockListener.init(Whisper.events);
|
||||
Whisper.RotateSignedPreKeyListener.init(Whisper.events);
|
||||
Whisper.ExpiringMessagesListener.init(Whisper.events);
|
||||
|
||||
if (Whisper.Import.isIncomplete()) {
|
||||
console.log('Import was interrupted, showing import error screen');
|
||||
appView.openImporter();
|
||||
} else if (Whisper.Registration.everDone()) {
|
||||
Whisper.RotateSignedPreKeyListener.init(Whisper.events);
|
||||
connect();
|
||||
appView.openInbox({
|
||||
initialLoadComplete: initialLoadComplete
|
||||
|
|
|
@ -38008,13 +38008,20 @@ var TextSecureServer = (function() {
|
|||
return store.storeSignedPreKey(res.keyId, res.keyPair).then(function() {
|
||||
return cleanSignedPreKeys();
|
||||
});
|
||||
}).catch(function(e) {
|
||||
if (e instanceof Error && e.name == 'HTTPError' && e.code >= 400 && e.code <= 599) {
|
||||
var rejections = 1 + textsecure.storage.get('signedKeyRotationRejected', 0);
|
||||
textsecure.storage.put('signedKeyRotationRejected', rejections);
|
||||
console.log('Signed key rotation rejected count:', rejections);
|
||||
}
|
||||
});
|
||||
}).catch(function(e) {
|
||||
console.log(
|
||||
'rotateSignedPrekey error:',
|
||||
e && e.stack ? e.stack : e
|
||||
);
|
||||
|
||||
if (e instanceof Error && e.name == 'HTTPError' && e.code >= 400 && e.code <= 599) {
|
||||
var rejections = 1 + textsecure.storage.get('signedKeyRotationRejected', 0);
|
||||
textsecure.storage.put('signedKeyRotationRejected', rejections);
|
||||
console.log('Signed key rotation rejected count:', rejections);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
}.bind(this));
|
||||
},
|
||||
|
|
|
@ -17,7 +17,10 @@
|
|||
|
||||
function run() {
|
||||
console.log('Rotating signed prekey...');
|
||||
getAccountManager().rotateSignedPreKey();
|
||||
getAccountManager().rotateSignedPreKey().catch(function() {
|
||||
console.log('rotateSignedPrekey() failed. Trying again in five seconds');
|
||||
setTimeout(runWhenOnline, 5000);
|
||||
});
|
||||
scheduleNextRotation();
|
||||
setTimeoutForNextRun();
|
||||
}
|
||||
|
@ -26,6 +29,7 @@
|
|||
if (navigator.onLine) {
|
||||
run();
|
||||
} else {
|
||||
console.log('We are offline; keys will be rotated when we are next online');
|
||||
var listener = function() {
|
||||
window.removeEventListener('online', listener);
|
||||
run();
|
||||
|
@ -52,8 +56,15 @@
|
|||
timeout = setTimeout(runWhenOnline, waitTime);
|
||||
}
|
||||
|
||||
var initComplete;
|
||||
Whisper.RotateSignedPreKeyListener = {
|
||||
init: function(events) {
|
||||
if (initComplete) {
|
||||
console.log('Rotate signed prekey listener: Already initialized');
|
||||
return;
|
||||
}
|
||||
initComplete = true;
|
||||
|
||||
if (Whisper.Registration.isDone()) {
|
||||
setTimeoutForNextRun();
|
||||
}
|
||||
|
|
|
@ -138,13 +138,20 @@
|
|||
return store.storeSignedPreKey(res.keyId, res.keyPair).then(function() {
|
||||
return cleanSignedPreKeys();
|
||||
});
|
||||
}).catch(function(e) {
|
||||
if (e instanceof Error && e.name == 'HTTPError' && e.code >= 400 && e.code <= 599) {
|
||||
var rejections = 1 + textsecure.storage.get('signedKeyRotationRejected', 0);
|
||||
textsecure.storage.put('signedKeyRotationRejected', rejections);
|
||||
console.log('Signed key rotation rejected count:', rejections);
|
||||
}
|
||||
});
|
||||
}).catch(function(e) {
|
||||
console.log(
|
||||
'rotateSignedPrekey error:',
|
||||
e && e.stack ? e.stack : e
|
||||
);
|
||||
|
||||
if (e instanceof Error && e.name == 'HTTPError' && e.code >= 400 && e.code <= 599) {
|
||||
var rejections = 1 + textsecure.storage.get('signedKeyRotationRejected', 0);
|
||||
textsecure.storage.put('signedKeyRotationRejected', rejections);
|
||||
console.log('Signed key rotation rejected count:', rejections);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
}.bind(this));
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue