Unicode repair

This commit is contained in:
parent 2b8eff58ac
commit e264750187
49 changed files with 107 additions and 107 deletions

View file

@ -12,11 +12,11 @@
управление позициями UI-контейнеров. управление позициями UI-контейнеров.
- `/auth` (Auth): регистрация, аутентификация (JWT), сессии. - `/auth` (Auth): регистрация, аутентификация (JWT), сессии.
- `/subnet` (Subnet): сканирование подсетей, заметки к устройствам, - `/subnet` (Subnet): сканирование подсетей, заметки к устройствам,
взаимодействие с Wi‑Fi (скан/подключение/отключение/статус). взаимодействие с Wi-Fi (скан/подключение/отключение/статус).
- `WebSocket`: обработчики взаимодействия по WS (без префикса, путь внутри - `WebSocket`: обработчики взаимодействия по WS (без префикса, путь внутри
модуля), периодическая трансляция сетевых данных. модуля), периодическая трансляция сетевых данных.
- `/settings` (Settings): сервисные операции над локальными JSON‑хранилищами - `/settings` (Settings): сервисные операции над локальными JSON-хранилищами
(очистка данных подсетей/wi‑fi и пр.). (очистка данных подсетей/wi-fi и пр.).
Назначение: Назначение:
- Централизованная точка подключения доменных роутеров к приложению. - Централизованная точка подключения доменных роутеров к приложению.

View file

@ -3,7 +3,7 @@
Модуль инкапсулирует добавление middleware `CORSMiddleware` со списком Модуль инкапсулирует добавление middleware `CORSMiddleware` со списком
разрешённых источников (origins), характерных для локальной разработки и разрешённых источников (origins), характерных для локальной разработки и
типовых портов фронтенда (например, Vite/React на 5173/5174, dev‑серверы). типовых портов фронтенда (например, Vite/React на 5173/5174, dev-серверы).
Использование: Использование:
cors_config = CORSMiddlewareConfig(app) cors_config = CORSMiddlewareConfig(app)

View file

@ -3,7 +3,7 @@ from typing import Tuple
class CLIExecutor: class CLIExecutor:
"""Утилита для безопасного выполнения CLI‑команд. """Утилита для безопасного выполнения CLI-команд.
Назначение: Назначение:
Инкапсулирует вызов `subprocess.run` и приводит результат к удобному Инкапсулирует вызов `subprocess.run` и приводит результат к удобному

View file

@ -280,7 +280,7 @@
<span class="sd">Модуль инкапсулирует добавление middleware `CORSMiddleware` со списком</span> <span class="sd">Модуль инкапсулирует добавление middleware `CORSMiddleware` со списком</span>
<span class="sd">разрешённых источников (origins), характерных для локальной разработки и</span> <span class="sd">разрешённых источников (origins), характерных для локальной разработки и</span>
<span class="sd">типовых портов фронтенда (например, Vite/React на 5173/5174, dev‑серверы).</span> <span class="sd">типовых портов фронтенда (например, Vite/React на 5173/5174, dev-серверы).</span>
<span class="sd">Использование:</span> <span class="sd">Использование:</span>
<span class="sd"> cors_config = CORSMiddlewareConfig(app)</span> <span class="sd"> cors_config = CORSMiddlewareConfig(app)</span>

View file

@ -282,7 +282,7 @@
<div class="viewcode-block" id="CLIExecutor"> <div class="viewcode-block" id="CLIExecutor">
<a class="viewcode-back" href="../../api/core/cli_executor.html#core.cli_executor.CLIExecutor">[docs]</a> <a class="viewcode-back" href="../../api/core/cli_executor.html#core.cli_executor.CLIExecutor">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">CLIExecutor</span><span class="p">:</span> <span class="k">class</span><span class="w"> </span><span class="nc">CLIExecutor</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Утилита для безопасного выполнения CLI‑команд.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Утилита для безопасного выполнения CLI-команд.</span>
<span class="sd"> Назначение:</span> <span class="sd"> Назначение:</span>
<span class="sd"> Инкапсулирует вызов `subprocess.run` и приводит результат к удобному</span> <span class="sd"> Инкапсулирует вызов `subprocess.run` и приводит результат к удобному</span>

View file

@ -280,18 +280,18 @@
<span class="sd">Назначение:</span> <span class="sd">Назначение:</span>
<span class="sd">- Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP‑запросов от имени выбранного интерфейса.</span> <span class="sd">- Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP-запросов от имени выбранного интерфейса.</span>
<span class="sd">- Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.</span> <span class="sd">- Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.</span>
<span class="sd">Особенности реализации:</span> <span class="sd">Особенности реализации:</span>
<span class="sd">- Определяет подключённые сети интерфейса через `netifaces` и строит CIDR для сканирования.</span> <span class="sd">- Определяет подключённые сети интерфейса через `netifaces` и строит CIDR для сканирования.</span>
<span class="sd">- Формирует ARP‑пакеты с помощью `scapy` (Ether/ARP) и отправляет их с таймаутом.</span> <span class="sd">- Формирует ARP-пакеты с помощью `scapy` (Ether/ARP) и отправляет их с таймаутом.</span>
<span class="sd">- Добавляет локальный адрес интерфейса в результирующий список клиентов.</span> <span class="sd">- Добавляет локальный адрес интерфейса в результирующий список клиентов.</span>
<span class="sd">Требования/ограничения:</span> <span class="sd">Требования/ограничения:</span>
<span class="sd">- Для отправки ARP‑кадров могут потребоваться повышенные привилегии или capability на сырой сокет.</span> <span class="sd">- Для отправки ARP-кадров могут потребоваться повышенные привилегии или capability на сырой сокет.</span>
<span class="sd">&quot;&quot;&quot;</span> <span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">Depends</span> <span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">Depends</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.layers.l2</span><span class="w"> </span><span class="kn">import</span> <span class="n">ARP</span><span class="p">,</span> <span class="n">Ether</span> <span class="kn">from</span><span class="w"> </span><span class="nn">scapy.layers.l2</span><span class="w"> </span><span class="kn">import</span> <span class="n">ARP</span><span class="p">,</span> <span class="n">Ether</span>

View file

@ -276,7 +276,7 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<h1>Source code for services.connect_service</h1><div class="highlight"><pre> <h1>Source code for services.connect_service</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span> <span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Сервис управления подключениями Wi‑Fi через `nmcli`.</span> <span class="sd">Сервис управления подключениями Wi-Fi через `nmcli`.</span>
<span class="sd">Назначение:</span> <span class="sd">Назначение:</span>
@ -284,7 +284,7 @@
<span class="sd">Поведение:</span> <span class="sd">Поведение:</span>
<span class="sd">- Автоматически определяет активный Wi‑Fi‑интерфейс.</span> <span class="sd">- Автоматически определяет активный Wi-Fi-интерфейс.</span>
<span class="sd">- Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки `nmcli` (неверный пароль, отсутствующая сеть и т.п.).</span> <span class="sd">- Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки `nmcli` (неверный пароль, отсутствующая сеть и т.п.).</span>
<span class="sd">Ограничения:</span> <span class="sd">Ограничения:</span>

View file

@ -276,7 +276,7 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<h1>Source code for services.firewalld_service</h1><div class="highlight"><pre> <h1>Source code for services.firewalld_service</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span> <span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Сервис для управления firewalld через D‑Bus.</span> <span class="sd">Сервис для управления firewalld через D-Bus.</span>
<span class="sd">Назначение:</span> <span class="sd">Назначение:</span>
<span class="sd">- Обёртка над интерфейсами `org.fedoraproject.FirewallD1` для выполнения</span> <span class="sd">- Обёртка над интерфейсами `org.fedoraproject.FirewallD1` для выполнения</span>

View file

@ -276,7 +276,7 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<h1>Source code for services.ip_service</h1><div class="highlight"><pre> <h1>Source code for services.ip_service</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span> <span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Сервис проверки и применения IP‑настроек через NetworkManager (D‑Bus).</span> <span class="sd">Сервис проверки и применения IP-настроек через NetworkManager (D-Bus).</span>
<span class="sd">Назначение:</span> <span class="sd">Назначение:</span>
<span class="sd">- Перед применением конфигурации проверяет занятость IP адреса, сканируя сегмент</span> <span class="sd">- Перед применением конфигурации проверяет занятость IP адреса, сканируя сегмент</span>
@ -285,7 +285,7 @@
<span class="sd"> выполняет переподключение интерфейса.</span> <span class="sd"> выполняет переподключение интерфейса.</span>
<span class="sd">Требования/ограничения:</span> <span class="sd">Требования/ограничения:</span>
<span class="sd">- Доступ к системной шине D‑Bus и права на изменения сетевых профилей.</span> <span class="sd">- Доступ к системной шине D-Bus и права на изменения сетевых профилей.</span>
<span class="sd">- Структура входных данных должна соответствовать схеме `ipv4_updates` для</span> <span class="sd">- Структура входных данных должна соответствовать схеме `ipv4_updates` для</span>
<span class="sd"> корректного обновления вложенных полей у профиля.</span> <span class="sd"> корректного обновления вложенных полей у профиля.</span>
<span class="sd">&quot;&quot;&quot;</span> <span class="sd">&quot;&quot;&quot;</span>

View file

@ -276,16 +276,16 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<h1>Source code for services.network_service</h1><div class="highlight"><pre> <h1>Source code for services.network_service</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span> <span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Сервис чтения сетевого состояния через NetworkManager (D‑Bus).</span> <span class="sd">Сервис чтения сетевого состояния через NetworkManager (D-Bus).</span>
<span class="sd">Назначение:</span> <span class="sd">Назначение:</span>
<span class="sd">- Предоставляет асинхронные методы для сборки унифицированных моделей</span> <span class="sd">- Предоставляет асинхронные методы для сборки унифицированных моделей</span>
<span class="sd"> сетевых интерфейсов (Ethernet/Wi‑Fi), их IP‑конфигураций, а также получения</span> <span class="sd"> сетевых интерфейсов (Ethernet/Wi-Fi), их IP-конфигураций, а также получения</span>
<span class="sd"> имени хоста. Используется API‑слоем для визуализации и управления.</span> <span class="sd"> имени хоста. Используется API-слоем для визуализации и управления.</span>
<span class="sd">Особенности:</span> <span class="sd">Особенности:</span>
<span class="sd">- Фильтрация loopback и явно неактивных интерфейсов.</span> <span class="sd">- Фильтрация loopback и явно неактивных интерфейсов.</span>
<span class="sd">- Адаптация данных D‑Bus в pydantic‑модели (`NetworkInterface`, `WiFiDevice`,</span> <span class="sd">- Адаптация данных D-Bus в pydantic-модели (`NetworkInterface`, `WiFiDevice`,</span>
<span class="sd"> `NetworkInterfacesContainer`).</span> <span class="sd"> `NetworkInterfacesContainer`).</span>
<span class="sd">&quot;&quot;&quot;</span> <span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Optional</span> <span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Optional</span>

View file

@ -328,7 +328,7 @@
<span class="sd"> Назначение:</span> <span class="sd"> Назначение:</span>
<span class="sd"> Обнаруживает активные устройства в локальной сети, отправляя широковещательные</span> <span class="sd"> Обнаруживает активные устройства в локальной сети, отправляя широковещательные</span>
<span class="sd"> ARP‑запросы по указанной подсети и собирая ответы (IP, MAC).</span> <span class="sd"> ARP-запросы по указанной подсети и собирая ответы (IP, MAC).</span>
<span class="sd"> Детали реализации:</span> <span class="sd"> Детали реализации:</span>
<span class="sd"> - Использует `scapy` (`Ether` + `ARP`) для генерации пакетов и `srp` для</span> <span class="sd"> - Использует `scapy` (`Ether` + `ARP`) для генерации пакетов и `srp` для</span>
@ -393,7 +393,7 @@
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для сканирования открытых портов на устройствах.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для сканирования открытых портов на устройствах.</span>
<span class="sd"> Назначение:</span> <span class="sd"> Назначение:</span>
<span class="sd"> Плейсхолдер для будущего функционала активного сканирования TCP/UDP‑портов</span> <span class="sd"> Плейсхолдер для будущего функционала активного сканирования TCP/UDP-портов</span>
<span class="sd"> у обнаруженных узлов. В текущей версии возвращает пустой список.</span> <span class="sd"> у обнаруженных узлов. В текущей версии возвращает пустой список.</span>
<span class="sd"> План развития:</span> <span class="sd"> План развития:</span>
@ -438,7 +438,7 @@
<span class="sd"> Источники данных:</span> <span class="sd"> Источники данных:</span>
<span class="sd"> - MacLookup: сопоставление префикса MAC (OUI) с названием производителя.</span> <span class="sd"> - MacLookup: сопоставление префикса MAC (OUI) с названием производителя.</span>
<span class="sd"> - DNS: `gethostbyaddr` с малым таймаутом для обратного разрешения имени.</span> <span class="sd"> - DNS: `gethostbyaddr` с малым таймаутом для обратного разрешения имени.</span>
<span class="sd"> - NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS‑имён.</span> <span class="sd"> - NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS-имён.</span>
<span class="sd"> Политика кэширования:</span> <span class="sd"> Политика кэширования:</span>
<span class="sd"> - Результаты `get_vendor` кэшируются с помощью `functools.lru_cache`.</span> <span class="sd"> - Результаты `get_vendor` кэшируются с помощью `functools.lru_cache`.</span>
@ -552,13 +552,13 @@
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для хранения и управления данными об устройствах.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для хранения и управления данными об устройствах.</span>
<span class="sd"> Формат файла подсети:</span> <span class="sd"> Формат файла подсети:</span>
<span class="sd"> JSON‑структура вида</span> <span class="sd"> JSON-структура вида</span>
<span class="sd"> {</span> <span class="sd"> {</span>
<span class="sd"> &quot;devices&quot;: [Device, ...]</span> <span class="sd"> &quot;devices&quot;: [Device, ...]</span>
<span class="sd"> }</span> <span class="sd"> }</span>
<span class="sd"> Политика очистки:</span> <span class="sd"> Политика очистки:</span>
<span class="sd"> - Метод `_clean_old_devices` удаляет оффлайн‑устройства, не наблюдавшиеся</span> <span class="sd"> - Метод `_clean_old_devices` удаляет оффлайн-устройства, не наблюдавшиеся</span>
<span class="sd"> более 7 дней, чтобы поддерживать актуальность списка.</span> <span class="sd"> более 7 дней, чтобы поддерживать актуальность списка.</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;storage/subnets&quot;</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Translations</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;storage/subnets&quot;</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Translations</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
@ -699,8 +699,8 @@
<span class="sd"> 1) Определение подсети (вручную или авто по интерфейсу).</span> <span class="sd"> 1) Определение подсети (вручную или авто по интерфейсу).</span>
<span class="sd"> 2) Загрузка ранее сохранённых устройств подсети.</span> <span class="sd"> 2) Загрузка ранее сохранённых устройств подсети.</span>
<span class="sd"> 3) Добавление локального устройства (если принадлежит подсети).</span> <span class="sd"> 3) Добавление локального устройства (если принадлежит подсети).</span>
<span class="sd"> 4) ARP‑сканирование и параллельная обработка узлов (обогащение данных).</span> <span class="sd"> 4) ARP-сканирование и параллельная обработка узлов (обогащение данных).</span>
<span class="sd"> 5) Маркировка оффлайн‑узлов из кэша, не встреченных в текущем скане.</span> <span class="sd"> 5) Маркировка оффлайн-узлов из кэша, не встреченных в текущем скане.</span>
<span class="sd"> 6) Сортировка по IP и сохранение объединённого списка в JSON.</span> <span class="sd"> 6) Сортировка по IP и сохранение объединённого списка в JSON.</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Translations</span><span class="p">):</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Translations</span><span class="p">):</span>

