FinCERT-Client
Описание
Получение фидов из FinCERT Банка России.
Языки
C#
- Batchfile
FinCERT-Client
Получение по API фидов и бюллетеней из FinCERT (АСОИ ФинЦЕРТ) Банка России.
Здесь два проекта:
- FeedsAPI - обновленный старый референсный проект из бюллетеня FinCERT-20220304-INFO: "О получении фидов посредством API" для скачивания фидов с добавлением двусторонней аутентификации TLS, которой в нем не было. Развивать далее этот проект не планируется.
- FinCERT-Client - новый структурированный проект с добавлением Bulletins API - возможность скачивать бюллетени и файлы к ним - в дополнение к фидам.
Эти программы работают и в ЗОЭ (прошли чек-лист), и в ЗПЭ, в режиме read-only. Для предотвращения блокировки от DDoS, в программу вставлены рекомендуемые задержки между запросами.
Feeds API / Фиды
Фиды скачиваются актуальные, затирая прежние, контроль необходимости обновления пока не ведется. Ставьте нужное время по Планировщику.
Bulletins API / Бюллетени
Бюллетени скачиваются в отдельные папки с датой, временем, названием. Внутри каждой папки есть файл Bulletin.txt, в котором то же, что видно и в ЛК, а также все файлы, которые были приложениями к бюллетеню.
В первый раз будет скачано 100 (если не ограничить параметром
)
последних бюллетеней.
При последующих запусках будут скачиваться новые последние, пока не будет достигнуто ограничение API в 100, ограничение параметром или встречена папка, что была уже загружена ранее.
Чтобы скачать более ранние (за предел 100), нужно использовать параметр
. Имейте в виду, что если этот параметр не 0, то отключается
прекращение скачивания при встрече ранее скачанной папки и будут скачаны
все недостающие, попавшие в этот лимит.
Если имя скачиваемого файла начинается с "feeds_20" (типа
feeds_20240703-03.zip), то его содержимое будет распаковано в две папки,
которые указаны в конфиге параметрами
и
.
Если имена этих папок совпадают, то будет распаковано только один раз.
Эта функциональность еще будет дорабатываться.
Config / Конфигурация
При первом запуске и отсутствии файла конфигурации
,
он создается рядом с программой с параметрами по умолчанию.
Никакие другие конфиги, переменные среды окружения и т.п. не используются.
Важно заполнить вашими данными значения параметров:
- отпечаток сертификата клиента, зарегистрированного на сервере в ЛК и имеющего допуск к серверу;MyThumbprint
- учетная запись на сервере (логин);Login
- пароль учетной записи.Password
Если пароль пуст, то программа попытается найти в Диспетчере учетных
данных (Windows Credential Manager в Панели управления) при запуске
на Windows учетку по строке из
(создайте там учетку с именем
, например).
Если указываете файловые пути, то по правилам JSON надо удваивать
в Windows и использовать
в Linux.
По окончании корректировки надо переключить параметр NewConfig =
в
или удалить эту строчку полностью.
Parameters / Опциональные параметры командной строки
- сформировать в папке-checklist
комплект файлов для приложения к чек-листу на подключение.BulletinsDownloads\CheckList
- получить время последнего обновления фидов на сервере. Также это самый "экономичный" способ проверить функционирование программы.-feeds
- число от 1 до 100 - ограничение числа скачиваемых бюллетеней. 100 - по умолчанию и максимум - это ограничение API - обойти его невозможно - только указанием параметра-limit 100
.-offset
- число от 0 и выше - сдвиг начала скачиваемых бюллетеней. 0 - по умочанию. Указание этого параметра не 0 переключает режим поведения при встрече ранее скачанной папки:-offset 0- 0 - скачивание прекращается;
- не 0 - ранее скачанная папка пропускается, продолжается перебор (в
пределах значения
).-limit
Первоначальное скачивание истории
При настройках по умолчанию (limit 100, offset 0) программа скачает в пустую папку при первом запуске все 100 последних бюллетеней. (Если это не требуется - можно указать limit меньше.)
Чтобы скачать далее, нужно (оставляя limit 100) наращивать при каждом запуске offset с шагом несколько менее 100 (90, 180, ...), так как за время скачивания могут появиться новые бюллетени, они встанут в начало списка, и вся их история сдвинется.
Программа и так не станет скачивать заново те бюллетени, что уже есть. А вот пропустить что-то, указывая offset ровно по границе с шагом 100 - вы можете.
Ежедневное пополнение
При настройках по умолчанию (limit 100, offset 0) программа скачает все новые бюллетени от начала списка до уже имеющегося и не пойдет дальше.
Exit codes / Коды возврата
- 0 - успешно;
- 1 - общая ошибка;
- далее специализированные (список пока может изменяться).
Requirements / Требования
- .NET 6-7-8-9 (Windows или Linux)
- КриптоПро CSP для установки соединения TLS
- Сертификат TLS клиента и цепочка доверия
- Логин и пароль
Stunnel программе не требуется - она сама поднимает соединение TLS.
Linux
Вариант Linux протестирован в WSL без установки КриптоПро.
Пример сборки проекта под Linux (укажите нужную версию .NET) из папки с файлом FinCERT-Client.csproj:
dotnet publish -r linux-x64 -f net8.0 --self-contained
Запуск из папки с файлами программы:
dotnet FinCERT-Client.dll
или (если сборка в один файл):
./FinCERT-Client
Breaking Changes / Важные изменения
Выяснилось, что механизм получения файла настроек, работавший в Windows (одноименный и рядом с exe), в Linux дает неправильное размещение файла. Пока пришлось жестко прописать имя файла в коде. Далее придется менять эту схему именования, крайне удобную ранее.
Versioning / Порядок версий
Номер версии программы указывается по нарастающему принципу и строится от актуальной версии .NET на момент разработки и даты редакции:
- Актуальная версия .NET (9);
- Год текущей разработки (2024);
- Месяц без первого нуля и день редакции (624 - 24.06.2024);
- Номер билда, если указан - просто нарастающее число для внутренних отличий.
Продукт развивается для собственных нужд, а не по коробочной стратегии, и поэтому Breaking Changes могут случаться чаще, чем это принято в SemVer. Поэтому проще по датам актуализации кода.
При обновлении программы рекомендуется сохранить предыдущий конфиг, удалить его из папки с программой, чтобы она создала новый, перенести необходимые старые значения в новый конфиг перед новым запуском программы.
License / Лицензия
Licensed under the Apache License, Version 2.0.
Вы можете использовать эти материалы под свою ответственность.