Sphinx generate docs
This commit is contained in:
parent
5bc23e7eb8
commit
af1420dbde
216 changed files with 39471 additions and 13 deletions
453
SRV/docs/_build/html/_modules/services/arp_service.html
vendored
Normal file
453
SRV/docs/_build/html/_modules/services/arp_service.html
vendored
Normal file
|
|
@ -0,0 +1,453 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.arp_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.arp_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Сервис низкоуровневого ARP-сканирования локальной сети.</span>
|
||||
|
||||
<span class="sd">Назначение:</span>
|
||||
|
||||
<span class="sd">- Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP‑запросов от имени выбранного интерфейса.</span>
|
||||
<span class="sd">- Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций.</span>
|
||||
|
||||
<span class="sd">Особенности реализации:</span>
|
||||
|
||||
<span class="sd">- Определяет подключённые сети интерфейса через `netifaces` и строит CIDR для сканирования.</span>
|
||||
<span class="sd">- Формирует ARP‑пакеты с помощью `scapy` (Ether/ARP) и отправляет их с таймаутом.</span>
|
||||
<span class="sd">- Добавляет локальный адрес интерфейса в результирующий список клиентов.</span>
|
||||
|
||||
<span class="sd">Требования/ограничения:</span>
|
||||
|
||||
<span class="sd">- Для отправки ARP‑кадров могут потребоваться повышенные привилегии или capability на сырой сокет.</span>
|
||||
<span class="sd">"""</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.sendrecv</span><span class="w"> </span><span class="kn">import</span> <span class="n">srp</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">netifaces</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">netaddr</span><span class="w"> </span><span class="kn">import</span> <span class="n">IPNetwork</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span><span class="p">,</span> <span class="n">_</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</span>
|
||||
|
||||
<div class="viewcode-block" id="NetworkScanner">
|
||||
<a class="viewcode-back" href="../../api/services/arp_service.html#services.arp_service.NetworkScanner">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">NetworkScanner</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Инициализация сетевого сканера.</span>
|
||||
|
||||
<span class="sd"> Предоставляет методы для сканирования сети с использованием ARP-запросов и</span>
|
||||
<span class="sd"> вывода информации о клиентах.</span>
|
||||
<span class="sd"> """</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">interface</span><span class="o">=</span><span class="kc">None</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="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="w"> </span><span class="sd">"""Инициализация параметров сетевого сканера.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> interface (str, optional): Название сетевого интерфейса. По умолчанию</span>
|
||||
<span class="sd"> используется интерфейс по умолчанию из netifaces.gateways().</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Инициализирует интерфейс, информацию об IP-адресах и локальный MAC-адрес.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">interface</span> <span class="ow">or</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">gateways</span><span class="p">()[</span><span class="s2">"default"</span><span class="p">][</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">IPNetwork</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">'addr'</span><span class="p">]</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">'netmask'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span>
|
||||
<span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)[</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_LINK</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"addr"</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_create_arp_packet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target_ip</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Создаёт ARP-пакет для отправки на указанный IP-адрес.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> target_ip (str): Целевой IP-адрес или подсеть для сканирования.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> scapy.packet.Packet: Сформированный ARP-пакет с Ethernet-заголовком.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">arp</span> <span class="o">=</span> <span class="n">ARP</span><span class="p">(</span><span class="n">pdst</span><span class="o">=</span><span class="n">target_ip</span><span class="p">)</span>
|
||||
<span class="n">ether</span> <span class="o">=</span> <span class="n">Ether</span><span class="p">(</span><span class="n">dst</span><span class="o">=</span><span class="s2">"ff:ff:ff:ff:ff:ff"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ether</span> <span class="o">/</span> <span class="n">arp</span>
|
||||
|
||||
<div class="viewcode-block" id="NetworkScanner.scan_network">
|
||||
<a class="viewcode-back" href="../../api/services/arp_service.html#services.arp_service.NetworkScanner.scan_network">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">scan_network</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attempts</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Сканирует сеть для обнаружения активных клиентов.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> attempts (int, optional): Количество попыток отправки ARP-запросов.</span>
|
||||
<span class="sd"> По умолчанию 3.</span>
|
||||
<span class="sd"> timeout (int, optional): Таймаут ожидания ответа в секундах.</span>
|
||||
<span class="sd"> По умолчанию 2.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[dict]: Список словарей с ключами "ip" и "mac", представляющих</span>
|
||||
<span class="sd"> обнаруженных клиентов, включая локальные IP-адреса.</span>
|
||||
|
||||
<span class="sd"> Note:</span>
|
||||
<span class="sd"> Учитывает локальные IP-адреса интерфейса и удаляет дубликаты.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">all_clients</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">network</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">networks</span><span class="p">:</span>
|
||||
<span class="n">target_ip</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">network</span><span class="o">.</span><span class="n">network</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">network</span><span class="o">.</span><span class="n">prefixlen</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="n">packet</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_arp_packet</span><span class="p">(</span><span class="n">target_ip</span><span class="p">)</span>
|
||||
<span class="n">clients</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">attempts</span><span class="p">):</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">srp</span><span class="p">(</span><span class="n">packet</span><span class="p">,</span>
|
||||
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
||||
<span class="n">iface</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">,</span>
|
||||
<span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">received</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||
<span class="n">client</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ip"</span><span class="p">:</span> <span class="n">received</span><span class="o">.</span><span class="n">psrc</span><span class="p">,</span> <span class="s2">"mac"</span><span class="p">:</span> <span class="n">received</span><span class="o">.</span><span class="n">hwsrc</span><span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">client</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">clients</span><span class="p">:</span>
|
||||
<span class="n">clients</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
|
||||
|
||||
<span class="n">all_clients</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">clients</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">ip_info</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span><span class="p">:</span>
|
||||
<span class="n">local_client</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ip"</span><span class="p">:</span> <span class="n">ip_info</span><span class="p">[</span><span class="s2">"addr"</span><span class="p">],</span> <span class="s2">"mac"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span><span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">local_client</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">all_clients</span><span class="p">:</span>
|
||||
<span class="n">all_clients</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">local_client</span><span class="p">)</span>
|
||||
|
||||
<span class="n">unique_clients</span> <span class="o">=</span> <span class="p">{</span><span class="nb">tuple</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> <span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="n">all_clients</span><span class="p">}</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="nb">dict</span><span class="p">(</span><span class="n">client</span><span class="p">)</span> <span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="n">unique_clients</span><span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkScanner.print_clients">
|
||||
<a class="viewcode-back" href="../../api/services/arp_service.html#services.arp_service.NetworkScanner.print_clients">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">print_clients</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clients</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Выводит список адресов клиентов в формате таблицы.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> clients (List[dict]): Список словарей с ключами "ip" и "mac",</span>
|
||||
<span class="sd"> представляющих клиентов.</span>
|
||||
|
||||
<span class="sd"> Выводит IP-адреса и MAC-адреса в отсортированном по IP порядке.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Доступные устройства в сети:"</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"IP"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">*</span> <span class="mi">18</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"MAC"</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">clients</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="s2">"ip"</span><span class="p">]):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">client</span><span class="p">[</span><span class="s1">'ip'</span><span class="p">]</span><span class="si">:</span><span class="s2"><16</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">client</span><span class="p">[</span><span class="s1">'mac'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<span class="c1"># Оставил нативный запуск сервиса для тестов</span>
|
||||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||||
<span class="n">scanner</span> <span class="o">=</span> <span class="n">NetworkScanner</span><span class="p">()</span>
|
||||
<span class="n">clients</span> <span class="o">=</span> <span class="n">scanner</span><span class="o">.</span><span class="n">scan_network</span><span class="p">()</span>
|
||||
<span class="n">scanner</span><span class="o">.</span><span class="n">print_clients</span><span class="p">(</span><span class="n">clients</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
487
SRV/docs/_build/html/_modules/services/auth_service.html
vendored
Normal file
487
SRV/docs/_build/html/_modules/services/auth_service.html
vendored
Normal file
|
|
@ -0,0 +1,487 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.auth_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.auth_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span><span class="w"> </span><span class="nn">jose</span><span class="w"> </span><span class="kn">import</span> <span class="n">JWTError</span><span class="p">,</span> <span class="n">jwt</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</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">HTTPException</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">Request</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi.security</span><span class="w"> </span><span class="kn">import</span> <span class="n">OAuth2PasswordBearer</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.auth</span><span class="w"> </span><span class="kn">import</span> <span class="n">UserCreate</span><span class="p">,</span> <span class="n">UserLogin</span><span class="p">,</span> <span class="n">UserResponse</span><span class="p">,</span> <span class="n">Token</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">storage.json_storage</span><span class="w"> </span><span class="kn">import</span> <span class="n">JsonStorage</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">storage.session_storage</span><span class="w"> </span><span class="kn">import</span> <span class="n">SessionStorage</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">Optional</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span><span class="p">,</span> <span class="n">_</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</span>
|
||||
|
||||
<span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
|
||||
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||
|
||||
<span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||||
<span class="n">config_path</span> <span class="o">=</span> <span class="s2">"/etc/gonets/config.ini"</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">config_path</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Configuration file </span><span class="si">{</span><span class="n">config_path</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">config_path</span><span class="p">)</span>
|
||||
<span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">"JWT"</span><span class="p">][</span><span class="s2">"secret_key"</span><span class="p">]</span>
|
||||
|
||||
<span class="n">ALGORITHM</span> <span class="o">=</span> <span class="s2">"HS256"</span>
|
||||
<span class="n">ACCESS_TOKEN_EXPIRE_MINUTES</span> <span class="o">=</span> <span class="mi">30</span>
|
||||
|
||||
<span class="n">oauth2_scheme</span> <span class="o">=</span> <span class="n">OAuth2PasswordBearer</span><span class="p">(</span><span class="n">tokenUrl</span><span class="o">=</span><span class="s2">"/auth/login"</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AuthService">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">AuthService</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сервис для регистрации, авторизации и управления сессиями"""</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="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">JsonStorage</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">session_storage</span> <span class="o">=</span> <span class="n">SessionStorage</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<div class="viewcode-block" id="AuthService.create_access_token">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.create_access_token">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">create_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Создаёт токен"""</span>
|
||||
<span class="n">to_encode</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
<span class="n">expire</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span>
|
||||
<span class="n">minutes</span><span class="o">=</span><span class="n">ACCESS_TOKEN_EXPIRE_MINUTES</span><span class="p">)</span>
|
||||
<span class="n">to_encode</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">"exp"</span><span class="p">:</span> <span class="n">expire</span><span class="p">})</span>
|
||||
<span class="n">encoded_jwt</span> <span class="o">=</span> <span class="n">jwt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">to_encode</span><span class="p">,</span> <span class="n">SECRET_KEY</span><span class="p">,</span> <span class="n">algorithm</span><span class="o">=</span><span class="n">ALGORITHM</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">encoded_jwt</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AuthService.verify_token">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.verify_token">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">verify_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Проверяет токен"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">payload</span> <span class="o">=</span> <span class="n">jwt</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="n">SECRET_KEY</span><span class="p">,</span> <span class="n">algorithms</span><span class="o">=</span><span class="p">[</span><span class="n">ALGORITHM</span><span class="p">])</span>
|
||||
<span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sub"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">username</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"username"</span><span class="p">:</span> <span class="n">username</span><span class="p">}</span>
|
||||
<span class="k">except</span> <span class="n">JWTError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AuthService.register">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.register">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="p">:</span> <span class="n">UserCreate</span><span class="p">)</span> <span class="o">-></span> <span class="n">UserResponse</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Регистрирует нового пользователя"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">db_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">create_user</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">db_user</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Error registering user </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Error registering user </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка регистрации"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AuthService.login">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.login">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="p">:</span> <span class="n">UserLogin</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Авторизует пользователя, создаёт сессию и возвращает токен"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">db_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_user_by_username</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">db_user</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"User </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Неверный логин или пароль"</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">verify_password</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">password</span><span class="p">,</span> <span class="n">db_user</span><span class="p">[</span><span class="s2">"password_hash"</span><span class="p">]):</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Invalid password for user </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Неверный логин или пароль"</span><span class="p">))</span>
|
||||
<span class="n">access_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_access_token</span><span class="p">(</span>
|
||||
<span class="n">data</span><span class="o">=</span><span class="p">{</span><span class="s2">"sub"</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">})</span>
|
||||
<span class="n">session_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session_storage</span><span class="o">.</span><span class="n">create_session</span><span class="p">(</span>
|
||||
<span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">access_token</span><span class="p">,</span> <span class="n">client_id</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"User </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2"> successfully logged in"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"access_token"</span><span class="p">:</span> <span class="n">access_token</span><span class="p">,</span>
|
||||
<span class="s2">"token_type"</span><span class="p">:</span> <span class="s2">"bearer"</span><span class="p">,</span>
|
||||
<span class="s2">"session_id"</span><span class="p">:</span> <span class="n">session_id</span><span class="p">,</span>
|
||||
<span class="s2">"user"</span><span class="p">:</span> <span class="n">UserResponse</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> <span class="n">username</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"username"</span><span class="p">],</span> <span class="n">is_admin</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"is_admin"</span><span class="p">]),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Error logging in user </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка авторизации"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AuthService.get_current_user">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.get_current_user">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_current_user</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">oauth2_scheme</span><span class="p">))</span> <span class="o">-></span> <span class="n">UserResponse</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает текущего пользователя по токену"""</span>
|
||||
<span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">verify_token</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">credentials</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Invalid or expired token"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Неверный токен"</span><span class="p">))</span>
|
||||
<span class="n">username</span> <span class="o">=</span> <span class="n">credentials</span><span class="p">[</span><span class="s2">"username"</span><span class="p">]</span>
|
||||
<span class="n">db_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_user_by_username</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">db_user</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"User </span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Пользователь не найден"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">UserResponse</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> <span class="n">username</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"username"</span><span class="p">],</span> <span class="n">is_admin</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"is_admin"</span><span class="p">])</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AuthService.get_user_by_session">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.get_user_by_session">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_user_by_session</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает пользователя и токен по client_id"""</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session_storage</span><span class="o">.</span><span class="n">get_latest_session</span><span class="p">(</span><span class="n">client_id</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">session</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Session for client_id </span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2"> not found or expired"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сессия недействительна"</span><span class="p">))</span>
|
||||
<span class="n">username</span> <span class="o">=</span> <span class="n">session</span><span class="p">[</span><span class="s2">"username"</span><span class="p">]</span>
|
||||
<span class="n">token</span> <span class="o">=</span> <span class="n">session</span><span class="p">[</span><span class="s2">"token"</span><span class="p">]</span>
|
||||
<span class="n">db_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_user_by_username</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">db_user</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"User </span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Пользователь не найден"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"user"</span><span class="p">:</span>
|
||||
<span class="n">UserResponse</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> <span class="n">username</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"username"</span><span class="p">],</span> <span class="n">is_admin</span><span class="o">=</span><span class="n">db_user</span><span class="p">[</span><span class="s2">"is_admin"</span><span class="p">]),</span>
|
||||
<span class="s2">"access_token"</span><span class="p">:</span> <span class="n">token</span>
|
||||
<span class="p">}</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AuthService.logout">
|
||||
<a class="viewcode-back" href="../../api/services/auth_service.html#services.auth_service.AuthService.logout">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">logout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Выполняет выход из системы, удаляя последнюю сессию для client_id"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session_storage</span><span class="o">.</span><span class="n">get_latest_session</span><span class="p">(</span><span class="n">client_id</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">session</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">session_storage</span><span class="o">.</span><span class="n">delete_session</span><span class="p">(</span><span class="n">session</span><span class="p">[</span><span class="s2">"session_id"</span><span class="p">])</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"User successfully logged out for client_id </span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Успешный выход из системы"</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Error logging out: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка при выходе из системы"</span><span class="p">))</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
507
SRV/docs/_build/html/_modules/services/connect_service.html
vendored
Normal file
507
SRV/docs/_build/html/_modules/services/connect_service.html
vendored
Normal file
|
|
@ -0,0 +1,507 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.connect_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.connect_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Сервис управления подключениями Wi‑Fi через `nmcli`.</span>
|
||||
|
||||
<span class="sd">Назначение:</span>
|
||||
|
||||
<span class="sd">- Предоставляет операции подключения/отключения к точкам доступа и проверки текущего статуса, ориентируясь на системный NetworkManager.</span>
|
||||
|
||||
<span class="sd">Поведение:</span>
|
||||
|
||||
<span class="sd">- Автоматически определяет активный Wi‑Fi‑интерфейс.</span>
|
||||
<span class="sd">- Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки `nmcli` (неверный пароль, отсутствующая сеть и т.п.).</span>
|
||||
|
||||
<span class="sd">Ограничения:</span>
|
||||
|
||||
<span class="sd">- Требуются права для управления сетевыми соединениями в системе.</span>
|
||||
<span class="sd">- В окружениях без NetworkManager команды `nmcli` будут недоступны.</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">subprocess</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</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">Tuple</span><span class="p">,</span> <span class="n">Optional</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span><span class="p">,</span> <span class="n">_</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</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="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">"</span><span class="si">%(asctime)s</span><span class="s2"> - </span><span class="si">%(name)s</span><span class="s2"> - </span><span class="si">%(levelname)s</span><span class="s2"> - </span><span class="si">%(message)s</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="WifiConnectionService">
|
||||
<a class="viewcode-back" href="../../api/services/connect_service.html#services.connect_service.WifiConnectionService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">WifiConnectionService</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сервис для управления подключением к Wi-Fi сетям с использованием nmcli.</span>
|
||||
|
||||
<span class="sd"> Предоставляет методы для подключения, отключения и проверки статуса Wi-Fi соединений.</span>
|
||||
<span class="sd"> """</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="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="w"> </span><span class="sd">"""Инициализирует сервис Wi-Fi.</span>
|
||||
|
||||
<span class="sd"> Автоматически определяет доступный Wi-Fi-интерфейс и сохраняет его имя.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_wifi_interface</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_wifi_interface</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Автоматически определяет Wi-Fi-интерфейс.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: Название Wi-Fi-интерфейса (например, "wlan0") или пустая строка,</span>
|
||||
<span class="sd"> если интерфейс не найден или Wi-Fi отключён.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при выполнении команд nmcli.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"radio"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"enabled"</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"status"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">interfaces</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="s2">"wifi"</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s2">"connected"</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
||||
<span class="n">iface</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Using Wi-Fi interface: </span><span class="si">{</span><span class="n">iface</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">iface</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Wi-Fi interface not found or not connected"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"wlan0"</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wi-Fi radio is disabled"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error detecting Wi-Fi interface: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
|
||||
<div class="viewcode-block" id="WifiConnectionService.connect">
|
||||
<a class="viewcode-back" href="../../api/services/connect_service.html#services.connect_service.WifiConnectionService.connect">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Подключается к Wi-Fi сети по SSID и паролю.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> ssid (str): Идентификатор сети Wi-Fi.</span>
|
||||
<span class="sd"> password (str): Пароль для подключения.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Tuple[bool, Optional[str]]: Кортеж (успех, сообщение об ошибке).</span>
|
||||
<span class="sd"> - Успех: (True, None).</span>
|
||||
<span class="sd"> - Ошибка: (False, сообщение об ошибке).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> subprocess.CalledProcessError: Если команда nmcli завершилась с ошибкой.</span>
|
||||
<span class="sd"> Exception: Если произошла неизвестная ошибка при выполнении.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Wi-Fi-интерфейс не доступен"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"-f"</span><span class="p">,</span> <span class="s2">"SSID"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ssid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена в списке доступных сетей"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
|
||||
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">,</span> <span class="s2">"connect"</span><span class="p">,</span> <span class="n">ssid</span><span class="p">,</span> <span class="s2">"password"</span><span class="p">,</span> <span class="n">password</span><span class="p">]</span>
|
||||
<span class="n">process</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">process</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">error_msg</span> <span class="o">=</span> <span class="n">process</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="s2">"secrets were required"</span> <span class="ow">in</span> <span class="n">error_msg</span> <span class="ow">or</span> <span class="s2">"authentication failed"</span> <span class="ow">in</span> <span class="n">error_msg</span> <span class="ow">or</span> <span class="s2">"802-11-wireless-security.psk: недействительное свойство"</span> <span class="ow">in</span> <span class="n">process</span><span class="o">.</span><span class="n">stderr</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Неверный пароль"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"no network with ssid"</span> <span class="ow">in</span> <span class="n">error_msg</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> недоступна или неверно указана"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="n">process</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully connected to network </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error connecting to </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">error_msg</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="s2">"secrets were required"</span> <span class="ow">in</span> <span class="n">error_msg</span> <span class="ow">or</span> <span class="s2">"authentication failed"</span> <span class="ow">in</span> <span class="n">error_msg</span> <span class="ow">or</span> <span class="s2">"802-11-wireless-security.psk: недействительное свойство"</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Неверный пароль"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"no network with ssid"</span> <span class="ow">in</span> <span class="n">error_msg</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> недоступна или неверно указана"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unknown error connecting to </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Неизвестная ошибка - </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiConnectionService.disconnect">
|
||||
<a class="viewcode-back" href="../../api/services/connect_service.html#services.connect_service.WifiConnectionService.disconnect">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Отключается от Wi-Fi сети по указанному SSID.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> ssid (str): Идентификатор сети Wi-Fi для отключения.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Tuple[bool, Optional[str]]: Кортеж (успех, сообщение об ошибке).</span>
|
||||
<span class="sd"> - Успех: (True, None или сообщение, если подключение не найдено).</span>
|
||||
<span class="sd"> - Ошибка: (False, сообщение об ошибке).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> subprocess.CalledProcessError: Если команда nmcli завершилась с ошибкой.</span>
|
||||
<span class="sd"> Exception: Если произошла неизвестная ошибка при выполнении.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Wi-Fi-интерфейс не доступен"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"connection"</span><span class="p">,</span> <span class="s2">"show"</span><span class="p">,</span> <span class="s2">"--active"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">active_connections</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">active_connections</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No active connections for SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Нет активного подключения для SSID </span><span class="si">{ssid}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">conn</span> <span class="ow">in</span> <span class="n">active_connections</span><span class="p">:</span>
|
||||
<span class="n">conn_details</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">conn_details</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">conn_name</span> <span class="o">=</span> <span class="n">conn_details</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">conn_info</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"connection"</span><span class="p">,</span> <span class="s2">"show"</span><span class="p">,</span> <span class="n">conn_name</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="k">if</span> <span class="s2">"802-11-wireless.ssid:"</span> <span class="ow">in</span> <span class="n">conn_info</span> <span class="ow">and</span> <span class="n">ssid</span> <span class="ow">in</span> <span class="n">conn_info</span><span class="p">:</span>
|
||||
<span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"connection"</span><span class="p">,</span> <span class="s2">"down"</span><span class="p">,</span> <span class="n">conn_name</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Disconnected from SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Active connection with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Активное подключение с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдено"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error disconnecting from </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка отключения от </span><span class="si">{ssid}</span><span class="s2">: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unknown error disconnecting from </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка отключения от </span><span class="si">{ssid}</span><span class="s2">: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiConnectionService.get_status">
|
||||
<a class="viewcode-back" href="../../api/services/connect_service.html#services.connect_service.WifiConnectionService.get_status">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_status</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Проверяет статус текущего подключения к Wi-Fi.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Tuple[bool, Optional[str]]: Кортеж (успех, SSID или сообщение об ошибке).</span>
|
||||
<span class="sd"> - Успех: (True, SSID текущей сети).</span>
|
||||
<span class="sd"> - Ошибка или отсутствие подключения: (False, сообщение об ошибке).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при выполнении команды nmcli.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Wi-Fi-интерфейс не доступен"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"connection"</span><span class="p">,</span> <span class="s2">"show"</span><span class="p">,</span> <span class="s2">"--active"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
|
||||
<span class="n">ssid</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Current network: </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="n">ssid</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не подключено к Wi-Fi"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error checking status: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка проверки статуса: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
522
SRV/docs/_build/html/_modules/services/firewalld_service.html
vendored
Normal file
522
SRV/docs/_build/html/_modules/services/firewalld_service.html
vendored
Normal file
|
|
@ -0,0 +1,522 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.firewalld_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.firewalld_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Сервис для управления firewalld через D‑Bus.</span>
|
||||
|
||||
<span class="sd">Назначение:</span>
|
||||
<span class="sd">- Обёртка над интерфейсами `org.fedoraproject.FirewallD1` для выполнения</span>
|
||||
<span class="sd"> типовых операций по зонам: просмотр/изменение дефолтной зоны, добавление и</span>
|
||||
<span class="sd"> удаление сервисов, портов, источников, перезагрузка конфигурации.</span>
|
||||
|
||||
<span class="sd">Примечания:</span>
|
||||
<span class="sd">- Используется `pydbus.SystemBus` для доступа к системной шине.</span>
|
||||
<span class="sd">- Методы генерируют дружелюбные исключения при ошибках, содержащие контекст</span>
|
||||
<span class="sd"> операции.</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">re</span><span class="w"> </span><span class="kn">import</span> <span class="n">DEBUG</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">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span>
|
||||
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">pydbus</span><span class="w"> </span><span class="kn">import</span> <span class="n">SystemBus</span>
|
||||
|
||||
<span class="n">DEBUG</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">FirewalldService</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="bp">self</span><span class="o">.</span><span class="n">bus</span> <span class="o">=</span> <span class="n">SystemBus</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bus</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"org.fedoraproject.FirewallD1"</span><span class="p">,</span>
|
||||
<span class="s2">"/org/fedoraproject/FirewallD1"</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.get_zones">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.get_zones">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_zones</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Get list of all zones."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">getZones</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to get zones: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.get_default_zone">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.get_default_zone">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_default_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Get the default zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">getDefaultZone</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to get default zone: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.set_default_zone">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.set_default_zone">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">set_default_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Set the default zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">setDefaultZone</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to set default zone to </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.add_service">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.add_service">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">service</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Add a service to a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">addService</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">service</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to add service </span><span class="si">{</span><span class="n">service</span><span class="si">}</span><span class="s2"> to zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.remove_service">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.remove_service">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">remove_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">service</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Remove a service from a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">removeService</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">service</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to remove service </span><span class="si">{</span><span class="n">service</span><span class="si">}</span><span class="s2"> from zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.get_services">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.get_services">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_services</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Get list of services in a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">getServices</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to get services for zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.add_port">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.add_port">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">port</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
|
||||
<span class="n">protocol</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Add a port to a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Adding port </span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">protocol</span><span class="si">}</span><span class="s2"> to zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Timeout: </span><span class="si">{</span><span class="n">timeout</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="c1"># Get the zone interface</span>
|
||||
<span class="n">zone_proxy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bus</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"org.fedoraproject.FirewallD1"</span><span class="p">,</span>
|
||||
<span class="s2">"/org/fedoraproject/FirewallD1"</span><span class="p">)</span>
|
||||
<span class="n">zone_iface</span> <span class="o">=</span> <span class="n">zone_proxy</span><span class="p">[</span><span class="s2">"org.fedoraproject.FirewallD1.zone"</span><span class="p">]</span>
|
||||
<span class="c1"># Convert port to string</span>
|
||||
<span class="n">port_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
|
||||
<span class="c1"># Convert timeout to integer</span>
|
||||
<span class="n">timeout_int</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span> <span class="k">if</span> <span class="n">timeout</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="mi">0</span>
|
||||
<span class="c1"># Call addPort with the correct signature (sssi)</span>
|
||||
<span class="n">zone_iface</span><span class="o">.</span><span class="n">addPort</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">port_str</span><span class="p">,</span> <span class="n">protocol</span><span class="p">,</span> <span class="n">timeout_int</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to add port </span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">protocol</span><span class="si">}</span><span class="s2"> to zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.remove_port">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.remove_port">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">remove_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">protocol</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Remove a port from a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">port_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">protocol</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">removePort</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">port_str</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to remove port </span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">protocol</span><span class="si">}</span><span class="s2"> from zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.get_ports">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.get_ports">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_ports</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Get list of ports in a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">ports</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">getPorts</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>
|
||||
<span class="c1"># Convert port list items to strings in format "port/protocol"</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">port</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">port</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> <span class="k">for</span> <span class="n">port</span> <span class="ow">in</span> <span class="n">ports</span><span class="p">]</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to get ports for zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.add_source">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.add_source">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">source</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Add a source to a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">addSource</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">source</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to add source </span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"> to zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.remove_source">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.remove_source">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">source</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Remove a source from a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">removeSource</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">source</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to remove source </span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"> from zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.get_sources">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.get_sources">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Get list of sources in a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">getSources</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to get sources for zone </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.reload">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.reload">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">reload</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Reload firewall rules."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">reload</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to reload firewall rules: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FirewalldService.get_zone_settings">
|
||||
<a class="viewcode-back" href="../../api/services/firewalld_service.html#services.firewalld_service.FirewalldService.get_zone_settings">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_zone_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Get all settings for a zone."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"services"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_services</span><span class="p">(</span><span class="n">zone</span><span class="p">),</span>
|
||||
<span class="s2">"ports"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ports</span><span class="p">(</span><span class="n">zone</span><span class="p">),</span>
|
||||
<span class="s2">"sources"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sources</span><span class="p">(</span><span class="n">zone</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Failed to get zone settings for </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
468
SRV/docs/_build/html/_modules/services/ip_service.html
vendored
Normal file
468
SRV/docs/_build/html/_modules/services/ip_service.html
vendored
Normal file
|
|
@ -0,0 +1,468 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.ip_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.ip_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Сервис проверки и применения IP‑настроек через NetworkManager (D‑Bus).</span>
|
||||
|
||||
<span class="sd">Назначение:</span>
|
||||
<span class="sd">- Перед применением конфигурации проверяет занятость IP адреса, сканируя сегмент</span>
|
||||
<span class="sd"> сети средствами ARP (через `NetworkScanner`).</span>
|
||||
<span class="sd">- Применяет изменения профиля подключения через `sdbus_async.networkmanager` и</span>
|
||||
<span class="sd"> выполняет переподключение интерфейса.</span>
|
||||
|
||||
<span class="sd">Требования/ограничения:</span>
|
||||
<span class="sd">- Доступ к системной шине D‑Bus и права на изменения сетевых профилей.</span>
|
||||
<span class="sd">- Структура входных данных должна соответствовать схеме `ipv4_updates` для</span>
|
||||
<span class="sd"> корректного обновления вложенных полей у профиля.</span>
|
||||
<span class="sd">"""</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">Dict</span><span class="p">,</span> <span class="n">Any</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">sdbus_async.networkmanager</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">NetworkManager</span><span class="p">,</span>
|
||||
<span class="n">NetworkManagerSettings</span><span class="p">,</span>
|
||||
<span class="n">NetworkConnectionSettings</span><span class="p">,</span>
|
||||
<span class="n">NetworkDeviceGeneric</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">sdbus</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">sdbus_async.networkmanager.settings</span><span class="w"> </span><span class="kn">import</span> <span class="n">ConnectionProfile</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.arp_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">NetworkScanner</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</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>
|
||||
|
||||
<div class="viewcode-block" id="IPService">
|
||||
<a class="viewcode-back" href="../../api/services/ip_service.html#services.ip_service.IPService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">IPService</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сервис проверки доступности IP-адреса и применения настроек сети.</span>
|
||||
|
||||
<span class="sd"> Предоставляет асинхронные методы для проверки занятости IP-адреса с использованием</span>
|
||||
<span class="sd"> ARP-сканирования и применения настроек через NetworkManager.</span>
|
||||
<span class="sd"> """</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="w"> </span><span class="sd">"""Инициализирует сервис IP.</span>
|
||||
|
||||
<span class="sd"> Создаёт объект ARP-сканера и устанавливает системную шину D-Bus как</span>
|
||||
<span class="sd"> по умолчанию.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">arp_scanner</span> <span class="o">=</span> <span class="n">NetworkScanner</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bus</span> <span class="o">=</span> <span class="n">sdbus</span><span class="o">.</span><span class="n">sd_bus_open_system</span><span class="p">()</span>
|
||||
<span class="n">sdbus</span><span class="o">.</span><span class="n">set_default_bus</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bus</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_reset_bus</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Перезапускает соединение с системной шиной D-Bus.</span>
|
||||
|
||||
<span class="sd"> Закрывает текущее соединение и создаёт новое, устанавливая его как</span>
|
||||
<span class="sd"> по умолчанию.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">new_bus</span> <span class="o">=</span> <span class="n">sdbus</span><span class="o">.</span><span class="n">sd_bus_open_system</span><span class="p">()</span>
|
||||
<span class="n">sdbus</span><span class="o">.</span><span class="n">set_default_bus</span><span class="p">(</span><span class="n">new_bus</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"bus"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">bus</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bus</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bus</span> <span class="o">=</span> <span class="n">new_bus</span>
|
||||
|
||||
<div class="viewcode-block" id="IPService.check_ip_config">
|
||||
<a class="viewcode-back" href="../../api/services/ip_service.html#services.ip_service.IPService.check_ip_config">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">check_ip_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</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="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">()))</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Проверяет доступность IP-адреса перед его применением.</span>
|
||||
|
||||
<span class="sd"> Выполняет ARP-сканирование сети для проверки, занят ли указанный IP-адрес.</span>
|
||||
<span class="sd"> Перезапускает шину D-Bus перед выполнением.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> args (Dict[str, Any]): Словарь с данными, включая "ipv4_updates"</span>
|
||||
<span class="sd"> с полем "ipv4.address-data" для нового IP-адреса.</span>
|
||||
<span class="sd"> translations (Translations): Объект переводов.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Dict[str, Any]: Словарь с ключами:</span>
|
||||
<span class="sd"> - "available" (bool): Доступен ли IP-адрес.</span>
|
||||
<span class="sd"> - "message" (str): Сообщение о результате проверки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при сканировании ARP.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_reset_bus</span><span class="p">()</span>
|
||||
<span class="n">clients</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arp_scanner</span><span class="o">.</span><span class="n">scan_network</span><span class="p">()</span>
|
||||
<span class="n">new_ip</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="s2">"ipv4_updates"</span><span class="p">][</span><span class="s2">"ipv4.address-data"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"address"</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">client</span><span class="p">[</span><span class="s2">"ip"</span><span class="p">]</span> <span class="o">==</span> <span class="n">new_ip</span> <span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="n">clients</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"available"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"IP-адрес </span><span class="si">{ip}</span><span class="s2"> уже занят."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ip</span><span class="o">=</span><span class="n">new_ip</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"available"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Настройки сетевого профиля доступны для использования."</span><span class="p">)</span>
|
||||
<span class="p">}</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="IPService.apply_ip_config">
|
||||
<a class="viewcode-back" href="../../api/services/ip_service.html#services.ip_service.IPService.apply_ip_config">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">apply_ip_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</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="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">()))</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Применяет проверенные настройки IP к указанному соединению.</span>
|
||||
|
||||
<span class="sd"> Перезапускает шину D-Bus, обновляет настройки соединения через NetworkManager,</span>
|
||||
<span class="sd"> отключает и переподключает устройство к сети.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> args (Dict[str, Any]): Словарь с данными, включая:</span>
|
||||
<span class="sd"> - "connection_id" (str): Идентификатор соединения.</span>
|
||||
<span class="sd"> - "ipv4_updates" (Dict): Обновления настроек IPv4.</span>
|
||||
<span class="sd"> translations (Translations): Объект переводов.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ValueError: Если соединение с указанным ID не найдено.</span>
|
||||
<span class="sd"> RuntimeError: Если устройство для интерфейса не найдено.</span>
|
||||
|
||||
<span class="sd"> Note:</span>
|
||||
<span class="sd"> Требуются права для изменения настроек через NetworkManager.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_reset_bus</span><span class="p">()</span>
|
||||
<span class="n">nm</span> <span class="o">=</span> <span class="n">NetworkManager</span><span class="p">()</span>
|
||||
<span class="n">settings</span> <span class="o">=</span> <span class="n">NetworkManagerSettings</span><span class="p">()</span>
|
||||
<span class="n">connection_paths</span> <span class="o">=</span> <span class="k">await</span> <span class="n">settings</span><span class="o">.</span><span class="n">get_connections_by_id</span><span class="p">(</span>
|
||||
<span class="n">args</span><span class="p">[</span><span class="s2">"connection_id"</span><span class="p">])</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">connection_paths</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Подключение </span><span class="si">{connection_id}</span><span class="s2"> не найдено"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">connection_id</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="s2">"connection_id"</span><span class="p">]))</span>
|
||||
|
||||
<span class="n">connection</span> <span class="o">=</span> <span class="n">NetworkConnectionSettings</span><span class="p">(</span><span class="n">connection_paths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">profile</span> <span class="o">=</span> <span class="k">await</span> <span class="n">connection</span><span class="o">.</span><span class="n">get_profile</span><span class="p">()</span>
|
||||
<span class="n">settings_dict</span> <span class="o">=</span> <span class="n">profile</span><span class="o">.</span><span class="n">to_settings_dict</span><span class="p">()</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">key_path</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">args</span><span class="p">[</span><span class="s2">"ipv4_updates"</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">section</span><span class="p">,</span> <span class="o">*</span><span class="n">props</span> <span class="o">=</span> <span class="n">key_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)</span>
|
||||
<span class="n">current</span> <span class="o">=</span> <span class="n">settings_dict</span><span class="p">[</span><span class="n">section</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">props</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
|
||||
<span class="n">current</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">current</span><span class="p">[</span><span class="n">props</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
|
||||
|
||||
<span class="n">new_profile</span> <span class="o">=</span> <span class="n">ConnectionProfile</span><span class="o">.</span><span class="n">from_settings_dict</span><span class="p">(</span><span class="n">settings_dict</span><span class="p">)</span>
|
||||
<span class="k">await</span> <span class="n">connection</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">new_profile</span><span class="o">.</span><span class="n">to_dbus</span><span class="p">())</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Updated settings for </span><span class="si">{</span><span class="n">args</span><span class="p">[</span><span class="s1">'connection_id'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">interface_name</span> <span class="o">=</span> <span class="n">settings_dict</span><span class="p">[</span><span class="s2">"connection"</span><span class="p">][</span><span class="s2">"interface-name"</span><span class="p">]</span>
|
||||
<span class="n">devices</span> <span class="o">=</span> <span class="k">await</span> <span class="n">nm</span><span class="o">.</span><span class="n">get_devices</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">device_path</span> <span class="ow">in</span> <span class="n">devices</span><span class="p">:</span>
|
||||
<span class="n">device</span> <span class="o">=</span> <span class="n">NetworkDeviceGeneric</span><span class="p">(</span><span class="n">device_path</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="k">await</span> <span class="n">device</span><span class="o">.</span><span class="n">interface</span> <span class="o">==</span> <span class="n">interface_name</span><span class="p">:</span>
|
||||
<span class="k">await</span> <span class="n">device</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Disconnected from </span><span class="si">{</span><span class="n">interface_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">await</span> <span class="n">nm</span><span class="o">.</span><span class="n">activate_connection</span><span class="p">(</span><span class="n">connection</span><span class="o">=</span><span class="n">connection_paths</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">device</span><span class="o">=</span><span class="n">device_path</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Reconnected to </span><span class="si">{</span><span class="n">args</span><span class="p">[</span><span class="s1">'connection_id'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Устройство для интерфейса </span><span class="si">{interface}</span><span class="s2"> не найдено"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">interface</span><span class="o">=</span><span class="n">interface_name</span><span class="p">))</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
744
SRV/docs/_build/html/_modules/services/network_service.html
vendored
Normal file
744
SRV/docs/_build/html/_modules/services/network_service.html
vendored
Normal file
|
|
@ -0,0 +1,744 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.network_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.network_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Сервис чтения сетевого состояния через NetworkManager (D‑Bus).</span>
|
||||
|
||||
<span class="sd">Назначение:</span>
|
||||
<span class="sd">- Предоставляет асинхронные методы для сборки унифицированных моделей</span>
|
||||
<span class="sd"> сетевых интерфейсов (Ethernet/Wi‑Fi), их IP‑конфигураций, а также получения</span>
|
||||
<span class="sd"> имени хоста. Используется API‑слоем для визуализации и управления.</span>
|
||||
|
||||
<span class="sd">Особенности:</span>
|
||||
<span class="sd">- Фильтрация loopback и явно неактивных интерфейсов.</span>
|
||||
<span class="sd">- Адаптация данных D‑Bus в pydantic‑модели (`NetworkInterface`, `WiFiDevice`,</span>
|
||||
<span class="sd"> `NetworkInterfacesContainer`).</span>
|
||||
<span class="sd">"""</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">sdbus_async.networkmanager</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">NetworkManager</span><span class="p">,</span>
|
||||
<span class="n">NetworkDeviceGeneric</span><span class="p">,</span>
|
||||
<span class="n">IPv4Config</span><span class="p">,</span>
|
||||
<span class="n">IPv6Config</span><span class="p">,</span>
|
||||
<span class="n">NetworkManagerSettings</span><span class="p">,</span>
|
||||
<span class="n">NetworkDeviceWireless</span><span class="p">,</span>
|
||||
<span class="n">AccessPoint</span><span class="p">,</span>
|
||||
<span class="n">DeviceType</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">sdbus</span><span class="w"> </span><span class="kn">import</span> <span class="n">sd_bus_open_system</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.network</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">NetworkInterface</span><span class="p">,</span>
|
||||
<span class="n">IPv4Route</span><span class="p">,</span>
|
||||
<span class="n">IPv6Route</span><span class="p">,</span>
|
||||
<span class="n">IPConfig</span><span class="p">,</span>
|
||||
<span class="n">IndividualIPConfig</span><span class="p">,</span>
|
||||
<span class="n">NetworkInterfacesContainer</span><span class="p">,</span>
|
||||
<span class="n">WiFiDevice</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">subprocess</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span><span class="p">,</span> <span class="n">_</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</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>
|
||||
|
||||
<div class="viewcode-block" id="NetworkService">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">NetworkService</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сервис для взаимодействия с NetworkManager через D-Bus.</span>
|
||||
|
||||
<span class="sd"> Предоставляет асинхронные методы для получения информации о сетевых интерфейсах,</span>
|
||||
<span class="sd"> их конфигурациях IP, Wi-Fi и состояниях.</span>
|
||||
<span class="sd"> """</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="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="w"> </span><span class="sd">"""Инициализирует сервис NetworkManager.</span>
|
||||
|
||||
<span class="sd"> Устанавливает системный D-Bus и создаёт объекты для взаимодействия с</span>
|
||||
<span class="sd"> NetworkManager и его настройками.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span> <span class="o">=</span> <span class="n">sd_bus_open_system</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">nm</span> <span class="o">=</span> <span class="n">NetworkManager</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">nm_settings</span> <span class="o">=</span> <span class="n">NetworkManagerSettings</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_ip_method">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_ip_method">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_ip_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">device</span><span class="p">:</span> <span class="n">NetworkDeviceGeneric</span><span class="p">,</span> <span class="n">ip_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает метод IP (например, "auto", "manual") для указанного устройства.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> device (NetworkDeviceGeneric): Объект устройства NetworkManager.</span>
|
||||
<span class="sd"> ip_type (str): Тип IP (например, "ipv4" или "ipv6").</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: Метод IP или "unknown" в случае ошибки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при получении настроек соединения.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">config</span> <span class="o">=</span> <span class="k">await</span> <span class="n">device</span><span class="o">.</span><span class="n">get_applied_connection</span><span class="p">()</span>
|
||||
<span class="n">settings</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ip_type</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"method"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"s"</span><span class="p">,</span> <span class="s2">"unknown"</span><span class="p">))[</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"unknown"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_connection_name">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_connection_name">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_connection_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">device</span><span class="p">:</span> <span class="n">NetworkDeviceGeneric</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Извлекает имя соединения (GENERAL.CONNECTION) для устройства.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> device (NetworkDeviceGeneric): Объект устройства NetworkManager.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: Имя соединения или "unknown" в случае ошибки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при получении настроек соединения.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">applied_connection</span> <span class="o">=</span> <span class="k">await</span> <span class="n">device</span><span class="o">.</span><span class="n">get_applied_connection</span><span class="p">()</span>
|
||||
<span class="n">connection_settings</span> <span class="o">=</span> <span class="n">applied_connection</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">connection_info</span> <span class="o">=</span> <span class="n">connection_settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connection"</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">connection_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"id"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"s"</span><span class="p">,</span> <span class="s2">"unknown"</span><span class="p">))[</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"unknown"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_ip_config">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_ip_config">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_ip_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">device</span><span class="p">:</span> <span class="n">NetworkDeviceGeneric</span><span class="p">,</span> <span class="n">ip_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">IndividualIPConfig</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает конфигурацию IP для устройства.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> device (NetworkDeviceGeneric): Объект устройства NetworkManager.</span>
|
||||
<span class="sd"> ip_version (str): Версия IP ("4" или "6").</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[IndividualIPConfig]: Список конфигураций IP, включая адреса и маршруты.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при получении данных IP.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">configs</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">device_ip</span> <span class="o">=</span> <span class="k">await</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">device</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"ip</span><span class="si">{</span><span class="n">ip_version</span><span class="si">}</span><span class="s2">_config"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">device_ip</span> <span class="o">!=</span> <span class="s2">"/"</span><span class="p">:</span>
|
||||
<span class="n">ip_config</span> <span class="o">=</span> <span class="nb">globals</span><span class="p">()[</span><span class="sa">f</span><span class="s2">"IPv</span><span class="si">{</span><span class="n">ip_version</span><span class="si">}</span><span class="s2">Config"</span><span class="p">](</span><span class="n">device_ip</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span><span class="p">)</span>
|
||||
<span class="n">address_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">ip_config</span><span class="o">.</span><span class="n">address_data</span>
|
||||
<span class="k">for</span> <span class="n">address</span> <span class="ow">in</span> <span class="n">address_data</span><span class="p">:</span>
|
||||
<span class="n">config</span> <span class="o">=</span> <span class="n">IndividualIPConfig</span><span class="p">(</span>
|
||||
<span class="n">address</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">address</span><span class="p">[</span><span class="s2">"address"</span><span class="p">][</span><span class="mi">1</span><span class="p">]),</span>
|
||||
<span class="n">routes</span><span class="o">=</span><span class="p">[</span>
|
||||
<span class="nb">globals</span><span class="p">()[</span><span class="sa">f</span><span class="s2">"IPv</span><span class="si">{</span><span class="n">ip_version</span><span class="si">}</span><span class="s2">Route"</span><span class="p">](</span>
|
||||
<span class="n">destination</span><span class="o">=</span><span class="n">route</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dest"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"s"</span><span class="p">,</span> <span class="s2">"0.0.0.0"</span> <span class="k">if</span> <span class="n">ip_version</span> <span class="o">==</span> <span class="s2">"4"</span> <span class="k">else</span> <span class="s2">"::"</span><span class="p">))[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="n">prefix</span><span class="o">=</span><span class="n">route</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prefix"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"u"</span><span class="p">,</span> <span class="mi">0</span><span class="p">))[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="n">next_hop</span><span class="o">=</span><span class="n">route</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"next-hop"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"s"</span><span class="p">,</span> <span class="s2">"0.0.0.0"</span> <span class="k">if</span> <span class="n">ip_version</span> <span class="o">==</span> <span class="s2">"4"</span> <span class="k">else</span> <span class="s2">"::"</span><span class="p">))[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="n">metric</span><span class="o">=</span><span class="n">route</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"metric"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"u"</span><span class="p">,</span> <span class="mi">0</span><span class="p">))[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="p">)</span> <span class="k">for</span> <span class="n">route</span> <span class="ow">in</span> <span class="k">await</span> <span class="n">ip_config</span><span class="o">.</span><span class="n">route_data</span>
|
||||
<span class="p">],</span>
|
||||
<span class="n">method</span><span class="o">=</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ip_method</span><span class="p">(</span><span class="n">device</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"ipv</span><span class="si">{</span><span class="n">ip_version</span><span class="si">}</span><span class="s2">"</span><span class="p">),</span>
|
||||
<span class="n">gateway</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="k">await</span> <span class="n">ip_config</span><span class="o">.</span><span class="n">gateway</span><span class="p">),</span>
|
||||
<span class="n">dns</span><span class="o">=</span><span class="p">[</span>
|
||||
<span class="nb">str</span><span class="p">(</span><span class="n">ns</span><span class="p">[</span><span class="s2">"address"</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span> <span class="k">if</span> <span class="n">ip_version</span> <span class="o">==</span> <span class="s2">"4"</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">ns</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">ns</span> <span class="ow">in</span> <span class="k">await</span> <span class="nb">getattr</span><span class="p">(</span>
|
||||
<span class="n">ip_config</span><span class="p">,</span>
|
||||
<span class="s2">"nameserver_data"</span> <span class="k">if</span> <span class="n">ip_version</span> <span class="o">==</span> <span class="s2">"4"</span> <span class="k">else</span> <span class="s2">"nameservers"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">configs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">configs</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_wifi_info">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_wifi_info">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_wifi_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wifi_device</span><span class="p">:</span> <span class="n">NetworkDeviceWireless</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает информацию о Wi-Fi устройстве.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> wifi_device (NetworkDeviceWireless): Объект Wi-Fi устройства NetworkManager.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Dict[str, Optional[Union[str, int]]]: Словарь с данными Wi-Fi (SSID, BSSID,</span>
|
||||
<span class="sd"> bitrate, strength, frequency, mode), где значения могут быть None.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при получении данных точки доступа.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">active_ap</span> <span class="o">=</span> <span class="k">await</span> <span class="n">wifi_device</span><span class="o">.</span><span class="n">active_access_point</span>
|
||||
<span class="n">wifi_info</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"ssid"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="s2">"bssid"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="s2">"bitrate"</span><span class="p">:</span> <span class="k">await</span> <span class="n">wifi_device</span><span class="o">.</span><span class="n">bitrate</span><span class="p">,</span>
|
||||
<span class="s2">"strength"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="s2">"frequency"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="s2">"mode"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">active_ap</span> <span class="o">!=</span> <span class="s2">"/"</span><span class="p">:</span>
|
||||
<span class="n">ap</span> <span class="o">=</span> <span class="n">AccessPoint</span><span class="p">(</span><span class="n">active_ap</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span><span class="p">)</span>
|
||||
<span class="n">wifi_info</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
|
||||
<span class="s2">"ssid"</span><span class="p">:</span> <span class="k">await</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span><span class="p">,</span>
|
||||
<span class="s2">"bssid"</span><span class="p">:</span> <span class="k">await</span> <span class="n">ap</span><span class="o">.</span><span class="n">hw_address</span><span class="p">,</span>
|
||||
<span class="s2">"strength"</span><span class="p">:</span> <span class="k">await</span> <span class="n">ap</span><span class="o">.</span><span class="n">strength</span><span class="p">,</span>
|
||||
<span class="s2">"frequency"</span><span class="p">:</span> <span class="k">await</span> <span class="n">ap</span><span class="o">.</span><span class="n">frequency</span><span class="p">,</span>
|
||||
<span class="s2">"mode"</span><span class="p">:</span> <span class="k">await</span> <span class="n">ap</span><span class="o">.</span><span class="n">mode</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
<span class="k">return</span> <span class="n">wifi_info</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_network_interfaces">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_network_interfaces">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_network_interfaces</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">,</span> <span class="n">WiFiDevice</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает список сетевых интерфейсов.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None (используются (100, 100)).</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[Union[NetworkInterface, WiFiDevice]]: Список объектов интерфейсов,</span>
|
||||
<span class="sd"> включая Wi-Fi устройства.</span>
|
||||
|
||||
<span class="sd"> Исключает интерфейсы типа LOOPBACK и неактивные состояния (state == "10").</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">devices_paths</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">nm</span><span class="o">.</span><span class="n">get_devices</span><span class="p">()</span>
|
||||
<span class="n">network_interfaces</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">initial_positions</span> <span class="o">=</span> <span class="n">initial_positions</span> <span class="ow">or</span> <span class="p">{}</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">device_path</span> <span class="ow">in</span> <span class="n">devices_paths</span><span class="p">:</span>
|
||||
<span class="n">generic_device</span> <span class="o">=</span> <span class="n">NetworkDeviceGeneric</span><span class="p">(</span><span class="n">device_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span><span class="p">)</span>
|
||||
<span class="n">interface_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="k">await</span> <span class="n">generic_device</span><span class="o">.</span><span class="n">interface</span><span class="p">)</span>
|
||||
<span class="n">device_type</span> <span class="o">=</span> <span class="n">DeviceType</span><span class="p">(</span><span class="k">await</span> <span class="n">generic_device</span><span class="o">.</span><span class="n">device_type</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s2">"LOOPBACK"</span><span class="p">:</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="n">device_state</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="k">await</span> <span class="n">generic_device</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">device_state</span> <span class="o">==</span> <span class="s2">"10"</span><span class="p">:</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="n">common_data</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"name"</span><span class="p">:</span> <span class="n">interface_name</span><span class="p">,</span>
|
||||
<span class="s2">"type"</span><span class="p">:</span> <span class="n">device_type</span><span class="p">,</span>
|
||||
<span class="s2">"device_state"</span><span class="p">:</span> <span class="n">device_state</span><span class="p">,</span>
|
||||
<span class="s2">"active_connection"</span><span class="p">:</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connection_name</span><span class="p">(</span><span class="n">generic_device</span><span class="p">),</span>
|
||||
<span class="s2">"mac_address"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="k">await</span> <span class="n">generic_device</span><span class="o">.</span><span class="n">hw_address</span><span class="p">),</span>
|
||||
<span class="s2">"device_mtu"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="k">await</span> <span class="n">generic_device</span><span class="o">.</span><span class="n">mtu</span><span class="p">),</span>
|
||||
<span class="s2">"ipv4"</span><span class="p">:</span> <span class="n">IPConfig</span><span class="p">(</span><span class="n">configurations</span><span class="o">=</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ip_config</span><span class="p">(</span><span class="n">generic_device</span><span class="p">,</span> <span class="s2">"4"</span><span class="p">)),</span>
|
||||
<span class="s2">"ipv6"</span><span class="p">:</span> <span class="n">IPConfig</span><span class="p">(</span><span class="n">configurations</span><span class="o">=</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ip_config</span><span class="p">(</span><span class="n">generic_device</span><span class="p">,</span> <span class="s2">"6"</span><span class="p">)),</span>
|
||||
<span class="s2">"x"</span><span class="p">:</span> <span class="n">initial_positions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">interface_name</span><span class="p">,</span> <span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">))[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="s2">"y"</span><span class="p">:</span> <span class="n">initial_positions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">interface_name</span><span class="p">,</span> <span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">))[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s2">"WIFI"</span><span class="p">:</span>
|
||||
<span class="n">wifi_device</span> <span class="o">=</span> <span class="n">NetworkDeviceWireless</span><span class="p">(</span><span class="n">device_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_bus</span><span class="p">)</span>
|
||||
<span class="n">wifi_info</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_wifi_info</span><span class="p">(</span><span class="n">wifi_device</span><span class="p">)</span>
|
||||
<span class="n">network_interfaces</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">WiFiDevice</span><span class="p">(</span><span class="o">**</span><span class="n">common_data</span><span class="p">,</span> <span class="o">**</span><span class="n">wifi_info</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">network_interfaces</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">NetworkInterface</span><span class="p">(</span><span class="o">**</span><span class="n">common_data</span><span class="p">))</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">network_interfaces</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_hostname">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_hostname">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_hostname</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Возвращает имя хоста из команды hostname в формате JSON.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Dict[str, str]: Словарь с ключом "hostname" и значением имени хоста.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> RuntimeError: Если произошла ошибка при выполнении команды hostname</span>
|
||||
<span class="sd"> или обработке вывода.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"hostname"</span><span class="p">],</span>
|
||||
<span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">check</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">hostname</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"hostname"</span><span class="p">:</span> <span class="n">hostname</span><span class="p">}</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось выполнить команду hostname: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка обработки вывода hostname: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_interfaces_by_state">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_interfaces_by_state">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_interfaces_by_state</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">state</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает список интерфейсов по указанному состоянию.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> state (str): Состояние интерфейса (например, "100" для активных).</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[NetworkInterface]: Список интерфейсов с указанным состоянием.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">all_interfaces</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_network_interfaces</span><span class="p">(</span><span class="n">initial_positions</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[</span>
|
||||
<span class="n">interface</span> <span class="k">for</span> <span class="n">interface</span> <span class="ow">in</span> <span class="n">all_interfaces</span>
|
||||
<span class="k">if</span> <span class="n">interface</span><span class="o">.</span><span class="n">device_state</span> <span class="o">==</span> <span class="n">state</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_interfaces_container">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_interfaces_container">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_interfaces_container</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">state</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">NetworkInterfacesContainer</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает объект, содержащий список интерфейсов и координаты контейнера.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> state (Optional[str], optional): Состояние интерфейсов (например, "100").</span>
|
||||
<span class="sd"> По умолчанию None (все интерфейсы).</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
<span class="sd"> container_x (int, optional): Координата X контейнера. По умолчанию 0.</span>
|
||||
<span class="sd"> container_y (int, optional): Координата Y контейнера. По умолчанию 0.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> NetworkInterfacesContainer: Объект с интерфейсами и координатами контейнера.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">state</span><span class="p">:</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_interfaces_by_state</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">initial_positions</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_network_interfaces</span><span class="p">(</span><span class="n">initial_positions</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">NetworkInterfacesContainer</span><span class="p">(</span><span class="n">interfaces</span><span class="o">=</span><span class="n">interfaces</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="o">=</span><span class="n">container_x</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="o">=</span><span class="n">container_y</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_network_interfaces_container">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_network_interfaces_container">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_network_interfaces_container</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">NetworkInterfacesContainer</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает контейнер с сетевыми интерфейсами и координатами контейнера.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> initial_positions (Optional[Dict[str, Tuple[int, int]]], optional):</span>
|
||||
<span class="sd"> Словарь начальных координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> NetworkInterfacesContainer: Объект с интерфейсами и координатами (0, 0).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_network_interfaces</span><span class="p">(</span><span class="n">initial_positions</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">NetworkInterfacesContainer</span><span class="p">(</span><span class="n">interfaces</span><span class="o">=</span><span class="n">interfaces</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_activated_interfaces">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_activated_interfaces">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_activated_interfaces</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает список активных сетевых интерфейсов.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[NetworkInterface]: Список активных интерфейсов (state == "100").</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_interfaces_by_state</span><span class="p">(</span><span class="s2">"100"</span><span class="p">,</span> <span class="n">initial_positions</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_deactivated_interfaces">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_deactivated_interfaces">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_deactivated_interfaces</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает список неактивных сетевых интерфейсов.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[NetworkInterface]: Список интерфейсов с state != "100".</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">all_interfaces</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_network_interfaces</span><span class="p">(</span><span class="n">initial_positions</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[</span>
|
||||
<span class="n">interface</span> <span class="k">for</span> <span class="n">interface</span> <span class="ow">in</span> <span class="n">all_interfaces</span>
|
||||
<span class="k">if</span> <span class="n">interface</span><span class="o">.</span><span class="n">device_state</span> <span class="o">!=</span> <span class="s2">"100"</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_activated_interfaces_container">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_activated_interfaces_container">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_activated_interfaces_container</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">NetworkInterfacesContainer</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает объект, содержащий список активных интерфейсов и координаты контейнера.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
<span class="sd"> container_x (int, optional): Координата X контейнера. По умолчанию 0.</span>
|
||||
<span class="sd"> container_y (int, optional): Координата Y контейнера. По умолчанию 0.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> NetworkInterfacesContainer: Объект с активными интерфейсами и координатами.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_interfaces_container</span><span class="p">(</span><span class="s2">"100"</span><span class="p">,</span> <span class="n">initial_positions</span><span class="p">,</span> <span class="n">container_x</span><span class="p">,</span> <span class="n">container_y</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NetworkService.get_deactivated_interfaces_container">
|
||||
<a class="viewcode-back" href="../../api/services/network_service.html#services.network_service.NetworkService.get_deactivated_interfaces_container">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_deactivated_interfaces_container</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">initial_positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">NetworkInterfacesContainer</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает объект, содержащий список неактивных интерфейсов и координаты контейнера.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> initial_positions (Dict[str, Tuple[int, int]], optional): Словарь начальных</span>
|
||||
<span class="sd"> координат (x, y) для интерфейсов. По умолчанию None.</span>
|
||||
<span class="sd"> container_x (int, optional): Координата X контейнера. По умолчанию 0.</span>
|
||||
<span class="sd"> container_y (int, optional): Координата Y контейнера. По умолчанию 0.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> NetworkInterfacesContainer: Объект с неактивными интерфейсами и координатами.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_deactivated_interfaces</span><span class="p">(</span><span class="n">initial_positions</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">NetworkInterfacesContainer</span><span class="p">(</span><span class="n">interfaces</span><span class="o">=</span><span class="n">interfaces</span><span class="p">,</span> <span class="n">container_x</span><span class="o">=</span><span class="n">container_x</span><span class="p">,</span> <span class="n">container_y</span><span class="o">=</span><span class="n">container_y</span><span class="p">)</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
431
SRV/docs/_build/html/_modules/services/settings_service.html
vendored
Normal file
431
SRV/docs/_build/html/_modules/services/settings_service.html
vendored
Normal file
|
|
@ -0,0 +1,431 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.settings_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.settings_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</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">Optional</span>
|
||||
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</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">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
|
||||
|
||||
<span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
|
||||
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="SettingsService">
|
||||
<a class="viewcode-back" href="../../api/services/settings_service.html#services.settings_service.SettingsService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">SettingsService</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сервис для управления настройками и очистки данных сети."""</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="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">subnet_base_path</span> <span class="o">=</span> <span class="s2">"storage/subnets"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">wifi_file</span> <span class="o">=</span> <span class="s2">"storage/wifi/wifi.json"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<div class="viewcode-block" id="SettingsService.clear_subnet">
|
||||
<a class="viewcode-back" href="../../api/services/settings_service.html#services.settings_service.SettingsService.clear_subnet">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">clear_subnet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subnet</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Очищает данные узлов подсети в указанном файле или во всех файлах.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> subnet (Optional[str]): Подсеть в формате CIDR (например, "10.1.1.0/24").</span>
|
||||
<span class="sd"> Если None, очищает все подсети.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True, если очистка успешна.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при записи в файл.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">subnet</span><span class="p">:</span>
|
||||
<span class="n">file_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subnet_base_path</span><span class="p">)</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">subnet</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span><span class="w"> </span><span class="s1">'_'</span><span class="p">)</span><span class="si">}</span><span class="s2">.json"</span>
|
||||
<span class="k">if</span> <span class="n">file_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">([],</span> <span class="n">f</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Subnet nodes data cleared for </span><span class="si">{</span><span class="n">subnet</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Subnet file not found for </span><span class="si">{</span><span class="n">subnet</span><span class="si">}</span><span class="s2">, clearing considered successful"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">file_path</span> <span class="ow">in</span> <span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subnet_base_path</span><span class="p">)</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">"*.json"</span><span class="p">):</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">([],</span> <span class="n">f</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Cleared subnet data in </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"No subnet files found, clearing considered successful"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error clearing subnet nodes: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка очистки узлов подсети: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SettingsService.clear_wifi">
|
||||
<a class="viewcode-back" href="../../api/services/settings_service.html#services.settings_service.SettingsService.clear_wifi">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">clear_wifi</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Очищает данные точек доступа Wi-Fi в файле wifi.json.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True, если очистка успешна.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при записи в файл.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">wifi_file</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">([],</span> <span class="n">f</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Wi-Fi access points data successfully cleared"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Wi-Fi file not found, clearing considered successful"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error clearing Wi-Fi access points: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка очистки точек доступа Wi-Fi: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SettingsService.clear_all_data">
|
||||
<a class="viewcode-back" href="../../api/services/settings_service.html#services.settings_service.SettingsService.clear_all_data">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">clear_all_data</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Очищает данные узлов всех подсетей и точек доступа Wi-Fi.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True, если очистка успешна.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при записи в один из файлов.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">file_path</span> <span class="ow">in</span> <span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subnet_base_path</span><span class="p">)</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">"*.json"</span><span class="p">):</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">([],</span> <span class="n">f</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Cleared subnet data in </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"No subnet files found, clearing considered successful"</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">wifi_file</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">([],</span> <span class="n">f</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Wi-Fi file not found, clearing considered successful"</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"All network data successfully cleared"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error clearing all network data: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка очистки всех сетевых данных: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
1095
SRV/docs/_build/html/_modules/services/subnet_service.html
vendored
Normal file
1095
SRV/docs/_build/html/_modules/services/subnet_service.html
vendored
Normal file
File diff suppressed because it is too large
Load diff
754
SRV/docs/_build/html/_modules/services/ufw_service.html
vendored
Normal file
754
SRV/docs/_build/html/_modules/services/ufw_service.html
vendored
Normal file
|
|
@ -0,0 +1,754 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.ufw_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.ufw_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">ipaddress</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">subprocess</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">Union</span>
|
||||
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.ufw</span><span class="w"> </span><span class="kn">import</span> <span class="n">Direction</span><span class="p">,</span> <span class="n">Protocol</span><span class="p">,</span> <span class="n">UFWRule</span><span class="p">,</span> <span class="n">UFWRulesResponse</span><span class="p">,</span> <span class="n">UFWStatus</span>
|
||||
|
||||
<span class="n">DEBUG</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">UFWService</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сервис взаимодействия с UFW (Uncomplicated Firewall).</span>
|
||||
|
||||
<span class="sd"> Назначение:</span>
|
||||
<span class="sd"> - Чтение статуса и списка правил брандмауэра.</span>
|
||||
<span class="sd"> - Добавление, удаление и массовая обработка правил с поддержкой диапазонов портов,</span>
|
||||
<span class="sd"> комментариев и выбором протоколов.</span>
|
||||
|
||||
<span class="sd"> Детали реализации:</span>
|
||||
<span class="sd"> - Команды выполняются через `sudo ufw ...`; вывод парсится в модели pydantic.</span>
|
||||
<span class="sd"> - Для операций удаления соблюдается порядок с конца, чтобы не нарушать нумерацию.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_run_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Выполняет команду в системе и возвращает ее вывод.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> command (str): Команда для выполнения в системе.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: Вывод команды.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Running command: </span><span class="si">{</span><span class="n">command</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Используем shell=True для корректной обработки аргументов с пробелами</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"sudo </span><span class="si">{</span><span class="n">command</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
|
||||
<span class="n">shell</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
|
||||
<span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
|
||||
<span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Command output: </span><span class="si">{</span><span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Command error: </span><span class="si">{</span><span class="n">result</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">returncode</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span>
|
||||
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Command failed with return code </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error output: </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Command failed: </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_port_range_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Преобразует порт или диапазон портов в аргументы команды UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> port: Порт (число) или диапазон портов (строка вида "3000:3999")</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> List[str]: Список аргументов для UFW</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">port</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">port</span><span class="p">)]</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">port</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">port</span><span class="p">:</span>
|
||||
<span class="c1"># Диапазон портов уже в нужном формате</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">port</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Некорректный формат порта: </span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="UFWService.get_ufw_rules">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.get_ufw_rules">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_ufw_rules</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">UFWRulesResponse</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Получает список правил UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> UFWRulesResponse: Объект, содержащий статус UFW и список правил</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># Check UFW status</span>
|
||||
<span class="n">status_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="s2">"ufw status numbered"</span><span class="p">)</span>
|
||||
<span class="n">lines</span> <span class="o">=</span> <span class="n">status_result</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">lines</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">UFWRulesResponse</span><span class="p">(</span><span class="n">enabled</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">rules</span><span class="o">=</span><span class="p">[])</span>
|
||||
|
||||
<span class="n">first_line</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">is_enabled</span> <span class="o">=</span> <span class="s2">"Status: active"</span> <span class="ow">in</span> <span class="n">first_line</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_enabled</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">UFWRulesResponse</span><span class="p">(</span><span class="n">enabled</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">rules</span><span class="o">=</span><span class="p">[])</span>
|
||||
|
||||
<span class="n">rules</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="c1"># Skip header lines</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">[</span><span class="mi">4</span><span class="p">:]:</span> <span class="c1"># Skip Status and header lines</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"["</span><span class="p">):</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">rule</span> <span class="o">=</span> <span class="n">UFWRule</span><span class="o">.</span><span class="n">from_ufw_output</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
|
||||
<span class="n">rules</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rule</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка парсинга правила: </span><span class="si">{</span><span class="n">line</span><span class="si">}</span><span class="s2">, ошибка: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">UFWRulesResponse</span><span class="p">(</span><span class="n">enabled</span><span class="o">=</span><span class="n">is_enabled</span><span class="p">,</span> <span class="n">rules</span><span class="o">=</span><span class="n">rules</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.get_ufw_status">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.get_ufw_status">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_ufw_status</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">UFWStatus</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Проверяет статус UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> UFWStatus: Объект с информацией о статусе UFW</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">status_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="s2">"ufw status"</span><span class="p">)</span>
|
||||
<span class="n">first_line</span> <span class="o">=</span> <span class="p">(</span><span class="n">status_result</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">status_result</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">is_enabled</span> <span class="o">=</span> <span class="s2">"Status: active"</span> <span class="ow">in</span> <span class="n">first_line</span>
|
||||
|
||||
<span class="n">message</span> <span class="o">=</span> <span class="s2">"UFW активен"</span> <span class="k">if</span> <span class="n">is_enabled</span> <span class="k">else</span> <span class="s2">"UFW неактивен"</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Результат статуса: </span><span class="si">{</span><span class="n">status_result</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Включен: </span><span class="si">{</span><span class="n">is_enabled</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">UFWStatus</span><span class="p">(</span><span class="n">enabled</span><span class="o">=</span><span class="n">is_enabled</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при проверке статуса UFW: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">UFWStatus</span><span class="p">(</span>
|
||||
<span class="n">enabled</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">message</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Ошибка при проверке статуса: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.enable_ufw">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.enable_ufw">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">enable_ufw</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Включает UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True если успешно включен, False в противном случае</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="s2">"ufw enable"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при включении UFW: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.disable_ufw">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.disable_ufw">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">disable_ufw</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Выключает UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True если успешно выключен, False в противном случае</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="s2">"ufw disable"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при выключении UFW: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.add_rules_base">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.add_rules_base">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_rules_base</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">rules</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UFWRule</span><span class="p">],</span>
|
||||
<span class="n">direction</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Базовый метод для добавления правил UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rules: Список правил для добавления</span>
|
||||
<span class="sd"> direction: Направление трафика ("in" или "out")</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True если все правила были успешно добавлены, False в противном случае</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
<span class="c1"># Устанавливаем направление правила</span>
|
||||
<span class="n">rule</span><span class="o">.</span><span class="n">direction</span> <span class="o">=</span> <span class="n">Direction</span><span class="o">.</span><span class="n">IN</span> <span class="k">if</span> <span class="n">direction</span> <span class="o">==</span> <span class="s2">"in"</span> <span class="k">else</span> <span class="n">Direction</span><span class="o">.</span><span class="n">OUT</span>
|
||||
|
||||
<span class="c1"># Формируем базовую команду</span>
|
||||
<span class="n">command</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"ufw </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">action</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем направление</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">direction</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем from IP если он указан</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">from_ip</span> <span class="ow">and</span> <span class="n">rule</span><span class="o">.</span><span class="n">from_ip</span> <span class="o">!=</span> <span class="s2">"any"</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" from </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">from_ip</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="s2">" from any"</span>
|
||||
|
||||
<span class="c1"># Добавляем to IP если он указан</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">to_ip</span> <span class="ow">and</span> <span class="n">rule</span><span class="o">.</span><span class="n">to_ip</span> <span class="o">!=</span> <span class="s2">"any"</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" to </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">to_ip</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="s2">" to any"</span>
|
||||
|
||||
<span class="c1"># Добавляем порт если он указан</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">port</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" port </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">port</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем протокол</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">protocol</span> <span class="o">!=</span> <span class="n">Protocol</span><span class="o">.</span><span class="n">BOTH</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" proto </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем комментарий если он есть</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" comment '</span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">comment</span><span class="si">}</span><span class="s2">'"</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error adding UFW rules: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.add_ufw_in_rules">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.add_ufw_in_rules">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_ufw_in_rules</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rules</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UFWRule</span><span class="p">])</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Добавляет входящие (in) правила UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rules (List[UFWRule]): Список правил для добавления</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True если все правила были успешно добавлены, False в противном случае</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_rules_base</span><span class="p">(</span><span class="n">rules</span><span class="p">,</span> <span class="s2">"in"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.add_ufw_out_rules">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.add_ufw_out_rules">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_ufw_out_rules</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rules</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UFWRule</span><span class="p">])</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Добавляет исходящие (out) правила UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rules (List[UFWRule]): Список правил для добавления</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: True если все правила были успешно добавлены, False в противном случае</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_rules_base</span><span class="p">(</span><span class="n">rules</span><span class="p">,</span> <span class="s2">"out"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.add_rules">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.add_rules">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_rules</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rules</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UFWRule</span><span class="p">])</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Добавляет правила UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rules: Список правил для добавления</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Результат добавления правил</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Определяем версию IP</span>
|
||||
<span class="n">from_ip</span> <span class="o">=</span> <span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_network</span><span class="p">(</span><span class="n">rule</span><span class="o">.</span><span class="n">from_ip</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">is_ipv6</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">from_ip</span><span class="p">,</span> <span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv6Network</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Получаем список протоколов</span>
|
||||
<span class="n">protocols</span> <span class="o">=</span> <span class="n">rule</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">protocols</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Обработка правила для протоколов: </span><span class="si">{</span><span class="n">protocols</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">proto</span> <span class="ow">in</span> <span class="n">protocols</span><span class="p">:</span>
|
||||
<span class="c1"># Формируем базовую команду</span>
|
||||
<span class="n">command</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"ufw </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">action</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем IP адреса</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" from </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">from_ip</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">to_ip</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" to </span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">to_ip</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем порт и протокол</span>
|
||||
<span class="n">port_args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_port_range_args</span><span class="p">(</span><span class="n">rule</span><span class="o">.</span><span class="n">port</span><span class="p">)</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" port </span><span class="si">{</span><span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">port_args</span><span class="p">)</span><span class="si">}</span><span class="s2"> proto </span><span class="si">{</span><span class="n">proto</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="c1"># Добавляем флаг IPv6 если нужно</span>
|
||||
<span class="k">if</span> <span class="n">is_ipv6</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="s2">" v6"</span>
|
||||
|
||||
<span class="c1"># Добавляем комментарий если есть</span>
|
||||
<span class="k">if</span> <span class="n">rule</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span>
|
||||
<span class="n">command</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" comment '</span><span class="si">{</span><span class="n">rule</span><span class="o">.</span><span class="n">comment</span><span class="si">}</span><span class="s2">'"</span>
|
||||
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Подготовлена команда: </span><span class="si">{</span><span class="n">command</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Выполняем команду</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
|
||||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="n">output</span><span class="p">})</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">error_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Ошибка выполнения команды: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">error_msg</span><span class="p">)</span>
|
||||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">error_msg</span>
|
||||
<span class="p">})</span>
|
||||
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">error_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Ошибка при добавлении правила: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">error_msg</span><span class="p">)</span>
|
||||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="n">error_msg</span><span class="p">})</span>
|
||||
|
||||
<span class="c1"># Выводим результаты</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Результаты добавления правил:"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">result</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="s2">"Успешно"</span> <span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]</span> <span class="k">else</span> <span class="s2">"Ошибка"</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">" - </span><span class="si">{</span><span class="n">status</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">result</span><span class="p">[</span><span class="s1">'message'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">:</span> <span class="n">results</span><span class="p">}</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="UFWService.delete_rules">
|
||||
<a class="viewcode-back" href="../../api/services/ufw_service.html#services.ufw_service.UFWService.delete_rules">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">delete_rules</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_numbers</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Удаляет правила UFW по их номерам.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rule_numbers (List[int]): Список номеров правил для удаления</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Результат операции удаления</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Проверяем существование правил</span>
|
||||
<span class="n">status_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="s2">"ufw status numbered"</span><span class="p">)</span>
|
||||
<span class="n">lines</span> <span class="o">=</span> <span class="n">status_result</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># Пропускаем заголовок (первые 4 строки)</span>
|
||||
<span class="n">rules</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">[</span><span class="mi">4</span><span class="p">:]:</span> <span class="c1"># Skip header lines</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"["</span><span class="p">):</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Извлекаем номер правила из строки [N]</span>
|
||||
<span class="n">rule_num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">line</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">"]"</span><span class="p">)])</span>
|
||||
<span class="n">rules</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rule_num</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Найдены правила: </span><span class="si">{</span><span class="n">rules</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="c1"># Сортируем номера в обратном порядке, чтобы удаление происходило с конца</span>
|
||||
<span class="c1"># Это предотвратит смещение номеров при удалении</span>
|
||||
<span class="k">for</span> <span class="n">rule_number</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">rule_numbers</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Проверяем существует ли правило с таким номером</span>
|
||||
<span class="k">if</span> <span class="n">rule_number</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
||||
<span class="s2">"number"</span><span class="p">:</span>
|
||||
<span class="n">rule_number</span><span class="p">,</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span>
|
||||
<span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"error"</span><span class="p">:</span>
|
||||
<span class="sa">f</span><span class="s2">"Правило с номером </span><span class="si">{</span><span class="n">rule_number</span><span class="si">}</span><span class="s2"> не найдено"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="c1"># Удаляем правило</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_run_command</span><span class="p">(</span><span class="sa">f</span><span class="s2">"ufw --force delete </span><span class="si">{</span><span class="n">rule_number</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
||||
<span class="s2">"number"</span><span class="p">:</span>
|
||||
<span class="n">rule_number</span><span class="p">,</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span>
|
||||
<span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span>
|
||||
<span class="sa">f</span><span class="s2">"Правило </span><span class="si">{</span><span class="n">rule_number</span><span class="si">}</span><span class="s2"> успешно удалено"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"Ошибка при удалении правила </span><span class="si">{</span><span class="n">rule_number</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
||||
<span class="s2">"number"</span><span class="p">:</span> <span class="n">rule_number</span><span class="p">,</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="p">})</span>
|
||||
|
||||
<span class="c1"># Подсчитываем статистику</span>
|
||||
<span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">rule_numbers</span><span class="p">)</span>
|
||||
<span class="n">successful</span> <span class="o">=</span> <span class="nb">len</span><span class="p">([</span><span class="n">r</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">results</span> <span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]])</span>
|
||||
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"total"</span><span class="p">:</span> <span class="n">total</span><span class="p">,</span>
|
||||
<span class="s2">"successful"</span><span class="p">:</span> <span class="n">successful</span><span class="p">,</span>
|
||||
<span class="s2">"results"</span><span class="p">:</span> <span class="n">results</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">DEBUG</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при удалении правил: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"results"</span><span class="p">:</span> <span class="p">[]}</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
718
SRV/docs/_build/html/_modules/services/wifi_service.html
vendored
Normal file
718
SRV/docs/_build/html/_modules/services/wifi_service.html
vendored
Normal file
|
|
@ -0,0 +1,718 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>services.wifi_service - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for services.wifi_service</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">time</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">subprocess</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">functools</span><span class="w"> </span><span class="kn">import</span> <span class="n">lru_cache</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">Optional</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Tuple</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">mac_vendor_lookup</span><span class="w"> </span><span class="kn">import</span> <span class="n">MacLookup</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">pywifi</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.wifi</span><span class="w"> </span><span class="kn">import</span> <span class="n">WifiAccessPoint</span><span class="p">,</span> <span class="n">WifiScanResult</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</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="c1"># Настройка логирования</span>
|
||||
<span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span>
|
||||
<span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">,</span>
|
||||
<span class="nb">format</span><span class="o">=</span><span class="s2">"</span><span class="si">%(asctime)s</span><span class="s2"> - </span><span class="si">%(name)s</span><span class="s2"> - </span><span class="si">%(levelname)s</span><span class="s2"> - </span><span class="si">%(message)s</span><span class="s2">"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="WifiStorage">
|
||||
<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="w"> </span><span class="sd">"""Класс для хранения данных о Wi‑Fi сетях и их заметках по SSID.</span>
|
||||
|
||||
<span class="sd"> Формат:</span>
|
||||
<span class="sd"> {</span>
|
||||
<span class="sd"> "networks": [{"ssid": str, "note": Optional[str]}]</span>
|
||||
<span class="sd"> }</span>
|
||||
|
||||
<span class="sd"> Поведение:</span>
|
||||
<span class="sd"> - Создаёт директорию хранения при инициализации, ведёт логирование путей.</span>
|
||||
<span class="sd"> - Валидация структуры при чтении, безопасная запись с Unicode и отступами.</span>
|
||||
<span class="sd"> """</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">storage_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"storage/wifi/wifi.json"</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="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">storage_path</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Wi-Fi storage initialized at: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="o">.</span><span class="n">absolute</span><span class="p">()</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="WifiStorage.load_notes">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiStorage.load_notes">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">load_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Загружает заметки по SSID из файла хранения."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"networks"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Invalid JSON structure in </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="si">}</span><span class="s2">, expected </span><span class="si">{</span><span class="s1">'networks'</span><span class="si">:</span><span class="s2"> [...]</span><span class="si">}</span><span class="s2">, got </span><span class="si">{</span><span class="n">data</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{}</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="n">item</span><span class="p">[</span><span class="s2">"ssid"</span><span class="p">]:</span> <span class="n">item</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"note"</span><span class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"networks"</span><span class="p">,</span> <span class="p">[])}</span>
|
||||
<span class="k">return</span> <span class="p">{}</span>
|
||||
<span class="k">except</span> <span class="n">json</span><span class="o">.</span><span class="n">JSONDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"JSON decode error in </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error loading notes from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{}</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiStorage.save_notes">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiStorage.save_notes">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">save_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">notes</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сохраняет заметки по SSID в файл."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"networks"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"ssid"</span><span class="p">:</span> <span class="n">ssid</span><span class="p">,</span> <span class="s2">"note"</span><span class="p">:</span> <span class="n">note</span><span class="p">}</span> <span class="k">for</span> <span class="n">ssid</span><span class="p">,</span> <span class="n">note</span> <span class="ow">in</span> <span class="n">notes</span><span class="o">.</span><span class="n">items</span><span class="p">()]}</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Saved </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">notes</span><span class="p">)</span><span class="si">}</span><span class="s2"> notes to </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="o">.</span><span class="n">absolute</span><span class="p">()</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">PermissionError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Permission denied writing to </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error saving notes to </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка при сохранении заметок: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiService">
|
||||
<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="w"> </span><span class="sd">"""Сервис для сканирования текущих Wi‑Fi точек доступа и заметок.</span>
|
||||
|
||||
<span class="sd"> Источники данных:</span>
|
||||
<span class="sd"> - `pywifi` для базового сканирования и получения списка AP.</span>
|
||||
<span class="sd"> - `iw dev <iface> scan` для уточнения частоты, сигнала и безопасности.</span>
|
||||
<span class="sd"> - `MacLookup` для определения вендора по BSSID.</span>
|
||||
|
||||
<span class="sd"> Политики:</span>
|
||||
<span class="sd"> - Выбор лучшего AP по SSID по уровню сигнала.</span>
|
||||
<span class="sd"> - Кэширование определения вендора.</span>
|
||||
<span class="sd"> - Сохранение SSID даже без заметок для будущих операций.</span>
|
||||
<span class="sd"> """</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="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mac_lookup</span> <span class="o">=</span> <span class="n">MacLookup</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">wifi</span> <span class="o">=</span> <span class="n">pywifi</span><span class="o">.</span><span class="n">PyWiFi</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_wifi_interface</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">translations</span><span class="p">,</span> <span class="s1">'gettext'</span><span class="p">):</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Translations object does not support gettext, using fallback"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">Translations</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"utils/locales/en/LC_MESSAGES/services.mo"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">WifiStorage</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_wifi_interface</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">object</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Автоматически определяет активный Wi-Fi-интерфейс."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wifi</span><span class="o">.</span><span class="n">interfaces</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">interfaces</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не найдено сетевых интерфейсов"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Available interfaces: </span><span class="si">{</span><span class="p">[</span><span class="n">iface</span><span class="o">.</span><span class="n">name</span><span class="p">()</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">iface</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">interfaces</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">iface</span> <span class="ow">in</span> <span class="n">interfaces</span><span class="p">:</span>
|
||||
<span class="n">iface_name</span> <span class="o">=</span> <span class="n">iface</span><span class="o">.</span><span class="n">name</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="s2">"p2p"</span> <span class="ow">in</span> <span class="n">iface_name</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Skipped interface </span><span class="si">{</span><span class="n">iface_name</span><span class="si">}</span><span class="s2"> (P2P)"</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">iface</span><span class="o">.</span><span class="n">scan</span><span class="p">()</span>
|
||||
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">results</span> <span class="o">=</span> <span class="n">iface</span><span class="o">.</span><span class="n">scan_results</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">results</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Selected Wi-Fi interface: </span><span class="si">{</span><span class="n">iface_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">iface</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Interface </span><span class="si">{</span><span class="n">iface_name</span><span class="si">}</span><span class="s2"> returned no scan results"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Interface </span><span class="si">{</span><span class="n">iface_name</span><span class="si">}</span><span class="s2"> inactive: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не найден активный Wi-Fi-интерфейс"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error determining Wi-Fi interface: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<div class="viewcode-block" id="WifiService.get_vendor">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService.get_vendor">[docs]</a>
|
||||
<span class="nd">@lru_cache</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_vendor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mac</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Определяет вендора по MAC-адресу с использованием кэширования."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mac_lookup</span><span class="o">.</span><span class="n">lookup</span><span class="p">(</span><span class="n">mac</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to determine vendor for MAC </span><span class="si">{</span><span class="n">mac</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Неизвестный"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_encryption_from_iw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ap_info</span><span class="p">:</span> <span class="n">Dict</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Определяет тип шифрования из данных, полученных через iw."""</span>
|
||||
<span class="n">security</span> <span class="o">=</span> <span class="n">ap_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"security"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Encryption for BSSID </span><span class="si">{</span><span class="n">ap_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'bssid'</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">security</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"WPA3"</span> <span class="ow">in</span> <span class="n">security</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"WPA3"</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"WPA2"</span> <span class="ow">in</span> <span class="n">security</span> <span class="ow">or</span> <span class="s2">"RSN"</span> <span class="ow">in</span> <span class="n">security</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"WPA2"</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"WPA"</span> <span class="ow">in</span> <span class="n">security</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"WPA"</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"WEP"</span> <span class="ow">in</span> <span class="n">security</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"WEP"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Открытая"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_channel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frequency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Преобразует частоту в номер канала."""</span>
|
||||
<span class="k">if</span> <span class="n">frequency</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="mi">2412</span> <span class="o"><=</span> <span class="n">frequency</span> <span class="o"><=</span> <span class="mi">2472</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">frequency</span> <span class="o">-</span> <span class="mi">2412</span><span class="p">)</span> <span class="o">//</span> <span class="mi">5</span> <span class="o">+</span> <span class="mi">1</span>
|
||||
<span class="k">elif</span> <span class="mi">5180</span> <span class="o"><=</span> <span class="n">frequency</span> <span class="o"><=</span> <span class="mi">5825</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">frequency</span> <span class="o">-</span> <span class="mi">5180</span><span class="p">)</span> <span class="o">//</span> <span class="mi">5</span> <span class="o">+</span> <span class="mi">36</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Frequency </span><span class="si">{</span><span class="n">frequency</span><span class="si">}</span><span class="s2"> outside 2.4/5 GHz range"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error determining channel for frequency </span><span class="si">{</span><span class="n">frequency</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_frequency</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frequency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Определяет частотный диапазон на основе частоты."""</span>
|
||||
<span class="k">if</span> <span class="n">frequency</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="mi">2412</span> <span class="o"><=</span> <span class="n">frequency</span> <span class="o"><=</span> <span class="mi">2472</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"2.4 ГГц"</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="mi">5180</span> <span class="o"><=</span> <span class="n">frequency</span> <span class="o"><=</span> <span class="mi">5825</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"5 ГГц"</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Frequency </span><span class="si">{</span><span class="n">frequency</span><span class="si">}</span><span class="s2"> outside 2.4/5 GHz range"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error determining band for frequency </span><span class="si">{</span><span class="n">frequency</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_iw_scan_data</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает данные сканирования Wi-Fi через команду iw."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Интерфейс не определён"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"sudo"</span><span class="p">,</span> <span class="s2">"iw"</span><span class="p">,</span> <span class="s2">"dev"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">name</span><span class="p">(),</span> <span class="s2">"scan"</span><span class="p">]</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Executing command: </span><span class="si">{</span><span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"iw scan error: </span><span class="si">{</span><span class="n">result</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"iw scan output (first 500 chars): </span><span class="si">{</span><span class="n">output</span><span class="p">[:</span><span class="mi">500</span><span class="p">]</span><span class="si">}</span><span class="s2">..."</span><span class="p">)</span>
|
||||
|
||||
<span class="n">aps</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">current_ap</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">bssid_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"BSS ([0-9a-f:]</span><span class="si">{17}</span><span class="s2">)"</span><span class="p">)</span>
|
||||
<span class="n">ssid_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"SSID: ?(.*)"</span><span class="p">)</span>
|
||||
<span class="n">freq_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"freq: (\d+)"</span><span class="p">)</span>
|
||||
<span class="n">signal_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"signal: ([-\d.]+) dBm"</span><span class="p">)</span>
|
||||
<span class="n">rsn_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"RSN:"</span><span class="p">)</span>
|
||||
<span class="n">wpa_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"WPA:"</span><span class="p">)</span>
|
||||
<span class="n">security_type_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\* (WPA3|WPA2|WPA|WEP)"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">bssid_match</span> <span class="o">:=</span> <span class="n">bssid_pattern</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">current_ap</span><span class="p">:</span>
|
||||
<span class="n">aps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">current_ap</span><span class="p">)</span>
|
||||
<span class="n">current_ap</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"bssid"</span><span class="p">:</span> <span class="n">bssid_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="s2">"security"</span><span class="p">:</span> <span class="s2">""</span><span class="p">}</span>
|
||||
<span class="k">elif</span> <span class="n">current_ap</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">ssid_match</span> <span class="o">:=</span> <span class="n">ssid_pattern</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="p">[</span><span class="s2">"ssid"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ssid_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">ssid_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="k">elif</span> <span class="n">freq_match</span> <span class="o">:=</span> <span class="n">freq_pattern</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="p">[</span><span class="s2">"frequency"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">freq_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">signal_match</span> <span class="o">:=</span> <span class="n">signal_pattern</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="p">[</span><span class="s2">"signal"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">signal_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">rsn_pattern</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="p">[</span><span class="s2">"security"</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"RSN;"</span>
|
||||
<span class="k">elif</span> <span class="n">wpa_pattern</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="p">[</span><span class="s2">"security"</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"WPA;"</span>
|
||||
<span class="k">elif</span> <span class="n">security_type_match</span> <span class="o">:=</span> <span class="n">security_type_pattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="p">[</span><span class="s2">"security"</span><span class="p">]</span> <span class="o">+=</span> <span class="n">security_type_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">";"</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">current_ap</span><span class="p">:</span>
|
||||
<span class="n">aps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">current_ap</span><span class="p">)</span>
|
||||
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">aps</span><span class="p">)</span><span class="si">}</span><span class="s2"> access points via iw: </span><span class="si">{</span><span class="p">[</span><span class="n">ap</span><span class="p">[</span><span class="s1">'bssid'</span><span class="p">]</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">ap</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">aps</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">aps</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error executing iw scan: </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">stderr</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">TimeoutExpired</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Таймаут при выполнении iw scan"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error parsing iw scan: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
|
||||
<div class="viewcode-block" id="WifiService.scan_wifi">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService.scan_wifi">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">scan_wifi</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">30</span><span class="p">)</span> <span class="o">-></span> <span class="n">WifiScanResult</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Сканирует текущие Wi-Fi точки доступа."""</span>
|
||||
<span class="n">start_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||
<span class="n">aps</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Wi-Fi-интерфейс не доступен"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">WifiScanResult</span><span class="p">(</span><span class="n">access_points</span><span class="o">=</span><span class="n">aps</span><span class="p">)</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Starting Wi-Fi scan on interface </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">name</span><span class="p">()</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">max_attempts</span> <span class="o">=</span> <span class="mi">3</span>
|
||||
<span class="k">for</span> <span class="n">attempt</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_attempts</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">scan</span><span class="p">()</span>
|
||||
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
|
||||
<span class="n">py_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">scan_results</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">py_results</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">py_results</span><span class="p">)</span><span class="si">}</span><span class="s2"> access points via pywifi after attempt </span><span class="si">{</span><span class="n">attempt</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Scan attempt </span><span class="si">{</span><span class="n">attempt</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="si">}</span><span class="s2"> failed, trying again (FAIL-BUSY?)"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"All scan attempts failed"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WifiScanResult</span><span class="p">(</span><span class="n">access_points</span><span class="o">=</span><span class="n">aps</span><span class="p">)</span>
|
||||
|
||||
<span class="n">iw_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_iw_scan_data</span><span class="p">()</span>
|
||||
<span class="n">iw_by_bssid</span> <span class="o">=</span> <span class="p">{</span><span class="n">ap</span><span class="p">[</span><span class="s2">"bssid"</span><span class="p">]:</span> <span class="n">ap</span> <span class="k">for</span> <span class="n">ap</span> <span class="ow">in</span> <span class="n">iw_results</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"bssid"</span><span class="p">)}</span>
|
||||
|
||||
<span class="n">best_aps_by_ssid</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">WifiAccessPoint</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">saved_notes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">load_notes</span><span class="p">()</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">ap</span> <span class="ow">in</span> <span class="n">py_results</span><span class="p">:</span>
|
||||
<span class="n">bssid</span> <span class="o">=</span> <span class="n">ap</span><span class="o">.</span><span class="n">bssid</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">bssid</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">bssid</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Skipped access point without BSSID"</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">ssid</span> <span class="o">=</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">"Hidden_</span><span class="si">{</span><span class="n">bssid</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="n">hidden</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span>
|
||||
<span class="n">signal</span> <span class="o">=</span> <span class="n">ap</span><span class="o">.</span><span class="n">signal</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">signal</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">iw_data</span> <span class="o">=</span> <span class="n">iw_by_bssid</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bssid</span><span class="p">,</span> <span class="p">{})</span>
|
||||
|
||||
<span class="n">frequency</span> <span class="o">=</span> <span class="n">iw_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"frequency"</span><span class="p">)</span>
|
||||
<span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_channel</span><span class="p">(</span><span class="n">frequency</span><span class="p">)</span>
|
||||
<span class="n">freq_band</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_frequency</span><span class="p">(</span><span class="n">frequency</span><span class="p">)</span>
|
||||
<span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_encryption_from_iw</span><span class="p">(</span><span class="n">iw_data</span><span class="p">)</span>
|
||||
<span class="n">vendor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_vendor</span><span class="p">(</span><span class="n">bssid</span><span class="p">)</span>
|
||||
|
||||
<span class="n">current_ap</span> <span class="o">=</span> <span class="n">WifiAccessPoint</span><span class="p">(</span>
|
||||
<span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span>
|
||||
<span class="n">bssid</span><span class="o">=</span><span class="n">bssid</span><span class="p">,</span>
|
||||
<span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
|
||||
<span class="n">signal</span><span class="o">=</span><span class="n">signal</span> <span class="k">if</span> <span class="n">signal</span> <span class="k">else</span> <span class="n">iw_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"signal"</span><span class="p">),</span>
|
||||
<span class="n">encryption</span><span class="o">=</span><span class="n">encryption</span><span class="p">,</span>
|
||||
<span class="n">frequency</span><span class="o">=</span><span class="n">freq_band</span><span class="p">,</span>
|
||||
<span class="n">vendor</span><span class="o">=</span><span class="n">vendor</span><span class="p">,</span>
|
||||
<span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">,</span>
|
||||
<span class="n">note</span><span class="o">=</span><span class="n">saved_notes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ssid</span><span class="p">)</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Processed AP: </span><span class="si">{</span><span class="n">current_ap</span><span class="o">.</span><span class="n">model_dump</span><span class="p">()</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ssid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">best_aps_by_ssid</span> <span class="ow">or</span> <span class="p">(</span>
|
||||
<span class="n">current_ap</span><span class="o">.</span><span class="n">signal</span> <span class="ow">and</span> <span class="n">best_aps_by_ssid</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span><span class="o">.</span><span class="n">signal</span>
|
||||
<span class="ow">and</span> <span class="n">current_ap</span><span class="o">.</span><span class="n">signal</span> <span class="o">></span> <span class="n">best_aps_by_ssid</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span><span class="o">.</span><span class="n">signal</span><span class="p">):</span>
|
||||
<span class="n">current_ap</span><span class="o">.</span><span class="n">note</span> <span class="o">=</span> <span class="n">saved_notes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ssid</span><span class="p">)</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">best_aps_by_ssid</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="o">=</span> <span class="n">current_ap</span>
|
||||
|
||||
<span class="n">aps</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">best_aps_by_ssid</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
|
||||
<span class="c1"># Сохраняем хотя бы SSID, если заметок нет</span>
|
||||
<span class="n">notes_to_save</span> <span class="o">=</span> <span class="p">{</span><span class="n">ap</span><span class="o">.</span><span class="n">ssid</span><span class="p">:</span> <span class="n">ap</span><span class="o">.</span><span class="n">note</span> <span class="k">for</span> <span class="n">ap</span> <span class="ow">in</span> <span class="n">aps</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span><span class="p">}</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">notes_to_save</span> <span class="ow">and</span> <span class="n">aps</span><span class="p">:</span>
|
||||
<span class="n">notes_to_save</span> <span class="o">=</span> <span class="p">{</span><span class="n">ap</span><span class="o">.</span><span class="n">ssid</span><span class="p">:</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">ap</span> <span class="ow">in</span> <span class="n">aps</span> <span class="k">if</span> <span class="n">ap</span><span class="o">.</span><span class="n">ssid</span><span class="p">}</span> <span class="c1"># Сохраняем SSID без заметок</span>
|
||||
<span class="k">if</span> <span class="n">notes_to_save</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save_notes</span><span class="p">(</span><span class="n">notes_to_save</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"No notes or SSIDs to save, skipping file write"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Wi-Fi scan completed, found </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">aps</span><span class="p">)</span><span class="si">}</span><span class="s2"> unique networks"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WifiScanResult</span><span class="p">(</span><span class="n">access_points</span><span class="o">=</span><span class="n">aps</span><span class="p">)</span>
|
||||
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error scanning Wi-Fi: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WifiScanResult</span><span class="p">(</span><span class="n">access_points</span><span class="o">=</span><span class="n">aps</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiService.add_note">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService.add_note">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_note</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">note</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Добавляет заметку к сети Wi-Fi по SSID."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">saved_notes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">load_notes</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">ssid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">saved_notes</span> <span class="ow">or</span> <span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Added new note for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Note for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> already exists"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для сети с SSID </span><span class="si">{ssid}</span><span class="s2"> уже существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="o">=</span> <span class="n">note</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save_notes</span><span class="p">(</span><span class="n">saved_notes</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Added note '</span><span class="si">{</span><span class="n">note</span><span class="si">}</span><span class="s2">' for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error adding note for SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiService.update_note">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService.update_note">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">update_note</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">note</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Обновляет заметку сети Wi-Fi по SSID."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">saved_notes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">load_notes</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">ssid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">saved_notes</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Note for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> does not exist"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для сети с SSID </span><span class="si">{ssid}</span><span class="s2"> не существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="o">=</span> <span class="n">note</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save_notes</span><span class="p">(</span><span class="n">saved_notes</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Updated note '</span><span class="si">{</span><span class="n">note</span><span class="si">}</span><span class="s2">' for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error updating note for SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WifiService.delete_note">
|
||||
<a class="viewcode-back" href="../../api/services/wifi_service.html#services.wifi_service.WifiService.delete_note">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">delete_note</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Удаляет заметку сети Wi-Fi по SSID."""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">saved_notes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">load_notes</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">ssid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">saved_notes</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Note for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> does not exist"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для сети с SSID </span><span class="si">{ssid}</span><span class="s2"> не существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="n">saved_notes</span><span class="p">[</span><span class="n">ssid</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save_notes</span><span class="p">(</span><span class="n">saved_notes</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Deleted note for network with SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error deleting note for SSID </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue