private void VerifyAndSaveDb(HttpWebRequest request, Dispatcher dispatcher, HttpWebResponse response, MemoryStream stream) { var check = DatabaseVerifier .VerifyUnattened(stream); switch (check.Result) { case VerifyResultTypes.Warning: dispatcher.BeginInvoke(() => MessageBox.Show(check.Message, Resources.DownloadTitle, MessageBoxButton.OK)); SaveDatabase(request, stream); break; case VerifyResultTypes.Pass: SaveDatabase(request, stream); break; case VerifyResultTypes.Error: // Not a database, try to extract links if (response.StatusCode != HttpStatusCode.OK || !DetectLinks(stream, request)) { dispatcher.BeginInvoke(() => MessageBox.Show(check.Message, Resources.DownloadTitle, MessageBoxButton.OK)); } break; } }
private void OnFileDownloaded(MetaListItemInfo item, string path, byte[] bytes) { var dispatcher = Dispatcher; try { using (var buffer = new MemoryStream(bytes)) { if (string.IsNullOrEmpty(_folder)) { if (!DatabaseVerifier.Verify(dispatcher, buffer)) { return; } var name = item.Title.RemoveKdbx(); var storage = new DatabaseInfo(); storage.SetDatabase(buffer, new DatabaseDetails { Url = path, Name = name, Modified = item.Modified, Type = SourceTypes.Synchronizable, Source = DatabaseUpdater.ONEDRIVE_UPDATER, }); dispatcher.BeginInvoke( this.BackToDBs); } else { var hash = KeyFile.GetKey(buffer); if (hash == null) { dispatcher.BeginInvoke(() => MessageBox.Show( Properties.Resources.InvalidKeyFile, Properties.Resources.KeyFileTitle, MessageBoxButton.OK)); return; } new DatabaseInfo(_folder) .SetKeyFile(hash); dispatcher.BeginInvoke( this.BackToDBPassword); } } } finally { dispatcher.BeginInvoke(() => progBusy.IsBusy = false); } }
private void OnFileDownloaded(byte[] file, string path, string title, string modified) { var dispatcher = Dispatcher; try { using (var buffer = new MemoryStream(file)) { if (string.IsNullOrEmpty(_folder)) { if (!DatabaseVerifier.Verify(dispatcher, buffer)) { return; } var storage = new DatabaseInfo(); storage.SetDatabase(buffer, new DatabaseDetails { Modified = modified, Name = title.RemoveKdbx(), Url = _client.GetUrl(path), Type = SourceTypes.Synchronizable, Source = DatabaseUpdater.WEBDAV_UPDATER, }); } else { var hash = KeyFile.GetKey(buffer); if (hash == null) { dispatcher.BeginInvoke(() => MessageBox.Show( Properties.Resources.InvalidKeyFile, Properties.Resources.KeyFileTitle, MessageBoxButton.OK)); return; } new DatabaseInfo(_folder) .SetKeyFile(hash); } } dispatcher.BeginInvoke( this.BackToDBs); } finally { dispatcher.BeginInvoke(() => progBusy.IsBusy = false); } }
public static async void Update(DatabaseInfo info, Func <DatabaseInfo, bool> queryUpdate, ReportUpdateResult report) { if (info == null) { throw new ArgumentNullException("info"); } if (queryUpdate == null) { throw new ArgumentNullException("queryUpdate"); } if (report == null) { throw new ArgumentNullException("report"); } // Connect to the current SD card. ExternalStorageDevice _sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault(); // If the SD card is present, add KDBX files to the Files collection. if (_sdCard != null) { try { // Look for a folder on the SD card named Files. ExternalStorageFolder dbFolder = await _sdCard.GetFolderAsync("CodeSafe"); // Get all files from the CodeSafe folder. IEnumerable <ExternalStorageFile> routeFiles = await dbFolder.GetFilesAsync(); bool found = false; foreach (ExternalStorageFile esf in routeFiles) { if (esf.Name.RemoveKdbx() == info.Details.Name) { found = true; Stream stream = await esf.OpenForReadAsync(); var check = DatabaseVerifier .VerifyUnattened(stream); if (check.Result == VerifyResultTypes.Error) { report(info, SyncResults.Failed, check.Message); return; } info.SetDatabase(stream, info.Details); report(info, SyncResults.Downloaded, null); break; } } if (!found) { MessageBox.Show("The original database file is not found in CodeSafe folder on your SD card anymore. Did you delete it?"); } } catch (FileNotFoundException) { // No CodeSafe folder is present. MessageBox.Show("The CodeSafe folder is missing on your SD card. Add a CodeSafe folder containing at least one .kdbx file and try again."); } } else { // No SD card is present. MessageBox.Show("The SD card is mssing. Insert an SD card that has a CodeSafe folder containing at least one .kdbx file and try again."); } }
public static void Update(DatabaseInfo info, Func <DatabaseInfo, bool> queryUpdate, ReportUpdateResult report) { if (info == null) { throw new ArgumentNullException("info"); } if (queryUpdate == null) { throw new ArgumentNullException("queryUpdate"); } if (report == null) { throw new ArgumentNullException("report"); } var details = info.Details; var urlInfo = WebUtils.Deserialize(details.Url); var credentials = WebUtils.CreateCredentials( urlInfo.User, urlInfo.Password, urlInfo.Domain); WebUtils.Download(urlInfo.Url, credentials, (req, getResponse) => { if (!queryUpdate(info)) { return; } HttpWebResponse res; try { res = getResponse(); } catch (WebException ex) { report(info, SyncResults.Failed, ex.Message); return; } using (var buffer = new MemoryStream()) { using (var stream = res.GetResponseStream()) { BufferEx.CopyStream(stream, buffer); buffer.Position = 0; } var check = DatabaseVerifier .VerifyUnattened(buffer); if (check.Result == VerifyResultTypes.Error) { report(info, SyncResults.Failed, check.Message); return; } info.SetDatabase(buffer, details); report(info, SyncResults.Downloaded, null); } }); }