Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/diev/fincert-client

Получение по API фидов и бюллетеней из FinCERT Банка России.
https://github.com/diev/fincert-client

api api-client feeds tls tls-client

Last synced: 6 days ago
JSON representation

Получение по API фидов и бюллетеней из FinCERT Банка России.

Awesome Lists containing this project

README

        

# FinCERT-Client

[![Build status](https://ci.appveyor.com/api/projects/status/hpsbfj3qds34i4yb?svg=true)](https://ci.appveyor.com/project/diev/fincert-client)
[![.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)
[![GitHub Release](https://img.shields.io/github/release/diev/FinCERT-Client.svg)](https://github.com/diev/FinCERT-Client/releases/latest)

Получение по API фидов и бюллетеней из FinCERT (АСОИ ФинЦЕРТ) Банка России.

Здесь два проекта:

* FeedsAPI - обновленный старый референсный проект из бюллетеня
FinCERT-20220304-INFO: "О получении фидов посредством API" для скачивания
фидов с добавлением двусторонней аутентификации TLS, которой в нем не было.
Развивать далее этот проект не планируется.
* FinCERT-Client - новый структурированный проект с добавлением Bulletins
API - возможность скачивать бюллетени и файлы к ним - в дополнение к фидам.

Эти программы работают и в ЗОЭ (прошли чек-лист), и в ЗПЭ, в режиме
read-only. Для предотвращения блокировки от DDoS, в программу вставлены
рекомендуемые задержки между запросами.

### Feeds API / Фиды

Фиды скачиваются актуальные, затирая прежние, контроль необходимости
обновления пока не ведется. Ставьте нужное время по Планировщику.

### Bulletins API / Бюллетени

Бюллетени скачиваются в отдельные папки с датой, временем, названием.
Внутри каждой папки есть файл Bulletin.txt, в котором то же, что видно и
в ЛК, а также все файлы, которые были приложениями к бюллетеню.

В первый раз будет скачано 100 (если не ограничить параметром `-limit`)
последних бюллетеней.

При последующих запусках будут скачиваться новые последние, пока не будет
достигнуто ограничение API в 100, ограничение параметром или встречена
папка, что была уже загружена ранее.

Чтобы скачать более ранние (за предел 100), нужно использовать параметр
`-offset`. Имейте в виду, что если этот параметр не 0, то отключается
прекращение скачивания при встрече ранее скачанной папки и будут скачаны
все недостающие, попавшие в этот лимит.

Если имя скачиваемого файла начинается с "feeds_20" (типа
feeds_20240703-03.zip), то его содержимое будет распаковано в две папки,
которые указаны в конфиге параметрами `MvdDownloads1` и `MvdDownloads2`.
Если имена этих папок совпадают, то будет распаковано только один раз.
Эта функциональность еще будет дорабатываться.

## Config / Конфигурация

При первом запуске и отсутствии файла конфигурации `FinCERT-Client.config.json`,
он создается рядом с программой с параметрами по умолчанию.
Никакие другие конфиги, переменные среды окружения и т.п. не используются.

Важно заполнить вашими данными значения параметров:

* `MyThumbprint` - отпечаток сертификата клиента, зарегистрированного на
сервере в ЛК и имеющего допуск к серверу;
* `Login` - учетная запись на сервере (логин);
* `Password` - пароль учетной записи.

Если пароль пуст, то программа попытается найти в *Диспетчере учетных
данных* (*Windows Credential Manager* в Панели управления) при запуске
на Windows учетку по строке из `Login` (создайте там учетку с именем
`FinCERT`, например).

Если указываете файловые пути, то по правилам JSON надо удваивать `\\`
в Windows и использовать `/` в Linux.

По окончании корректировки надо переключить параметр NewConfig = `true`
в `false` или удалить эту строчку полностью.

## Parameters / Опциональные параметры командной строки

* `-checklist` - сформировать в папке `BulletinsDownloads\CheckList`
комплект файлов для приложения к чек-листу на подключение.
* `-feeds` - получить время последнего обновления фидов на сервере.
Также это самый "экономичный" способ проверить функционирование программы.
* `-limit 100` - число от 1 до 100 - ограничение числа скачиваемых
бюллетеней. 100 - по умолчанию и максимум - это ограничение API - обойти
его невозможно - только указанием параметра `-offset`.
* `-offset 0` - число от 0 и выше - сдвиг начала скачиваемых бюллетеней.
0 - по умочанию. Указание этого параметра не 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 (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

## Breaking Changes / Важные изменения

Выяснилось, что механизм получения файла настроек, работавший в Windows
(одноименный и рядом с exe), в Linux дает неправильное размещение файла.
Пока пришлось жестко прописать имя файла в коде. Далее придется менять
эту схему именования, крайне удобную ранее.

## Versioning / Порядок версий

Номер версии программы указывается по нарастающему принципу и строится
от актуальной версии .NET на момент разработки и даты редакции:

* Актуальная версия .NET (8);
* Год текущей разработки (2024);
* Месяц без первого нуля и день редакции (624 - 24.06.2024);
* Номер билда, если указан - просто нарастающее число для внутренних отличий.

Продукт развивается для собственных нужд, а не по коробочной
стратегии, и поэтому *Breaking Changes* могут случаться чаще,
чем это принято в *SemVer*. Поэтому проще по датам актуализации кода.

При обновлении программы рекомендуется сохранить предыдущий конфиг,
удалить его из папки с программой, чтобы она создала новый, перенести
необходимые старые значения в новый конфиг перед новым запуском
программы.

## License / Лицензия

Licensed under the [Apache License, Version 2.0](LICENSE).
Вы можете использовать эти материалы под свою ответственность.

[![Telegram](https://img.shields.io/badge/t.me-dievdo-blue?logo=telegram)](https://t.me/dievdo)