private void GetPassword() { StatusChange(WorkerStatus.Start, "Получаю пароль..."); if (!File.Exists(CommonFunctions.TessCmd)) { StatusChange(WorkerStatus.FatalError, "Не найден tesseract.exe"); return; } //получаем HTML-страницу StatusChange(WorkerStatus.Process, "Загрузка: " + Settings.PageAddr); if (!Downloader.CreateRequest()) { StatusChange(WorkerStatus.FatalError, Downloader.ErrorMessage); return; } else { if (!Downloader.Send()) { StatusChange(WorkerStatus.FatalError, Downloader.ErrorMessage); return; } else { StatusChange(WorkerStatus.Complete, "OK"); } } StatusChange(WorkerStatus.Process, "Разбираю HTML-файл..."); MiniParser mp = new MiniParser(Workdir + HTMLPage); if (!mp.Load()) { StatusChange(WorkerStatus.FatalError, mp.ErrorMessage); return; } List <string> PassImages = mp.Select("password.php", mp.ParseTags("img", "src")); if (PassImages.Count < 1) { StatusChange(WorkerStatus.FatalError, "Ссылка на изображение не найдена!"); return; } string imagelink = PassImages[0].Replace(' ', '+'); StatusChange(WorkerStatus.Process, "Загрузка: " + Settings.PageAddr + imagelink); Downloader.URL = Settings.PageAddr + imagelink; Downloader.OutputFile = Workdir + "password.png"; if (!Downloader.CreateRequest()) { StatusChange(WorkerStatus.FatalError, Downloader.ErrorMessage); return; } else { if (!Downloader.Send()) { StatusChange(WorkerStatus.FatalError, Downloader.ErrorMessage); return; } else { StatusChange(WorkerStatus.Complete, "OK"); } } StatusChange(WorkerStatus.Process, "Запуск распознавания..."); if (!RunProcess.OpenProcess(CommonFunctions.TessCmd, Workdir + "password.png " + Workdir + "password")) { StatusChange(WorkerStatus.FatalError, RunProcess.ErrorMessage); return; } else { StatusChange(WorkerStatus.Complete, "Распознавание завершено."); } //чтение распознанного пароля if (!File.Exists(Workdir + "password.txt")) { StatusChange(WorkerStatus.FatalError, "Файл с результатами распознавания не найден!"); StatusChange(WorkerStatus.FatalError, "[" + Workdir + "password.txt]"); return; } StreamReader sr = null; try { sr = new StreamReader(Workdir + "password.txt"); RecognizedPass = sr.ReadLine(); sr.Close(); } catch (Exception ex) { if (sr != null) { sr.Close(); } StatusChange(WorkerStatus.FatalError, ex.Message); return; } if (string.IsNullOrEmpty(RecognizedPass)) { StatusChange(WorkerStatus.FatalError, "Пароль пустой!"); return; } StatusChange(WorkerStatus.Process, "Пароль: " + RecognizedPass); StatusChange(WorkerStatus.Wait, "Ожидаю данных от пользователя...", "PASSWORD"); if (CancelFlag) { StatusChange(WorkerStatus.FatalError, "Отменено пользователем."); return; } StatusChange(WorkerStatus.Process, "Сохраняемый пароль: " + RecognizedPass); StatusChange(WorkerStatus.Process, "Сохраняю в:"); StatusChange(WorkerStatus.Process, Settings.AuthFile); StreamWriter sw = null; try { sw = new StreamWriter(Settings.AuthFile); sw.WriteLine("vpnbook"); sw.WriteLine(RecognizedPass); sw.Close(); } catch (Exception ex) { if (sw != null) { sw.Close(); } StatusChange(WorkerStatus.FatalError, ex.Message); return; } StatusChange(WorkerStatus.Complete, "OK"); StatusChange(WorkerStatus.CompleteAll, "Процесс успешно завершен!"); }
private void GetConfigs() { StatusChange(WorkerStatus.Start, "Получаю файлы конфигурации..."); //получаем HTML-страницу StatusChange(WorkerStatus.Process, "Загрузка: " + Settings.PageAddr); if (!Downloader.CreateRequest()) { StatusChange(WorkerStatus.FatalError, Downloader.ErrorMessage); return; } else { if (!Downloader.Send()) { StatusChange(WorkerStatus.FatalError, Downloader.ErrorMessage); return; } else { StatusChange(WorkerStatus.Complete, "OK"); } } StatusChange(WorkerStatus.Process, "Разбираю HTML-файл..."); MiniParser mp = new MiniParser(Workdir + HTMLPage); if (!mp.Load()) { StatusChange(WorkerStatus.FatalError, mp.ErrorMessage); return; } List <string> ZIPFiles = mp.Select(".zip", mp.ParseTags("a", "href")); if (ZIPFiles.Count == 0) { StatusChange(WorkerStatus.FatalError, "ZIP-файлы не найдены!"); return; } foreach (string ZIPFile in ZIPFiles) { StatusChange(WorkerStatus.Process, "Обнаружен файл: " + ZIPFile); } StatusChange(WorkerStatus.Process, "Загрузка файлов: "); foreach (string ZIPFile in ZIPFiles) { string filename = GetUnixFilename(ZIPFile); StatusChange(WorkerStatus.Process, "Загрузка: " + filename); Downloader.URL = Settings.PageAddr + ZIPFile; Downloader.OutputFile = Workdir + filename; if (!Downloader.CreateRequest()) { StatusChange(WorkerStatus.NotComplete, Downloader.ErrorMessage); continue; } if (!Downloader.Send()) { StatusChange(WorkerStatus.NotComplete, Downloader.ErrorMessage); continue; } else { StatusChange(WorkerStatus.Complete, "OK"); } } StatusChange(WorkerStatus.Process, "Распаковка файлов: "); List <string> ZIPList = GetFilesList(Workdir, "*.zip"); if (ZIPList == null) { StatusChange(WorkerStatus.FatalError, ErrorMessage); return; } if (ZIPList.Count == 0) { StatusChange(WorkerStatus.FatalError, "ZIP-файлы для распаковки не найдены!"); return; } foreach (string filename in ZIPList) { StatusChange(WorkerStatus.Process, "Распаковка: " + filename); if (!Unzip.UnzipToDir(Workdir + filename, Unpdir)) { StatusChange(WorkerStatus.NotComplete, Unzip.ErrorMessage); } else { StatusChange(WorkerStatus.Complete, "OK"); } } StatusChange(WorkerStatus.Wait, "Ожидаю данных от пользователя...", "OPTIONS"); if (CancelFlag) { StatusChange(WorkerStatus.FatalError, "Отменено пользователем."); return; } OVPNList = GetFilesList(Unpdir, "*.ovpn"); if (OVPNList.Count == 0) { StatusChange(WorkerStatus.FatalError, "Файлы конфигурации *.ovpn не найдены!"); return; } StatusChange(WorkerStatus.Process, "Добавляю опции..."); foreach (string filename in OVPNList) { StatusChange(WorkerStatus.Process, filename); if (!AddOptions(Unpdir + filename)) { StatusChange(WorkerStatus.NotComplete, ErrorMessage); } else { StatusChange(WorkerStatus.Complete, "OK"); } } CancelFlag = false; StatusChange(WorkerStatus.Wait, "Ожидаю данных от пользователя...", "FILES"); if (CancelFlag) { StatusChange(WorkerStatus.FatalError, "Отменено пользователем."); return; } StatusChange(WorkerStatus.Process, "Копирование файлов..."); StatusChange(WorkerStatus.Process, "Целевой каталог: " + Settings.OutputDir); foreach (string s in SelectedFiles) { StatusChange(WorkerStatus.Process, s); try { File.Copy(Unpdir + s, Settings.OutputDir + s, true); StatusChange(WorkerStatus.Complete, "OK"); } catch (Exception ex) { StatusChange(WorkerStatus.NotComplete, ex.Message); } } StatusChange(WorkerStatus.CompleteAll, "Процесс успешно завершен!"); }