Merge branch 'feature/5184_restore_keys_from_backup' into 'develop'

MESSENGER-5148 Restore Backup option

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!254
This commit is contained in:
Frank Rotermund
2023-11-14 14:53:23 +00:00
7 changed files with 56 additions and 36 deletions

View File

@@ -698,5 +698,8 @@ class BWIBuildSettings: NSObject {
// shows the grey/green/red shield for the room avatar / user avatar
var showEncryptionStatusBadgeOnAvatar = false
// MARK: Backup restore
var enableRestoreKeysFromBackup = true
}

View File

@@ -652,3 +652,6 @@
// MARK: - Crypto Store migration
"bwi_launch_loading_crypto_store_migration_info" = "Die Ver-/Entschlüsselung von Nachrichten wird verbessert, dies kann ein paar Minuten dauern, bitte schließe die App nicht. Verbesserung läuft.";
// MARK: Secure backup recovery
"security_settings_secure_backup" = "Nachrichten wiederherstellen";
"security_settings_secure_backup_info_valid" = "Sofern du Probleme mit nicht-entschlüsselbaren Nachrichten hast, kann es helfen, die Schlüssel neu abzurufen. Klicke hierzu auf den Button und warte solange, bis alle Schlüssel wiederhergestellt wurden. Die App muss dazu geöffnet bleiben.";

View File

@@ -2718,7 +2718,7 @@
"poll_history_load_more" = "Weitere Umfragen laden";
"poll_history_loading_text" = "Zeige Umfragen an";
"poll_history_fetching_error" = "Fehler beim Laden der Umfragen.";
"key_backup_recover_from_private_key_progress" = "%@% % abgeschlossen";
"key_backup_recover_from_private_key_progress" = "%@ %% abgeschlossen";
"voice_broadcast_playback_unable_to_decrypt" = "Entschlüsseln der Sprachübertragung nicht möglich.";
"home_context_menu_mark_as_unread" = "Als ungelesen markieren";
"wysiwyg_composer_format_action_un_indent" = "Einrückung verringern";

View File

@@ -561,3 +561,7 @@
// MARK: - Crypto Store migration
"bwi_launch_loading_crypto_store_migration_info" = "Message encryption/decryption has been updated to improve app performance, this may take a few minutes. Please do not close the app during the update. The update is running.";
// MARK: Secure backup recovery
"security_settings_secure_backup" = "Restore Messages";
"security_settings_secure_backup_info_valid" = "If you have problems with messages that cannot be decrypted, it may help to retrieve the keys again. To do this, click on the button and wait until all keys have been restored. The app must remain open for this.";

View File

@@ -1495,10 +1495,18 @@ public class BWIL10n: NSObject {
public static var securitySettingsCryptoSessionsDescription: String {
return BWIL10n.tr("Bwi", "security_settings_crypto_sessions_description")
}
/// Nachrichten wiederherstellen
public static var securitySettingsSecureBackup: String {
return BWIL10n.tr("Bwi", "security_settings_secure_backup")
}
/// Lösche
public static var securitySettingsSecureBackupDelete: String {
return BWIL10n.tr("Bwi", "security_settings_secure_backup_delete")
}
/// Sofern du Probleme mit nicht-entschlüsselbaren Nachrichten hast, kann es helfen, die Schlüssel neu abzurufen. Klicke hierzu auf den Button und warte solange, bis alle Schlüssel wiederhergestellt wurden. Die App muss dazu geöffnet bleiben.
public static var securitySettingsSecureBackupInfoValid: String {
return BWIL10n.tr("Bwi", "security_settings_secure_backup_info_valid")
}
/// Bestätige deine Identität durch Eingabe des Passwort
public static var securitySettingsUserPasswordDescription: String {
return BWIL10n.tr("Bwi", "security_settings_user_password_description")

View File

@@ -123,6 +123,12 @@ private enum BackupRows {
let backupRows: [BackupRows]
// bwi 5184: remove:
// .deleteKeyBackupAction(keyBackupVersion: keyBackupVersion),
// .resetSecureBackupAction
// to avoid many confusing if clauses
// same reasoning for text changes
switch self.viewState {
case .loading:
backupRows = [
@@ -143,21 +149,18 @@ private enum BackupRows {
case .keyBackup(let keyBackupVersion, _, let progress):
if let progress = progress {
backupRows = [
.info(text: importProgressText(for: progress)),
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion)
.info(text: importProgressText(for: progress))
]
} else {
backupRows = [
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion)
.info(text: BWIL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore)
]
}
case .keyBackupNotTrusted(let keyBackupVersion, _):
backupRows = [
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion)
.info(text: BWIL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore)
]
}
case .secureBackup(let keyBackupState):
@@ -169,33 +172,27 @@ private enum BackupRows {
backupRows = [
.info(text: infoText),
.createKeyBackupAction,
.resetSecureBackupAction
.createKeyBackupAction
]
case .keyBackup(let keyBackupVersion, _, let progress):
if let progress = progress {
backupRows = [
.info(text: importProgressText(for: progress)),
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion),
.resetSecureBackupAction
.info(text: importProgressText(for: progress))
]
} else {
backupRows = [
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion),
.resetSecureBackupAction
.info(text: BWIL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore)
]
}
case .keyBackupNotTrusted(let keyBackupVersion, _):
backupRows = [
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion),
.resetSecureBackupAction
.info(text: BWIL10n.securitySettingsSecureBackupInfoValid),
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore)
]
}
}
self.backupRows = backupRows
}

