private PandorasBackupObject GetRestoredFile(string aFilePath) { if (!File.Exists(aFilePath)) { throw new Exception($"Invalid restore file path {aFilePath}"); } byte[] lFileBytes = OnGetBytesFromFilePath.Invoke(aFilePath); PandorasBackupObject lRestoredFile = null; var lBackupSerializableTypes = GetBackupSerializableClasses(); try { lRestoredFile = new PandorasBackupObject(FileBackupProcessor.GetRetoreObjectFromBytes <BasePandoraBackupObject, BackupSerializableObject>(lFileBytes)); } catch (Exception ex) { Log.Write(LogLevel.Warning, $"Failed to retore from file. Trying to open it with old backup style. Path: {aFilePath}. Exception thrown: {ex}"); if (!TryRestoreFromOldBackupFile(lFileBytes, out lRestoredFile)) { lRestoredFile = null; } } if (lRestoredFile == null || (lRestoredFile.IsOldBackupData && lRestoredFile.ExchangeKeys == null) || (!lRestoredFile.IsOldBackupData && lRestoredFile.WalletData == null)) { throw new BackupExceptions.BadRecoveryFile($"Error reading recovery file {aFilePath}"); } return(lRestoredFile); }
public PandorasBackupObject ConvertOldFileToNewBackupObject(byte[] aFileByteArray) { var lOldBackupObject = RestoreInformationFromOldBackupFile(aFileByteArray); var lResultObject = new PandorasBackupObject { IsOldBackupData = true }; //Read SecretFile try { ProcessOldSecretFile(lOldBackupObject.Secret, out string lPasscode, out Dictionary <string, string[]> lExchangeKeys, out string aUserPassword); lResultObject.WalletSeeds = new string[1] { lPasscode }; lResultObject.ExchangeKeys = lExchangeKeys; lResultObject.PasswordHash = aUserPassword; } catch (Exception ex) { Log.Write($"Error reading old secret file. Exception: {ex}"); throw; } //Read settings file try { ProcessOldSettingsFile(lOldBackupObject.Setting, out long lDefaultCoin, out long[] lSelectedCoins); lResultObject.DefaultCoinID = lDefaultCoin; lResultObject.SelectedCoins = lSelectedCoins; } catch (Exception ex) { Log.Write($"Error reading old settings file. Exception: {ex}"); lResultObject.DefaultCoinID = 1; lResultObject.SelectedCoins = new long[1] { 1 }; } //Load .exchange file to object lResultObject.ExchangeData = new BackupSerializableObject() { Data = lOldBackupObject.Exchange }; return(lResultObject); }
private bool TryRestoreFromOldBackupFile(byte[] aOldBackupFile, out PandorasBackupObject aResultantBackupObject) { bool lResult = false; aResultantBackupObject = null; var lOldRestoreManager = new OldBackupFileConverter(); lOldRestoreManager.OnOldWalletPasswordNeeded += PromptUserForPassword;; try { aResultantBackupObject = lOldRestoreManager.ConvertOldFileToNewBackupObject(aOldBackupFile); lResult = true; } catch { lResult = false; } return(lResult); }
private void RestoreByFile() { try { string lPath = FRestoreWindow.RestoreFilePath; PandorasBackupObject lRestoredFile = GetRestoredFile(lPath); if (!lRestoredFile.IsOldBackupData && !VerifyRetoreFileOwnership(lRestoredFile)) { throw new BackupExceptions.BadRecoveryFile($"Unable to read recovery file {lPath}"); } RestoredObject = lRestoredFile; OnRecoveryObjectRestored?.Invoke(lRestoredFile); } catch (BackupExceptions.BadRecoveryFile) { throw; } catch (Exception ex) { Log.Write(LogLevel.Error, $"Exception during RestoreByFileProcess. Exception: {ex}"); throw ex; } }
public void Dispose() { FRestoreWindow.OnExecuteRestore -= RestoreWindow_OnExecuteRestore; FRestoreWindow = null; RestoredObject = null; }