コード例 #1
0
ファイル: DownloadHandler.cs プロジェクト: holpit/WinPass
        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;
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: WebList.xaml.cs プロジェクト: mroddy/8Pass
        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);
            }
        }
コード例 #4
0
ファイル: SdCardUpdater.cs プロジェクト: puffchumpy/codesafe
        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.");
            }
        }
コード例 #5
0
        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);
                }
            });
        }