View File

@@ -326,16 +326,7 @@ TableViewSectionsDelegate>
}
[sections addObject:pinCodeSection];
// BWI: if tracking is enabled show switch to turn it on/off
if (BWIBuildSettings.shared.bwiMatomoEnabled) {
Section *analyticsSection = [Section sectionWithTag:SECTION_ANALYTICS];
[analyticsSection addRowWithTag:ANALYTICS_ENABLED];
analyticsSection.headerTitle = BWIL10n.bwiSettingsAnalyticsSectionHeader;
analyticsSection.footerTitle = BWIL10n.bwiSettingsAnalyticsSectionFooter;
[sections addObject:analyticsSection];
}
// Crypto sessions section
if (RiotSettings.shared.settingsSecurityScreenShowSessions && !RiotSettings.shared.enableNewSessionManager && !BWIBuildSettings.shared.enableNewSessionManagerByDefault)
{
@@ -360,17 +351,31 @@ TableViewSectionsDelegate>
// Secure backup
if (!isSecureBackupRequired)
// bwi 5184: Show on featureflag and only when device has a private key otherwise there will be errors in the process
// Devices in our case should private keys
if ((!isSecureBackupRequired || BWIBuildSettings.shared.enableRestoreKeysFromBackup) && self.mainSession.crypto.backup.hasPrivateKeyInCryptoStore)
{
Section *secureBackupSection = [Section sectionWithTag:SECTION_SECURE_BACKUP];
secureBackupSection.headerTitle = [VectorL10n securitySettingsSecureBackup];
secureBackupSection.footerTitle = VectorL10n.securitySettingsSecureBackupDescription;
secureBackupSection.headerTitle = [BWIL10n securitySettingsSecureBackup];
if (!BWIBuildSettings.shared.enableRestoreKeysFromBackup) {
secureBackupSection.footerTitle = VectorL10n.securitySettingsSecureBackupDescription;
}
[secureBackupSection addRowsWithCount:self->secureBackupSection.numberOfRows];
[sections addObject:secureBackupSection];
}
// BWI: if tracking is enabled show switch to turn it on/off
if (BWIBuildSettings.shared.bwiMatomoEnabled) {
Section *analyticsSection = [Section sectionWithTag:SECTION_ANALYTICS];
[analyticsSection addRowWithTag:ANALYTICS_ENABLED];
analyticsSection.headerTitle = BWIL10n.bwiSettingsAnalyticsSectionHeader;
analyticsSection.footerTitle = BWIL10n.bwiSettingsAnalyticsSectionFooter;
[sections addObject:analyticsSection];
}
// Cross-Signing
// bwi: hide cross signing section