View file

@ -300,7 +300,7 @@
<div class="viewcode-block" id="WifiStorage"> <div class="viewcode-block" id="WifiStorage">
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiStorage">[docs]</a> <a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiStorage">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">WifiStorage</span><span class="p">:</span> <span class="k">class</span><span class="w"> </span><span class="nc">WifiStorage</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для хранения данных о Wi‑Fi сетях и их заметках по SSID.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для хранения данных о Wi-Fi сетях и их заметках по SSID.</span>
<span class="sd"> Формат:</span> <span class="sd"> Формат:</span>
<span class="sd"> {</span> <span class="sd"> {</span>
@ -359,7 +359,7 @@
<div class="viewcode-block" id="WifiService"> <div class="viewcode-block" id="WifiService">
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService">[docs]</a> <a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">WifiService</span><span class="p">:</span> <span class="k">class</span><span class="w"> </span><span class="nc">WifiService</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Сервис для сканирования текущих Wi‑Fi точек доступа и заметок.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Сервис для сканирования текущих Wi-Fi точек доступа и заметок.</span>
<span class="sd"> Источники данных:</span> <span class="sd"> Источники данных:</span>
<span class="sd"> - `pywifi` для базового сканирования и получения списка AP.</span> <span class="sd"> - `pywifi` для базового сканирования и получения списка AP.</span>

View file

@ -296,7 +296,7 @@
<span class="sd"> где важна минимальная зависимость от внешних сервисов.</span> <span class="sd"> где важна минимальная зависимость от внешних сервисов.</span>
<span class="sd"> Формат данных:</span> <span class="sd"> Формат данных:</span>
<span class="sd"> JSON‑структура вида:</span> <span class="sd"> JSON-структура вида:</span>
<span class="sd"> {</span> <span class="sd"> {</span>
<span class="sd"> &quot;users&quot;: [</span> <span class="sd"> &quot;users&quot;: [</span>
<span class="sd"> {&quot;id&quot;: int, &quot;username&quot;: str, &quot;password_hash&quot;: str, &quot;is_admin&quot;: bool},</span> <span class="sd"> {&quot;id&quot;: int, &quot;username&quot;: str, &quot;password_hash&quot;: str, &quot;is_admin&quot;: bool},</span>

View file

@ -293,7 +293,7 @@
<span class="sd"> Назначение:</span> <span class="sd"> Назначение:</span>
<span class="sd"> Лёгкое файловое хранилище для сессионных токенов, сопоставленных с</span> <span class="sd"> Лёгкое файловое хранилище для сессионных токенов, сопоставленных с</span>
<span class="sd"> `client_id` (например, IP клиента). Предназначено для сред без БД и</span> <span class="sd"> `client_id` (например, IP клиента). Предназначено для сред без БД и</span>
<span class="sd"> persistent‑кэшей. Обеспечивает базовые операции и авто‑очистку протухших</span> <span class="sd"> persistent-кэшей. Обеспечивает базовые операции и авто-очистку протухших</span>
<span class="sd"> сессий.</span> <span class="sd"> сессий.</span>
<span class="sd"> Формат данных:</span> <span class="sd"> Формат данных:</span>

View file

@ -280,8 +280,8 @@
<span class="sd">Содержимое модуля:</span> <span class="sd">Содержимое модуля:</span>
<span class="sd"> - `get_translations()`: фабрика зависимости FastAPI, считывающая локаль из</span> <span class="sd"> - `get_translations()`: фабрика зависимости FastAPI, считывающая локаль из</span>
<span class="sd"> query‑параметра `locale`, cookie `locale` или заголовка `Accept-Language`</span> <span class="sd"> query-параметра `locale`, cookie `locale` или заголовка `Accept-Language`</span>
<span class="sd"> (по приоритету), с дефолтом `ru`. Возвращает функцию‑зависимость, которая</span> <span class="sd"> (по приоритету), с дефолтом `ru`. Возвращает функцию-зависимость, которая</span>
<span class="sd"> подгружает `babel.support.Translations` из каталога `SRV/locales`.</span> <span class="sd"> подгружает `babel.support.Translations` из каталога `SRV/locales`.</span>
<span class="sd"> - `_()`: удобная обёртка для получения перевода строки с использованием</span> <span class="sd"> - `_()`: удобная обёртка для получения перевода строки с использованием</span>
<span class="sd"> текущей локали (или дефолтного `ru`, если контекст запроса не передан).</span> <span class="sd"> текущей локали (или дефолтного `ru`, если контекст запроса не передан).</span>

View file

@ -286,7 +286,7 @@
<p>Конфигурация CORS для FastAPI-приложения GONETS.</p> <p>Конфигурация CORS для FastAPI-приложения GONETS.</p>
<p>Модуль инкапсулирует добавление middleware <cite>CORSMiddleware</cite> со списком <p>Модуль инкапсулирует добавление middleware <cite>CORSMiddleware</cite> со списком
разрешённых источников (origins), характерных для локальной разработки и разрешённых источников (origins), характерных для локальной разработки и
типовых портов фронтенда (например, Vite/React на 5173/5174, dev‑серверы).</p> типовых портов фронтенда (например, Vite/React на 5173/5174, dev-серверы).</p>
<dl class="simple"> <dl class="simple">
<dt>Использование:</dt><dd><p>cors_config = CORSMiddlewareConfig(app) <dt>Использование:</dt><dd><p>cors_config = CORSMiddlewareConfig(app)
cors_config.add_cors_middleware()</p> cors_config.add_cors_middleware()</p>

View file

@ -287,7 +287,7 @@
<dt class="sig sig-object py" id="core.cli_executor.CLIExecutor"> <dt class="sig sig-object py" id="core.cli_executor.CLIExecutor">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">core.cli_executor.</span></span><span class="sig-name descname"><span class="pre">CLIExecutor</span></span><a class="reference internal" href="../../_modules/core/cli_executor.html#CLIExecutor"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#core.cli_executor.CLIExecutor" title="Link to this definition"></a></dt> <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">core.cli_executor.</span></span><span class="sig-name descname"><span class="pre">CLIExecutor</span></span><a class="reference internal" href="../../_modules/core/cli_executor.html#CLIExecutor"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#core.cli_executor.CLIExecutor" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Утилита для безопасного выполнения CLI‑команд.</p> <p>Утилита для безопасного выполнения CLI-команд.</p>
<dl class="simple"> <dl class="simple">
<dt>Назначение:</dt><dd><p>Инкапсулирует вызов <cite>subprocess.run</cite> и приводит результат к удобному <dt>Назначение:</dt><dd><p>Инкапсулирует вызов <cite>subprocess.run</cite> и приводит результат к удобному
кортежу (код возврата, stdout) без генерации исключений при ошибках.</p> кортежу (код возврата, stdout) без генерации исключений при ошибках.</p>

View file

@ -286,18 +286,18 @@
<p>Сервис низкоуровневого ARP-сканирования локальной сети.</p> <p>Сервис низкоуровневого ARP-сканирования локальной сети.</p>
<p>Назначение:</p> <p>Назначение:</p>
<ul class="simple"> <ul class="simple">
<li><p>Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP‑запросов от имени выбранного интерфейса.</p></li> <li><p>Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP-запросов от имени выбранного интерфейса.</p></li>
<li><p>Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.</p></li> <li><p>Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.</p></li>
</ul> </ul>
<p>Особенности реализации:</p> <p>Особенности реализации:</p>
<ul class="simple"> <ul class="simple">
<li><p>Определяет подключённые сети интерфейса через <cite>netifaces</cite> и строит CIDR для сканирования.</p></li> <li><p>Определяет подключённые сети интерфейса через <cite>netifaces</cite> и строит CIDR для сканирования.</p></li>
<li><p>Формирует ARP‑пакеты с помощью <cite>scapy</cite> (Ether/ARP) и отправляет их с таймаутом.</p></li> <li><p>Формирует ARP-пакеты с помощью <cite>scapy</cite> (Ether/ARP) и отправляет их с таймаутом.</p></li>
<li><p>Добавляет локальный адрес интерфейса в результирующий список клиентов.</p></li> <li><p>Добавляет локальный адрес интерфейса в результирующий список клиентов.</p></li>
</ul> </ul>
<p>Требования/ограничения:</p> <p>Требования/ограничения:</p>
<ul class="simple"> <ul class="simple">
<li><p>Для отправки ARP‑кадров могут потребоваться повышенные привилегии или capability на сырой сокет.</p></li> <li><p>Для отправки ARP-кадров могут потребоваться повышенные привилегии или capability на сырой сокет.</p></li>
</ul> </ul>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="services.arp_service.NetworkScanner"> <dt class="sig sig-object py" id="services.arp_service.NetworkScanner">

View file

@ -283,14 +283,14 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<section id="module-services.connect_service"> <section id="module-services.connect_service">
<span id="connect-service"></span><h1>Connect Service<a class="headerlink" href="#module-services.connect_service" title="Link to this heading"></a></h1> <span id="connect-service"></span><h1>Connect Service<a class="headerlink" href="#module-services.connect_service" title="Link to this heading"></a></h1>
<p>Сервис управления подключениями Wi‑Fi через <cite>nmcli</cite>.</p> <p>Сервис управления подключениями Wi-Fi через <cite>nmcli</cite>.</p>
<p>Назначение:</p> <p>Назначение:</p>
<ul class="simple"> <ul class="simple">
<li><p>Предоставляет операции подключения/отключения к точкам доступа и проверки текущего статуса, ориентируясь на системный NetworkManager.</p></li> <li><p>Предоставляет операции подключения/отключения к точкам доступа и проверки текущего статуса, ориентируясь на системный NetworkManager.</p></li>
</ul> </ul>
<p>Поведение:</p> <p>Поведение:</p>
<ul class="simple"> <ul class="simple">
<li><p>Автоматически определяет активный Wi‑Fi‑интерфейс.</p></li> <li><p>Автоматически определяет активный Wi-Fi-интерфейс.</p></li>
<li><p>Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки <cite>nmcli</cite> (неверный пароль, отсутствующая сеть и т.п.).</p></li> <li><p>Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки <cite>nmcli</cite> (неверный пароль, отсутствующая сеть и т.п.).</p></li>
</ul> </ul>
<p>Ограничения:</p> <p>Ограничения:</p>

View file

@ -283,7 +283,7 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<section id="module-services.firewalld_service"> <section id="module-services.firewalld_service">
<span id="firewalld-service"></span><h1>Firewalld Service<a class="headerlink" href="#module-services.firewalld_service" title="Link to this heading"></a></h1> <span id="firewalld-service"></span><h1>Firewalld Service<a class="headerlink" href="#module-services.firewalld_service" title="Link to this heading"></a></h1>
<p>Сервис для управления firewalld через D‑Bus.</p> <p>Сервис для управления firewalld через D-Bus.</p>
<p>Назначение: <p>Назначение:
- Обёртка над интерфейсами <cite>org.fedoraproject.FirewallD1</cite> для выполнения</p> - Обёртка над интерфейсами <cite>org.fedoraproject.FirewallD1</cite> для выполнения</p>
<blockquote> <blockquote>

View file

@ -283,7 +283,7 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<section id="module-services.ip_service"> <section id="module-services.ip_service">
<span id="ip-service"></span><h1>IP Service<a class="headerlink" href="#module-services.ip_service" title="Link to this heading"></a></h1> <span id="ip-service"></span><h1>IP Service<a class="headerlink" href="#module-services.ip_service" title="Link to this heading"></a></h1>
<p>Сервис проверки и применения IP‑настроек через NetworkManager (D‑Bus).</p> <p>Сервис проверки и применения IP-настроек через NetworkManager (D-Bus).</p>
<p>Назначение: <p>Назначение:
- Перед применением конфигурации проверяет занятость IP адреса, сканируя сегмент</p> - Перед применением конфигурации проверяет занятость IP адреса, сканируя сегмент</p>
<blockquote> <blockquote>
@ -294,7 +294,7 @@
выполняет переподключение интерфейса.</p></li> выполняет переподключение интерфейса.</p></li>
</ul> </ul>
<p>Требования/ограничения: <p>Требования/ограничения:
- Доступ к системной шине D‑Bus и права на изменения сетевых профилей. - Доступ к системной шине D-Bus и права на изменения сетевых профилей.
- Структура входных данных должна соответствовать схеме <cite>ipv4_updates</cite> для</p> - Структура входных данных должна соответствовать схеме <cite>ipv4_updates</cite> для</p>
<blockquote> <blockquote>
<div><p>корректного обновления вложенных полей у профиля.</p> <div><p>корректного обновления вложенных полей у профиля.</p>

View file

@ -283,16 +283,16 @@
<article role="main" id="furo-main-content"> <article role="main" id="furo-main-content">
<section id="module-services.network_service"> <section id="module-services.network_service">
<span id="network-service"></span><h1>Network Service<a class="headerlink" href="#module-services.network_service" title="Link to this heading"></a></h1> <span id="network-service"></span><h1>Network Service<a class="headerlink" href="#module-services.network_service" title="Link to this heading"></a></h1>
<p>Сервис чтения сетевого состояния через NetworkManager (D‑Bus).</p> <p>Сервис чтения сетевого состояния через NetworkManager (D-Bus).</p>
<p>Назначение: <p>Назначение:
- Предоставляет асинхронные методы для сборки унифицированных моделей</p> - Предоставляет асинхронные методы для сборки унифицированных моделей</p>
<blockquote> <blockquote>
<div><p>сетевых интерфейсов (Ethernet/Wi‑Fi), их IP‑конфигураций, а также получения <div><p>сетевых интерфейсов (Ethernet/Wi-Fi), их IP-конфигураций, а также получения
имени хоста. Используется API‑слоем для визуализации и управления.</p> имени хоста. Используется API-слоем для визуализации и управления.</p>
</div></blockquote> </div></blockquote>
<p>Особенности: <p>Особенности:
- Фильтрация loopback и явно неактивных интерфейсов. - Фильтрация loopback и явно неактивных интерфейсов.
- Адаптация данных D‑Bus в pydantic‑модели (<cite>NetworkInterface</cite>, <cite>WiFiDevice</cite>,</p> - Адаптация данных D-Bus в pydantic-модели (<cite>NetworkInterface</cite>, <cite>WiFiDevice</cite>,</p>
<blockquote> <blockquote>
<div><p><cite>NetworkInterfacesContainer</cite>).</p> <div><p><cite>NetworkInterfacesContainer</cite>).</p>
</div></blockquote> </div></blockquote>

View file

@ -292,7 +292,7 @@
<dt>Источники данных:</dt><dd><ul class="simple"> <dt>Источники данных:</dt><dd><ul class="simple">
<li><p>MacLookup: сопоставление префикса MAC (OUI) с названием производителя.</p></li> <li><p>MacLookup: сопоставление префикса MAC (OUI) с названием производителя.</p></li>
<li><p>DNS: <cite>gethostbyaddr</cite> с малым таймаутом для обратного разрешения имени.</p></li> <li><p>DNS: <cite>gethostbyaddr</cite> с малым таймаутом для обратного разрешения имени.</p></li>
<li><p>NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS‑имён.</p></li> <li><p>NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS-имён.</p></li>
</ul> </ul>
</dd> </dd>
<dt>Политика кэширования:</dt><dd><ul class="simple"> <dt>Политика кэширования:</dt><dd><ul class="simple">
@ -347,7 +347,7 @@
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для хранения и управления данными об устройствах.</p> <p>Класс для хранения и управления данными об устройствах.</p>
<dl> <dl>
<dt>Формат файла подсети:</dt><dd><p>JSON‑структура вида <dt>Формат файла подсети:</dt><dd><p>JSON-структура вида
{</p> {</p>
<blockquote> <blockquote>
<div><p>“devices”: [Device, …]</p> <div><p>“devices”: [Device, …]</p>
@ -355,7 +355,7 @@
<p>}</p> <p>}</p>
</dd> </dd>
<dt>Политика очистки:</dt><dd><ul class="simple"> <dt>Политика очистки:</dt><dd><ul class="simple">
<li><p>Метод <cite>_clean_old_devices</cite> удаляет оффлайн‑устройства, не наблюдавшиеся <li><p>Метод <cite>_clean_old_devices</cite> удаляет оффлайн-устройства, не наблюдавшиеся
более 7 дней, чтобы поддерживать актуальность списка.</p></li> более 7 дней, чтобы поддерживать актуальность списка.</p></li>
</ul> </ul>
</dd> </dd>
@ -409,7 +409,7 @@ devices (List[Device]): Список устройств для сохранен
<p>Класс для сканирования подсети с использованием ARP-запросов.</p> <p>Класс для сканирования подсети с использованием ARP-запросов.</p>
<dl class="simple"> <dl class="simple">
<dt>Назначение:</dt><dd><p>Обнаруживает активные устройства в локальной сети, отправляя широковещательные <dt>Назначение:</dt><dd><p>Обнаруживает активные устройства в локальной сети, отправляя широковещательные
ARP‑запросы по указанной подсети и собирая ответы (IP, MAC).</p> ARP-запросы по указанной подсети и собирая ответы (IP, MAC).</p>
</dd> </dd>
<dt>Детали реализации:</dt><dd><ul class="simple"> <dt>Детали реализации:</dt><dd><ul class="simple">
<li><p>Использует <cite>scapy</cite> (<cite>Ether</cite> + <cite>ARP</cite>) для генерации пакетов и <cite>srp</cite> для <li><p>Использует <cite>scapy</cite> (<cite>Ether</cite> + <cite>ARP</cite>) для генерации пакетов и <cite>srp</cite> для
@ -449,7 +449,7 @@ ARP‑запросы по указанной подсети и собирая о
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для сканирования открытых портов на устройствах.</p> <p>Класс для сканирования открытых портов на устройствах.</p>
<dl class="simple"> <dl class="simple">
<dt>Назначение:</dt><dd><p>Плейсхолдер для будущего функционала активного сканирования TCP/UDP‑портов <dt>Назначение:</dt><dd><p>Плейсхолдер для будущего функционала активного сканирования TCP/UDP-портов
у обнаруженных узлов. В текущей версии возвращает пустой список.</p> у обнаруженных узлов. В текущей версии возвращает пустой список.</p>
</dd> </dd>
<dt>План развития:</dt><dd><ul class="simple"> <dt>План развития:</dt><dd><ul class="simple">
@ -489,8 +489,8 @@ ARP‑запросы по указанной подсети и собирая о
<li><p>Определение подсети (вручную или авто по интерфейсу).</p></li> <li><p>Определение подсети (вручную или авто по интерфейсу).</p></li>
<li><p>Загрузка ранее сохранённых устройств подсети.</p></li> <li><p>Загрузка ранее сохранённых устройств подсети.</p></li>
<li><p>Добавление локального устройства (если принадлежит подсети).</p></li> <li><p>Добавление локального устройства (если принадлежит подсети).</p></li>
<li><p>ARP‑сканирование и параллельная обработка узлов (обогащение данных).</p></li> <li><p>ARP-сканирование и параллельная обработка узлов (обогащение данных).</p></li>
<li><p>Маркировка оффлайн‑узлов из кэша, не встреченных в текущем скане.</p></li> <li><p>Маркировка оффлайн-узлов из кэша, не встреченных в текущем скане.</p></li>
<li><p>Сортировка по IP и сохранение объединённого списка в JSON.</p></li> <li><p>Сортировка по IP и сохранение объединённого списка в JSON.</p></li>
</ol> </ol>
</dd> </dd>

View file

@ -287,7 +287,7 @@
<dt class="sig sig-object py" id="services.wifi_service.WifiService"> <dt class="sig sig-object py" id="services.wifi_service.WifiService">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.wifi_service.</span></span><span class="sig-name descname"><span class="pre">WifiService</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Depends(translations_dependency)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/wifi_service.html#WifiService"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.wifi_service.WifiService" title="Link to this definition"></a></dt> <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.wifi_service.</span></span><span class="sig-name descname"><span class="pre">WifiService</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Depends(translations_dependency)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/wifi_service.html#WifiService"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.wifi_service.WifiService" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Сервис для сканирования текущих Wi‑Fi точек доступа и заметок.</p> <p>Сервис для сканирования текущих Wi-Fi точек доступа и заметок.</p>
<dl class="simple"> <dl class="simple">
<dt>Источники данных:</dt><dd><ul class="simple"> <dt>Источники данных:</dt><dd><ul class="simple">
<li><p><cite>pywifi</cite> для базового сканирования и получения списка AP.</p></li> <li><p><cite>pywifi</cite> для базового сканирования и получения списка AP.</p></li>
@ -338,7 +338,7 @@
<dt class="sig sig-object py" id="services.wifi_service.WifiStorage"> <dt class="sig sig-object py" id="services.wifi_service.WifiStorage">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.wifi_service.</span></span><span class="sig-name descname"><span class="pre">WifiStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">storage_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'storage/wifi/wifi.json'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Depends(translations_dependency)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/wifi_service.html#WifiStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.wifi_service.WifiStorage" title="Link to this definition"></a></dt> <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.wifi_service.</span></span><span class="sig-name descname"><span class="pre">WifiStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">storage_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'storage/wifi/wifi.json'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Depends(translations_dependency)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/wifi_service.html#WifiStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.wifi_service.WifiStorage" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для хранения данных о Wi‑Fi сетях и их заметках по SSID.</p> <p>Класс для хранения данных о Wi-Fi сетях и их заметках по SSID.</p>
<dl> <dl>
<dt>Формат:</dt><dd><dl class="simple"> <dt>Формат:</dt><dd><dl class="simple">
<dt>{</dt><dd><p>“networks”: [{“ssid”: str, “note”: Optional[str]}]</p> <dt>{</dt><dd><p>“networks”: [{“ssid”: str, “note”: Optional[str]}]</p>

View file

@ -293,7 +293,7 @@
без полноценной СУБД. Подходит для встраиваемых окружений и сценариев, без полноценной СУБД. Подходит для встраиваемых окружений и сценариев,
где важна минимальная зависимость от внешних сервисов.</p> где важна минимальная зависимость от внешних сервисов.</p>
</dd> </dd>
<dt>Формат данных:</dt><dd><p>JSON‑структура вида: <dt>Формат данных:</dt><dd><p>JSON-структура вида:
{</p> {</p>
<blockquote> <blockquote>
<div><dl class="simple"> <div><dl class="simple">

View file

@ -291,7 +291,7 @@
<dl> <dl>
<dt>Назначение:</dt><dd><p>Лёгкое файловое хранилище для сессионных токенов, сопоставленных с <dt>Назначение:</dt><dd><p>Лёгкое файловое хранилище для сессионных токенов, сопоставленных с
<cite>client_id</cite> (например, IP клиента). Предназначено для сред без БД и <cite>client_id</cite> (например, IP клиента). Предназначено для сред без БД и
persistent‑кэшей. Обеспечивает базовые операции и авто‑очистку протухших persistent-кэшей. Обеспечивает базовые операции и авто-очистку протухших
сессий.</p> сессий.</p>
</dd> </dd>
<dt>Формат данных:</dt><dd><dl> <dt>Формат данных:</dt><dd><dl>

View file

@ -287,8 +287,8 @@
<dl class="simple"> <dl class="simple">
<dt>Содержимое модуля:</dt><dd><ul class="simple"> <dt>Содержимое модуля:</dt><dd><ul class="simple">
<li><p><cite>get_translations()</cite>: фабрика зависимости FastAPI, считывающая локаль из <li><p><cite>get_translations()</cite>: фабрика зависимости FastAPI, считывающая локаль из
query‑параметра <cite>locale</cite>, cookie <cite>locale</cite> или заголовка <cite>Accept-Language</cite> query-параметра <cite>locale</cite>, cookie <cite>locale</cite> или заголовка <cite>Accept-Language</cite>
(по приоритету), с дефолтом <cite>ru</cite>. Возвращает функцию‑зависимость, которая (по приоритету), с дефолтом <cite>ru</cite>. Возвращает функцию-зависимость, которая
подгружает <cite>babel.support.Translations</cite> из каталога <cite>SRV/locales</cite>.</p></li> подгружает <cite>babel.support.Translations</cite> из каталога <cite>SRV/locales</cite>.</p></li>
<li><p><cite>_()</cite>: удобная обёртка для получения перевода строки с использованием <li><p><cite>_()</cite>: удобная обёртка для получения перевода строки с использованием
текущей локали (или дефолтного <cite>ru</cite>, если контекст запроса не передан).</p></li> текущей локали (или дефолтного <cite>ru</cite>, если контекст запроса не передан).</p></li>

View file

@ -4,7 +4,7 @@
Модуль инкапсулирует добавление middleware CORSMiddleware со списком Модуль инкапсулирует добавление middleware CORSMiddleware со списком
разрешённых источников (origins), характерных для локальной разработки и разрешённых источников (origins), характерных для локальной разработки и
типовых портов фронтенда (например, Vite/React на 5173/5174, dev‑серверы). типовых портов фронтенда (например, Vite/React на 5173/5174, dev-серверы).
Использование: Использование:
: cors_config = CORSMiddlewareConfig(app) : cors_config = CORSMiddlewareConfig(app)

View file

@ -4,7 +4,7 @@
Bases: `object` Bases: `object`
Утилита для безопасного выполнения CLI‑команд. Утилита для безопасного выполнения CLI-команд.
Назначение: Назначение:
: Инкапсулирует вызов subprocess.run и приводит результат к удобному : Инкапсулирует вызов subprocess.run и приводит результат к удобному

View file

@ -4,18 +4,18 @@
Назначение: Назначение:
- Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP‑запросов от имени выбранного интерфейса. - Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP-запросов от имени выбранного интерфейса.
- Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций. - Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.
Особенности реализации: Особенности реализации:
- Определяет подключённые сети интерфейса через netifaces и строит CIDR для сканирования. - Определяет подключённые сети интерфейса через netifaces и строит CIDR для сканирования.
- Формирует ARP‑пакеты с помощью scapy (Ether/ARP) и отправляет их с таймаутом. - Формирует ARP-пакеты с помощью scapy (Ether/ARP) и отправляет их с таймаутом.
- Добавляет локальный адрес интерфейса в результирующий список клиентов. - Добавляет локальный адрес интерфейса в результирующий список клиентов.
Требования/ограничения: Требования/ограничения:
- Для отправки ARP‑кадров могут потребоваться повышенные привилегии или capability на сырой сокет. - Для отправки ARP-кадров могут потребоваться повышенные привилегии или capability на сырой сокет.
### *class* services.arp_service.NetworkScanner(interface=None, translations: Translations = Depends(translations_dependency)) ### *class* services.arp_service.NetworkScanner(interface=None, translations: Translations = Depends(translations_dependency))

View file

@ -1,6 +1,6 @@
# Connect Service # Connect Service
Сервис управления подключениями Wi‑Fi через nmcli. Сервис управления подключениями Wi-Fi через nmcli.
Назначение: Назначение:
@ -8,7 +8,7 @@
Поведение: Поведение:
- Автоматически определяет активный Wi‑Fi‑интерфейс. - Автоматически определяет активный Wi-Fi-интерфейс.
- Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки nmcli (неверный пароль, отсутствующая сеть и т.п.). - Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки nmcli (неверный пароль, отсутствующая сеть и т.п.).
Ограничения: Ограничения:

View file

@ -1,6 +1,6 @@
# Firewalld Service # Firewalld Service
Сервис для управления firewalld через D‑Bus. Сервис для управления firewalld через D-Bus.
Назначение: Назначение:

View file

@ -1,6 +1,6 @@
# IP Service # IP Service
Сервис проверки и применения IP‑настроек через NetworkManager (D‑Bus). Сервис проверки и применения IP-настроек через NetworkManager (D-Bus).
Назначение: Назначение:
@ -9,7 +9,7 @@
Требования/ограничения: Требования/ограничения:
- Доступ к системной шине D‑Bus и права на изменения сетевых профилей. - Доступ к системной шине D-Bus и права на изменения сетевых профилей.
- Структура входных данных должна соответствовать схеме ipv4_updates для корректного обновления вложенных полей у профиля. - Структура входных данных должна соответствовать схеме ipv4_updates для корректного обновления вложенных полей у профиля.
### *class* services.ip_service.IPService ### *class* services.ip_service.IPService

View file

@ -1,15 +1,15 @@
# Network Service # Network Service
Сервис чтения сетевого состояния через NetworkManager (D‑Bus). Сервис чтения сетевого состояния через NetworkManager (D-Bus).
Назначение: Назначение:
- Предоставляет асинхронные методы для сборки унифицированных моделей сетевых интерфейсов (Ethernet/Wi‑Fi), их IP‑конфигураций, а также получения имени хоста. Используется API‑слоем для визуализации и управления. - Предоставляет асинхронные методы для сборки унифицированных моделей сетевых интерфейсов (Ethernet/Wi-Fi), их IP-конфигураций, а также получения имени хоста. Используется API-слоем для визуализации и управления.
Особенности: Особенности:
- Фильтрация loopback и явно неактивных интерфейсов. - Фильтрация loopback и явно неактивных интерфейсов.
- Адаптация данных D‑Bus в pydantic‑модели (NetworkInterface, WiFiDevice, NetworkInterfacesContainer). - Адаптация данных D-Bus в pydantic-модели (NetworkInterface, WiFiDevice, NetworkInterfacesContainer).
### *class* services.network_service.NetworkService(translations: Translations = Depends(translations_dependency)) ### *class* services.network_service.NetworkService(translations: Translations = Depends(translations_dependency))

View file

@ -9,7 +9,7 @@ Bases: `object`
Источники данных: Источники данных:
: - MacLookup: сопоставление префикса MAC (OUI) с названием производителя. : - MacLookup: сопоставление префикса MAC (OUI) с названием производителя.
- DNS: gethostbyaddr с малым таймаутом для обратного разрешения имени. - DNS: gethostbyaddr с малым таймаутом для обратного разрешения имени.
- NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS‑имён. - NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS-имён.
Политика кэширования: Политика кэширования:
: - Результаты get_vendor кэшируются с помощью functools.lru_cache. : - Результаты get_vendor кэшируются с помощью functools.lru_cache.
@ -67,7 +67,7 @@ Bases: `object`
Политика очистки: Политика очистки:
- Метод \_clean_old_devices удаляет оффлайн‑устройства, не наблюдавшиеся более 7 дней, - Метод \_clean_old_devices удаляет оффлайн-устройства, не наблюдавшиеся более 7 дней,
чтобы поддерживать актуальность списка. чтобы поддерживать актуальность списка.
#### get_subnet_file(subnet: str) → Path #### get_subnet_file(subnet: str) → Path
@ -116,7 +116,7 @@ Bases: `object`
Назначение: Назначение:
: Обнаруживает активные устройства в локальной сети, отправляя широковещательные : Обнаруживает активные устройства в локальной сети, отправляя широковещательные
ARP‑запросы по указанной подсети и собирая ответы (IP, MAC). ARP-запросы по указанной подсети и собирая ответы (IP, MAC).
Детали реализации: Детали реализации:
: - Использует scapy (Ether + ARP) для генерации пакетов и srp для : - Использует scapy (Ether + ARP) для генерации пакетов и srp для
@ -152,7 +152,7 @@ Bases: `object`
Класс для сканирования открытых портов на устройствах. Класс для сканирования открытых портов на устройствах.
Назначение: Назначение:
: Плейсхолдер для будущего функционала активного сканирования TCP/UDP‑портов : Плейсхолдер для будущего функционала активного сканирования TCP/UDP-портов
у обнаруженных узлов. В текущей версии возвращает пустой список. у обнаруженных узлов. В текущей версии возвращает пустой список.
План развития: План развития:
@ -189,8 +189,8 @@ Bases: `object`
: 1. Определение подсети (вручную или авто по интерфейсу). : 1. Определение подсети (вручную или авто по интерфейсу).
2. Загрузка ранее сохранённых устройств подсети. 2. Загрузка ранее сохранённых устройств подсети.
3. Добавление локального устройства (если принадлежит подсети). 3. Добавление локального устройства (если принадлежит подсети).
4. ARP‑сканирование и параллельная обработка узлов (обогащение данных). 4. ARP-сканирование и параллельная обработка узлов (обогащение данных).
5. Маркировка оффлайн‑узлов из кэша, не встреченных в текущем скане. 5. Маркировка оффлайн-узлов из кэша, не встреченных в текущем скане.
6. Сортировка по IP и сохранение объединённого списка в JSON. 6. Сортировка по IP и сохранение объединённого списка в JSON.
#### add_note(mac: str, note: str, translations: Translations) → Tuple[bool, Tuple[str, Dict] | None] #### add_note(mac: str, note: str, translations: Translations) → Tuple[bool, Tuple[str, Dict] | None]

View file

@ -4,7 +4,7 @@
Bases: `object` Bases: `object`
Сервис для сканирования текущих Wi‑Fi точек доступа и заметок. Сервис для сканирования текущих Wi-Fi точек доступа и заметок.
Источники данных: Источники данных:
: - pywifi для базового сканирования и получения списка AP. : - pywifi для базового сканирования и получения списка AP.
@ -40,7 +40,7 @@ Bases: `object`
Bases: `object` Bases: `object`
Класс для хранения данных о Wi‑Fi сетях и их заметках по SSID. Класс для хранения данных о Wi-Fi сетях и их заметках по SSID.
Формат: Формат:
: { : {

View file

@ -12,7 +12,7 @@ Bases: `object`
где важна минимальная зависимость от внешних сервисов. где важна минимальная зависимость от внешних сервисов.
Формат данных: Формат данных:
: JSON‑структура вида: : JSON-структура вида:
{ {
<br/> <br/>
> “users”: [ > “users”: [

View file

@ -9,7 +9,7 @@ Bases: `object`
Назначение: Назначение:
: Лёгкое файловое хранилище для сессионных токенов, сопоставленных с : Лёгкое файловое хранилище для сессионных токенов, сопоставленных с
client_id (например, IP клиента). Предназначено для сред без БД и client_id (например, IP клиента). Предназначено для сред без БД и
persistent‑кэшей. Обеспечивает базовые операции и авто‑очистку протухших persistent-кэшей. Обеспечивает базовые операции и авто-очистку протухших
сессий. сессий.
Формат данных: Формат данных:

View file

@ -4,8 +4,8 @@
Содержимое модуля: Содержимое модуля:
: - get_translations(): фабрика зависимости FastAPI, считывающая локаль из : - get_translations(): фабрика зависимости FastAPI, считывающая локаль из
query‑параметра locale, cookie locale или заголовка Accept-Language query-параметра locale, cookie locale или заголовка Accept-Language
(по приоритету), с дефолтом ru. Возвращает функцию‑зависимость, которая (по приоритету), с дефолтом ru. Возвращает функцию-зависимость, которая
подгружает babel.support.Translations из каталога SRV/locales. подгружает babel.support.Translations из каталога SRV/locales.
- \_(): удобная обёртка для получения перевода строки с использованием - \_(): удобная обёртка для получения перевода строки с использованием
текущей локали (или дефолтного ru, если контекст запроса не передан). текущей локали (или дефолтного ru, если контекст запроса не передан).

View file

@ -3,18 +3,18 @@
Назначение: Назначение:
- Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP‑запросов от имени выбранного интерфейса. - Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP-запросов от имени выбранного интерфейса.
- Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций. - Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.
Особенности реализации: Особенности реализации:
- Определяет подключённые сети интерфейса через `netifaces` и строит CIDR для сканирования. - Определяет подключённые сети интерфейса через `netifaces` и строит CIDR для сканирования.
- Формирует ARP‑пакеты с помощью `scapy` (Ether/ARP) и отправляет их с таймаутом. - Формирует ARP-пакеты с помощью `scapy` (Ether/ARP) и отправляет их с таймаутом.
- Добавляет локальный адрес интерфейса в результирующий список клиентов. - Добавляет локальный адрес интерфейса в результирующий список клиентов.
Требования/ограничения: Требования/ограничения:
- Для отправки ARP‑кадров могут потребоваться повышенные привилегии или capability на сырой сокет. - Для отправки ARP-кадров могут потребоваться повышенные привилегии или capability на сырой сокет.
""" """
from fastapi import Depends from fastapi import Depends
from scapy.layers.l2 import ARP, Ether from scapy.layers.l2 import ARP, Ether

View file

@ -1,5 +1,5 @@
""" """
Сервис управления подключениями Wi‑Fi через `nmcli`. Сервис управления подключениями Wi-Fi через `nmcli`.
Назначение: Назначение:
@ -7,7 +7,7 @@
Поведение: Поведение:
- Автоматически определяет активный Wi‑Fi‑интерфейс. - Автоматически определяет активный Wi-Fi-интерфейс.
- Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки `nmcli` (неверный пароль, отсутствующая сеть и т.п.). - Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки `nmcli` (неверный пароль, отсутствующая сеть и т.п.).
Ограничения: Ограничения:

View file

@ -1,5 +1,5 @@
""" """
Сервис для управления firewalld через D‑Bus. Сервис для управления firewalld через D-Bus.
Назначение: Назначение:

View file

@ -1,5 +1,5 @@
""" """
Сервис проверки и применения IP‑настроек через NetworkManager (D‑Bus). Сервис проверки и применения IP-настроек через NetworkManager (D-Bus).
Назначение: Назначение:
@ -8,7 +8,7 @@
Требования/ограничения: Требования/ограничения:
- Доступ к системной шине D‑Bus и права на изменения сетевых профилей. - Доступ к системной шине D-Bus и права на изменения сетевых профилей.
- Структура входных данных должна соответствовать схеме `ipv4_updates` для корректного обновления вложенных полей у профиля. - Структура входных данных должна соответствовать схеме `ipv4_updates` для корректного обновления вложенных полей у профиля.
""" """
from typing import Dict, Any from typing import Dict, Any

View file

@ -1,14 +1,14 @@
""" """
Сервис чтения сетевого состояния через NetworkManager (D‑Bus). Сервис чтения сетевого состояния через NetworkManager (D-Bus).
Назначение: Назначение:
- Предоставляет асинхронные методы для сборки унифицированных моделей сетевых интерфейсов (Ethernet/Wi‑Fi), их IP‑конфигураций, а также получения имени хоста. Используется API‑слоем для визуализации и управления. - Предоставляет асинхронные методы для сборки унифицированных моделей сетевых интерфейсов (Ethernet/Wi-Fi), их IP-конфигураций, а также получения имени хоста. Используется API-слоем для визуализации и управления.
Особенности: Особенности:
- Фильтрация loopback и явно неактивных интерфейсов. - Фильтрация loopback и явно неактивных интерфейсов.
- Адаптация данных D‑Bus в pydantic‑модели (`NetworkInterface`, `WiFiDevice`, `NetworkInterfacesContainer`). - Адаптация данных D-Bus в pydantic-модели (`NetworkInterface`, `WiFiDevice`, `NetworkInterfacesContainer`).
""" """
from typing import List, Dict, Tuple, Union, Optional from typing import List, Dict, Tuple, Union, Optional
from sdbus_async.networkmanager import ( from sdbus_async.networkmanager import (

View file

@ -46,7 +46,7 @@ class NetworkScanner:
Назначение: Назначение:
Обнаруживает активные устройства в локальной сети, отправляя широковещательные Обнаруживает активные устройства в локальной сети, отправляя широковещательные
ARP‑запросы по указанной подсети и собирая ответы (IP, MAC). ARP-запросы по указанной подсети и собирая ответы (IP, MAC).
Детали реализации: Детали реализации:
- Использует `scapy` (`Ether` + `ARP`) для генерации пакетов и `srp` для - Использует `scapy` (`Ether` + `ARP`) для генерации пакетов и `srp` для
@ -105,7 +105,7 @@ class PortScanner:
"""Класс для сканирования открытых портов на устройствах. """Класс для сканирования открытых портов на устройствах.
Назначение: Назначение:
Плейсхолдер для будущего функционала активного сканирования TCP/UDP‑портов Плейсхолдер для будущего функционала активного сканирования TCP/UDP-портов
у обнаруженных узлов. В текущей версии возвращает пустой список. у обнаруженных узлов. В текущей версии возвращает пустой список.
План развития: План развития:
@ -144,7 +144,7 @@ class DeviceInfoCollector:
Источники данных: Источники данных:
- MacLookup: сопоставление префикса MAC (OUI) с названием производителя. - MacLookup: сопоставление префикса MAC (OUI) с названием производителя.
- DNS: `gethostbyaddr` с малым таймаутом для обратного разрешения имени. - DNS: `gethostbyaddr` с малым таймаутом для обратного разрешения имени.
- NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS‑имён. - NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS-имён.
Политика кэширования: Политика кэширования:
- Результаты `get_vendor` кэшируются с помощью `functools.lru_cache`. - Результаты `get_vendor` кэшируются с помощью `functools.lru_cache`.
@ -253,7 +253,7 @@ class DeviceStorage:
Политика очистки: Политика очистки:
- Метод `_clean_old_devices` удаляет оффлайн‑устройства, не наблюдавшиеся более 7 дней, - Метод `_clean_old_devices` удаляет оффлайн-устройства, не наблюдавшиеся более 7 дней,
чтобы поддерживать актуальность списка. чтобы поддерживать актуальность списка.
""" """
def __init__(self, base_path: str = "storage/subnets", translations: Translations = None): def __init__(self, base_path: str = "storage/subnets", translations: Translations = None):
@ -382,8 +382,8 @@ class SubnetService:
1) Определение подсети (вручную или авто по интерфейсу). 1) Определение подсети (вручную или авто по интерфейсу).
2) Загрузка ранее сохранённых устройств подсети. 2) Загрузка ранее сохранённых устройств подсети.
3) Добавление локального устройства (если принадлежит подсети). 3) Добавление локального устройства (если принадлежит подсети).
4) ARP‑сканирование и параллельная обработка узлов (обогащение данных). 4) ARP-сканирование и параллельная обработка узлов (обогащение данных).
5) Маркировка оффлайн‑узлов из кэша, не встреченных в текущем скане. 5) Маркировка оффлайн-узлов из кэша, не встреченных в текущем скане.
6) Сортировка по IP и сохранение объединённого списка в JSON. 6) Сортировка по IP и сохранение объединённого списка в JSON.
""" """
def __init__(self, translations: Translations): def __init__(self, translations: Translations):

View file

@ -21,7 +21,7 @@ logging.basicConfig(
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class WifiStorage: class WifiStorage:
"""Класс для хранения данных о Wi‑Fi сетях и их заметках по SSID. """Класс для хранения данных о Wi-Fi сетях и их заметках по SSID.
Формат: Формат:
{ {
@ -71,7 +71,7 @@ class WifiStorage:
raise Exception(self.translations.gettext("Ошибка при сохранении заметок: {error}").format(error=str(e))) raise Exception(self.translations.gettext("Ошибка при сохранении заметок: {error}").format(error=str(e)))
class WifiService: class WifiService:
"""Сервис для сканирования текущих Wi‑Fi точек доступа и заметок. """Сервис для сканирования текущих Wi-Fi точек доступа и заметок.
Источники данных: Источники данных:
- `pywifi` для базового сканирования и получения списка AP. - `pywifi` для базового сканирования и получения списка AP.

View file

@ -17,7 +17,7 @@ class JsonStorage:
где важна минимальная зависимость от внешних сервисов. где важна минимальная зависимость от внешних сервисов.
Формат данных: Формат данных:
JSON‑структура вида: JSON-структура вида:
{ {
"users": [ "users": [
{"id": int, "username": str, "password_hash": str, "is_admin": bool}, {"id": int, "username": str, "password_hash": str, "is_admin": bool},

View file

@ -14,7 +14,7 @@ class SessionStorage:
Назначение: Назначение:
Лёгкое файловое хранилище для сессионных токенов, сопоставленных с Лёгкое файловое хранилище для сессионных токенов, сопоставленных с
`client_id` (например, IP клиента). Предназначено для сред без БД и `client_id` (например, IP клиента). Предназначено для сред без БД и
persistent‑кэшей. Обеспечивает базовые операции и авто‑очистку протухших persistent-кэшей. Обеспечивает базовые операции и авто-очистку протухших
сессий. сессий.
Формат данных: Формат данных:

View file

@ -3,8 +3,8 @@
Содержимое модуля: Содержимое модуля:
- `get_translations()`: фабрика зависимости FastAPI, считывающая локаль из - `get_translations()`: фабрика зависимости FastAPI, считывающая локаль из
query‑параметра `locale`, cookie `locale` или заголовка `Accept-Language` query-параметра `locale`, cookie `locale` или заголовка `Accept-Language`
(по приоритету), с дефолтом `ru`. Возвращает функцию‑зависимость, которая (по приоритету), с дефолтом `ru`. Возвращает функцию-зависимость, которая
подгружает `babel.support.Translations` из каталога `SRV/locales`. подгружает `babel.support.Translations` из каталога `SRV/locales`.
- `_()`: удобная обёртка для получения перевода строки с использованием - `_()`: удобная обёртка для получения перевода строки с использованием
текущей локали (или дефолтного `ru`, если контекст запроса не передан). текущей локали (или дефолтного `ru`, если контекст запроса не передан).