public RestoreSyncDataResult RestoreBackupFromSyncFolder(string password)
        {
            var    restoreSyncDataResult = new RestoreSyncDataResult();
            string dbFilePath            = GetFullPathToDatabaseFile();

            try
            {
                if (!File.Exists(GetFullPathToSharedDatabaseFile()))
                {
                    restoreSyncDataResult.ErrorCode = RestoreSyncDataErrorCodes.MemoDatabaseFileNotFound;
                }
                else if (!File.Exists(GetFullPathToSharedEncryptedConfigFile()))
                {
                    restoreSyncDataResult.ErrorCode = restoreSyncDataResult.ErrorCode | RestoreSyncDataErrorCodes.ApplicationSettingsFileNotFound;
                }
                else
                {
                    var settings       = new StorageManagerSettings(true, Environment.ProcessorCount, true, ConfSaltVal + password + ConfSaltVal2);
                    var storageManager = new StorageManager(settings);

                    var secureMemoAppSettings = storageManager.DeserializeObjectFromFile <SecureMemoAppSettings>(GetFullPathToSharedEncryptedConfigFile(), null);

                    if (string.IsNullOrWhiteSpace(secureMemoAppSettings.ApplicationSaltValue) || string.IsNullOrWhiteSpace(secureMemoAppSettings.PasswordDerivedString))
                    {
                        restoreSyncDataResult.ErrorCode = restoreSyncDataResult.ErrorCode | RestoreSyncDataErrorCodes.ApplicationSettingsFileParseError;
                        restoreSyncDataResult.ErrorText = "Invalid password";
                    }
                    else
                    {
                        var s = _appSettingsService.Settings;
                        s.ApplicationSaltValue  = secureMemoAppSettings.ApplicationSaltValue;
                        s.PasswordDerivedString = secureMemoAppSettings.PasswordDerivedString;
                        s.FontSettings          = secureMemoAppSettings.FontSettings;
                        s.UseSharedSyncFolder   = secureMemoAppSettings.UseSharedSyncFolder;
                        s.DefaultEmptyTabPages  = secureMemoAppSettings.DefaultEmptyTabPages;
                        s.MainWindowHeight      = secureMemoAppSettings.MainWindowHeight;
                        s.MainWindowWith        = secureMemoAppSettings.MainWindowWith;
                        _appSettingsService.SaveSettings();
                        _appSettingsService.LoadSettings();

                        if (File.Exists(dbFilePath))
                        {
                            File.Delete(dbFilePath);
                        }

                        File.Copy(GetFullPathToSharedDatabaseFile(), dbFilePath);
                        restoreSyncDataResult.Successful = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Error when calling RestoreBackupFromSyncFolder() - {Message}", ex.Message);
                restoreSyncDataResult.ErrorText = ex.Message;
            }

            return(restoreSyncDataResult);
        }
Exemplo n.º 2
0
        private void RestoreDatabaseFromSyncPathMenuItem_Click(object sender, EventArgs e)
        {
            if (_applicationState.DatabaseExists &&
                MessageBox.Show("Are you sure that you want to replace the existing database?\nIt is recommended that you perform a backup before replacing the existing database!",
                                "Replace database from sync folder",
                                MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
            {
                return;
            }

            var formGetPassword = new FormGetPassword {
                UsePasswordValidation = false
            };

            if (formGetPassword.ShowDialog(this) != DialogResult.OK)
            {
                formGetPassword.Dispose();
                return;
            }


            string password = formGetPassword.PasswordString;

            _passwordStorage.Set("RestoreDatabaseFromSync", password);
            formGetPassword.Dispose();

            _applicationState.DatabaseLoaded = false;
            _appSettingsService.LoadSettings();
            InitFormSettings();

            RestoreSyncDataResult result = _logicManager.RestoreBackupFromSyncFolder();

            if (result.Successful)
            {
                MessageBox.Show("Database and app settings restored from sync folder.", "Restore complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
                _applicationState.DatabaseExists = true;
                UpdateApplicationState();
            }
            else
            {
                MessageBox.Show("Could not restore sync folder content: " + result.ErrorText, "Error restoring data", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }