コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 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;
     }
 }
コード例 #5
0
 public void Dispose()
 {
     FRestoreWindow.OnExecuteRestore -= RestoreWindow_OnExecuteRestore;
     FRestoreWindow = null;
     RestoredObject = null;
 }