{"id":19099179,"url":"https://github.com/diev/fincert-client","last_synced_at":"2025-04-30T15:44:00.334Z","repository":{"id":248146656,"uuid":"822745745","full_name":"diev/FinCERT-Client","owner":"diev","description":"Получение по API фидов и бюллетеней из FinCERT Банка России.","archived":false,"fork":false,"pushed_at":"2024-07-26T17:41:23.000Z","size":107,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-07-26T19:26:41.660Z","etag":null,"topics":["api","api-client","feeds","tls","tls-client"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-01T18:26:44.000Z","updated_at":"2024-07-26T17:32:29.000Z","dependencies_parsed_at":"2024-07-12T18:24:28.099Z","dependency_job_id":null,"html_url":"https://github.com/diev/FinCERT-Client","commit_stats":null,"previous_names":["diev/fincert-client"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diev%2FFinCERT-Client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diev%2FFinCERT-Client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diev%2FFinCERT-Client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diev%2FFinCERT-Client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diev","download_url":"https://codeload.github.com/diev/FinCERT-Client/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223783118,"owners_count":17201903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-client","feeds","tls","tls-client"],"created_at":"2024-11-09T03:49:00.490Z","updated_at":"2025-04-18T17:31:12.678Z","avatar_url":"https://github.com/diev.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FinCERT-Client\n\n[![Build status](https://ci.appveyor.com/api/projects/status/hpsbfj3qds34i4yb?svg=true)](https://ci.appveyor.com/project/diev/fincert-client)\n[![.NET8 Desktop](https://github.com/diev/FinCERT-Client/actions/workflows/dotnet8-desktop.yml/badge.svg)](https://github.com/diev/FinCERT-Client/actions/workflows/dotnet8-desktop.yml)\n[![GitHub Release](https://img.shields.io/github/release/diev/FinCERT-Client.svg)](https://github.com/diev/FinCERT-Client/releases/latest)\n\nПолучение по API фидов и бюллетеней из FinCERT (АСОИ ФинЦЕРТ) Банка России.\n\nЗдесь два проекта:\n\n* FeedsAPI - обновленный старый референсный проект из бюллетеня\nFinCERT-20220304-INFO: \"О получении фидов посредством API\" для скачивания\nфидов с добавлением двусторонней аутентификации TLS, которой в нем не было.\nРазвивать далее этот проект не планируется.\n* FinCERT-Client - новый структурированный проект с добавлением Bulletins\nAPI - возможность скачивать бюллетени и файлы к ним - в дополнение к фидам.\n\nЭти программы работают и в ЗОЭ (прошли чек-лист), и в ЗПЭ, в режиме\nread-only. Для предотвращения блокировки от DDoS, в программу вставлены\nрекомендуемые задержки между запросами.\n\n### Feeds API / Фиды\n\nФиды скачиваются актуальные, затирая прежние, контроль необходимости\nобновления пока не ведется. Ставьте нужное время по Планировщику.\n\n### Bulletins API / Бюллетени \n\nБюллетени скачиваются в отдельные папки с датой, временем, названием.\nВнутри каждой папки есть файл Bulletin.txt, в котором то же, что видно и\nв ЛК, а также все файлы, которые были приложениями к бюллетеню.\n\nВ первый раз будет скачано 100 (если не ограничить параметром `-limit`)\nпоследних бюллетеней.\n\nПри последующих запусках будут скачиваться новые последние, пока не будет\nдостигнуто ограничение API в 100, ограничение параметром или встречена\nпапка, что была уже загружена ранее.\n\nЧтобы скачать более ранние (за предел 100), нужно использовать параметр\n`-offset`. Имейте в виду, что если этот параметр не 0, то отключается\nпрекращение скачивания при встрече ранее скачанной папки и будут скачаны\nвсе недостающие, попавшие в этот лимит.\n\nЕсли имя скачиваемого файла начинается с \"feeds_20\" (типа\nfeeds_20240703-03.zip), то его содержимое будет распаковано в две папки,\nкоторые указаны в конфиге параметрами `MvdDownloads1` и `MvdDownloads2`.\nЕсли имена этих папок совпадают, то будет распаковано только один раз.\nЭта функциональность еще будет дорабатываться.\n\n## Config / Конфигурация\n\nПри первом запуске и отсутствии файла конфигурации `FinCERT-Client.config.json`,\nон создается рядом с программой с параметрами по умолчанию.\nНикакие другие конфиги, переменные среды окружения и т.п. не используются.\n\nВажно заполнить вашими данными значения параметров:\n\n* `MyThumbprint` - отпечаток сертификата клиента, зарегистрированного на\nсервере в ЛК и имеющего допуск к серверу;\n* `Login` - учетная запись на сервере (логин);\n* `Password` - пароль учетной записи.\n\nЕсли пароль пуст, то программа попытается найти в *Диспетчере учетных\nданных* (*Windows Credential Manager* в Панели управления) при запуске\nна Windows учетку по строке из `Login` (создайте там учетку с именем\n`FinCERT`, например).\n\nЕсли указываете файловые пути, то по правилам JSON надо удваивать `\\\\`\nв Windows и использовать `/` в Linux.\n\nПо окончании корректировки надо переключить параметр NewConfig = `true`\nв `false` или удалить эту строчку полностью.\n\n## Parameters / Опциональные параметры командной строки\n\n* `-checklist` - сформировать в папке `BulletinsDownloads\\CheckList`\nкомплект файлов для приложения к чек-листу на подключение.\n* `-feeds` - получить время последнего обновления фидов на сервере.\nТакже это самый \"экономичный\" способ проверить функционирование программы.\n* `-limit 100` - число от 1 до 100 - ограничение числа скачиваемых\nбюллетеней. 100 - по умолчанию и максимум - это ограничение API - обойти\nего невозможно - только указанием параметра `-offset`.\n* `-offset 0` - число от 0 и выше - сдвиг начала скачиваемых бюллетеней.\n0 - по умочанию. Указание этого параметра не 0 переключает режим поведения\nпри встрече ранее скачанной папки:\n  * 0 - скачивание прекращается;\n  * не 0 - ранее скачанная папка пропускается, продолжается перебор (в\nпределах значения `-limit`).\n\n### Первоначальное скачивание истории\n\nПри настройках по умолчанию (limit 100, offset 0) программа скачает в\nпустую папку при первом запуске все 100 последних бюллетеней.\n(Если это не требуется - можно указать limit меньше.)\n\nЧтобы скачать далее, нужно (оставляя limit 100) наращивать при каждом\nзапуске offset с шагом несколько менее 100 (90, 180, ...), так как за\nвремя скачивания могут появиться новые бюллетени, они встанут в начало\nсписка, и вся их история сдвинется.\n\nПрограмма и так не станет скачивать заново те бюллетени, что уже есть.\nА вот пропустить что-то, указывая offset ровно по границе с шагом 100 -\nвы можете.\n\n### Ежедневное пополнение\n\nПри настройках по умолчанию (limit 100, offset 0) программа скачает все\nновые бюллетени от начала списка до уже имеющегося и не пойдет дальше.\n\n## Exit codes / Коды возврата\n\n* 0 - успешно;\n* 1 - общая ошибка;\n* далее специализированные (список пока может изменяться).\n\n## Requirements / Требования\n\n* .NET 6-7-8-9 (Windows или Linux)\n* КриптоПро CSP для установки соединения TLS\n* Сертификат TLS клиента и цепочка доверия\n* Логин и пароль\n\n*Stunnel* программе не требуется - она сама поднимает соединение TLS.\n\n## Linux\n\nВариант Linux протестирован в WSL без установки КриптоПро.\n\nПример сборки проекта под Linux (укажите нужную версию .NET) из папки\nс файлом FinCERT-Client.csproj:\n\n    dotnet publish -r linux-x64 -f net8.0 --self-contained\n\nЗапуск из папки с файлами программы:\n\n    dotnet FinCERT-Client.dll\n\nили (если сборка в один файл):\n\n    ./FinCERT-Client\n\n## Breaking Changes / Важные изменения\n\nВыяснилось, что механизм получения файла настроек, работавший в Windows\n(одноименный и рядом с exe), в Linux дает неправильное размещение файла.\nПока пришлось жестко прописать имя файла в коде. Далее придется менять\nэту схему именования, крайне удобную ранее.\n\n## Versioning / Порядок версий\n\nНомер версии программы указывается по нарастающему принципу и строится\nот актуальной версии .NET на момент разработки и даты редакции:\n\n* Актуальная версия .NET (9);\n* Год текущей разработки (2024);\n* Месяц без первого нуля и день редакции (624 - 24.06.2024);\n* Номер билда, если указан - просто нарастающее число для внутренних отличий.\n\nПродукт развивается для собственных нужд, а не по коробочной\nстратегии, и поэтому *Breaking Changes* могут случаться чаще,\nчем это принято в *SemVer*. Поэтому проще по датам актуализации кода.\n\nПри обновлении программы рекомендуется сохранить предыдущий конфиг,\nудалить его из папки с программой, чтобы она создала новый, перенести\nнеобходимые старые значения в новый конфиг перед новым запуском\nпрограммы.\n\n## License / Лицензия\n\nLicensed under the [Apache License, Version 2.0](LICENSE).  \nВы можете использовать эти материалы под свою ответственность.\n\n[![Telegram](https://img.shields.io/badge/t.me-dievdo-blue?logo=telegram)](https://t.me/dievdo)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiev%2Ffincert-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiev%2Ffincert-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiev%2Ffincert-client/lists"}