add config generator
This commit is contained in:
parent
2af44c3bb0
commit
1b805b335a
|
@ -1,7 +1,8 @@
|
||||||
from .config import conf, STATIC_DIR
|
from .config import conf, STATIC_DIR, TEMPLATES_DIR
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"conf",
|
"conf",
|
||||||
STATIC_DIR,
|
STATIC_DIR,
|
||||||
|
TEMPLATES_DIR,
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,7 +2,7 @@ from fastapi import APIRouter
|
||||||
|
|
||||||
from .swagger import router as swagger_router
|
from .swagger import router as swagger_router
|
||||||
from config import conf
|
from config import conf
|
||||||
|
from .web import router as web_router
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
@ -10,3 +10,7 @@ router.include_router(
|
||||||
swagger_router,
|
swagger_router,
|
||||||
prefix=conf.prefix.swagger,
|
prefix=conf.prefix.swagger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
router.include_router(
|
||||||
|
web_router,
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
from fastapi import APIRouter
|
||||||
|
|
||||||
|
from .check_ports import router as check_ports_router
|
||||||
|
from .start_page import router as start_page_router
|
||||||
|
from .mikrotik_conf import router as mikrotik_conf_router
|
||||||
|
|
||||||
|
|
||||||
|
router = APIRouter(
|
||||||
|
tags=["Web"],
|
||||||
|
)
|
||||||
|
router.include_router(
|
||||||
|
check_ports_router,
|
||||||
|
prefix="/web/check_ports",
|
||||||
|
)
|
||||||
|
router.include_router(
|
||||||
|
mikrotik_conf_router,
|
||||||
|
prefix="/web/mikrotik_conf",
|
||||||
|
)
|
||||||
|
router.include_router(
|
||||||
|
start_page_router,
|
||||||
|
prefix="",
|
||||||
|
)
|
|
@ -0,0 +1,34 @@
|
||||||
|
from fastapi import APIRouter
|
||||||
|
from starlette.requests import Request
|
||||||
|
from starlette.responses import HTMLResponse
|
||||||
|
from starlette.templating import Jinja2Templates
|
||||||
|
from config import TEMPLATES_DIR
|
||||||
|
|
||||||
|
from scripts import check_available_ports
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
templates = Jinja2Templates(directory=TEMPLATES_DIR)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("", response_class=HTMLResponse)
|
||||||
|
async def check_ports(request: Request):
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
"body-check_ports.html",
|
||||||
|
{
|
||||||
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/start")
|
||||||
|
async def start_check_ports(request: Request, inputText: str):
|
||||||
|
|
||||||
|
results = check_available_ports(inputText, result_type="text")
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
"body-check_ports.html",
|
||||||
|
{
|
||||||
|
"request": request,
|
||||||
|
"results": results,
|
||||||
|
},
|
||||||
|
)
|
|
@ -0,0 +1,49 @@
|
||||||
|
from fastapi import APIRouter, Form
|
||||||
|
from starlette.requests import Request
|
||||||
|
from starlette.responses import HTMLResponse
|
||||||
|
from starlette.templating import Jinja2Templates
|
||||||
|
from config import TEMPLATES_DIR
|
||||||
|
|
||||||
|
from scripts import check_available_ports
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
templates = Jinja2Templates(directory=TEMPLATES_DIR)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("", response_class=HTMLResponse)
|
||||||
|
async def mikrotik_conf(request: Request):
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
"mikrotik_conf/body-mikrotik_conf.html",
|
||||||
|
{
|
||||||
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/get-ports", response_class=HTMLResponse)
|
||||||
|
async def mikrotik_conf_generate(request: Request, model: str):
|
||||||
|
if model == "rb5009ug":
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
"mikrotik_conf/ports_rb5009ug.html",
|
||||||
|
{
|
||||||
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/generate")
|
||||||
|
async def mikrotik_conf_generate(request: Request, inputText: str):
|
||||||
|
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
"mikrotik_conf/body-mikrotik_conf.html",
|
||||||
|
{
|
||||||
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/process-text")
|
||||||
|
async def test(inputText: str = Form(...)):
|
||||||
|
processed_text = inputText.upper()
|
||||||
|
return processed_text
|
|
@ -0,0 +1,19 @@
|
||||||
|
from fastapi import APIRouter
|
||||||
|
from starlette.requests import Request
|
||||||
|
from starlette.responses import HTMLResponse
|
||||||
|
from starlette.templating import Jinja2Templates
|
||||||
|
from config import TEMPLATES_DIR
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
templates = Jinja2Templates(directory=TEMPLATES_DIR)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/", response_class=HTMLResponse)
|
||||||
|
async def start_page(request: Request):
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
"base.html",
|
||||||
|
{
|
||||||
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
|
@ -0,0 +1,5 @@
|
||||||
|
from .check_available_ports import start_check as check_available_ports
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"check_available_ports",
|
||||||
|
]
|
|
@ -0,0 +1,54 @@
|
||||||
|
import socket
|
||||||
|
import re
|
||||||
|
from typing import List, Dict, Union
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
def check_conn(ip: str, port: int) -> bool:
|
||||||
|
logging.info("")
|
||||||
|
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
conn.settimeout(3)
|
||||||
|
try:
|
||||||
|
conn.connect((ip, port))
|
||||||
|
logging.info(f"{ip}:{port} - True")
|
||||||
|
return True
|
||||||
|
except TimeoutError:
|
||||||
|
logging.warning(f"{ip}:{port} - Timeout")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def parse_input(text: str) -> List[Dict[str, Union[int, str]]]:
|
||||||
|
logging.info("")
|
||||||
|
pattern = r"Error;.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d+)/(\w+)"
|
||||||
|
matches = re.findall(pattern, text)
|
||||||
|
result = [
|
||||||
|
{"ip": match[0], "port": int(match[1]), "protocol": match[2]}
|
||||||
|
for match in matches
|
||||||
|
]
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def start_check(
|
||||||
|
text: str,
|
||||||
|
result_type: str = "json",
|
||||||
|
) -> List[Dict[str, Union[int, str, bool]]] | List[str]:
|
||||||
|
logging.info("")
|
||||||
|
result = []
|
||||||
|
for i in parse_input(text):
|
||||||
|
if i["protocol"] == "tcp":
|
||||||
|
if check_conn(i["ip"], i["port"]):
|
||||||
|
i["result"] = True
|
||||||
|
result.append(i)
|
||||||
|
else:
|
||||||
|
i["result"] = False
|
||||||
|
result.append(i)
|
||||||
|
|
||||||
|
if result_type == "text":
|
||||||
|
results = []
|
||||||
|
for i in result:
|
||||||
|
if i["result"]:
|
||||||
|
results.append(f"{i['ip']}:{i['port']}/{i['protocol']} - OK")
|
||||||
|
else:
|
||||||
|
results.append(f"{i['ip']}:{i['port']}/{i['protocol']} - FAIL")
|
||||||
|
return results
|
||||||
|
return result
|
|
@ -0,0 +1,29 @@
|
||||||
|
header {
|
||||||
|
background-color: green;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.header-button{
|
||||||
|
#background-color: red;
|
||||||
|
display: inline-block;
|
||||||
|
float: right;
|
||||||
|
|
||||||
|
}
|
||||||
|
div.body{
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
background-color: red;
|
||||||
|
position:fixed;
|
||||||
|
left: 0;
|
||||||
|
bottom:0;
|
||||||
|
width:100%;
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>SiPi-web</title>
|
||||||
|
<link href="/static/css/base.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link rel="icon" href="data:;base64,=">
|
||||||
|
<script src="/static/js/htmx.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
{% include 'header.html' %}
|
||||||
|
|
||||||
|
{% include 'body.html' %}
|
||||||
|
|
||||||
|
{% include 'footer.html' %}
|
||||||
|
</html>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<div id="body">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<input type="text" id="inputText" name="inputText" placeholder="Введите значение" />
|
||||||
|
<button hx-get="/web/check_ports/start" hx-include="#inputText" hx-target='#body'>Проверить</button>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="result">
|
||||||
|
{% for result in results %}
|
||||||
|
<p>{{ result }}</p>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<div id="body">
|
||||||
|
|
||||||
|
</div>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<footer class="footer">
|
||||||
|
Сирожа корпорейтед ©
|
||||||
|
</footer>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<header>
|
||||||
|
<label>SiPi-web</label>
|
||||||
|
<div class="header-button">
|
||||||
|
<button hx-get="/web/check_ports" hx-target='#body'>Сверка по портам</button>
|
||||||
|
<button hx-get="/web/mikrotik_conf" hx-target='#body'>Конфиг для микрота</button>
|
||||||
|
<!--
|
||||||
|
<button hx-get="/web/isp/get_all" hx-target='#body'>Подключения провайдеров</button>
|
||||||
|
<button hx-get="/web/settings" hx-target='#body'>Настройки</button>
|
||||||
|
<button hx-get="/web/isp/get_all" hx-target='#body' hx-swap="outerHTML" hx-trigger="click">Площадки</button>
|
||||||
|
<button hx-get="/web/isp/get_all" hx-target='#body'>Внешние адреса</button>
|
||||||
|
<button hx-get="/web/isp/get_all" hx-target='#body'>Внутренние подсети</button>
|
||||||
|
<button hx-get="/web/isp/get_all" hx-target='#body'>Сетевое оборудование</button>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
</header>
|
|
@ -0,0 +1,69 @@
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between; /* Распределяет пространство между элементами */
|
||||||
|
}
|
||||||
|
.box {
|
||||||
|
width: 30%; /* Ширина каждого блока */
|
||||||
|
padding: 20px;
|
||||||
|
background-color: lightblue;
|
||||||
|
border: 1px solid #000;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div id="body" class="box">
|
||||||
|
<label for="model">Модель:</label>
|
||||||
|
<select id="model" name="model" hx-get="/web/mikrotik_conf/get-ports" hx-target="#ports" hx-trigger="change">
|
||||||
|
<option value="">-- Модель --</option>
|
||||||
|
<option value="rb5009ug">RB5009</option>
|
||||||
|
</select>
|
||||||
|
<div id="ports">
|
||||||
|
тут облабла
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="settings" class="box">
|
||||||
|
<form hx-post="/web/mikrotik_conf/process-data" hx-target="#cisco_tunnel" hx-trigger="submit">
|
||||||
|
<label for="code">Код площадки</label>
|
||||||
|
<input type="text" id="code" name="code" required placeholder="XXXX"><br>
|
||||||
|
|
||||||
|
<label for="network">16-я подсеть</label>
|
||||||
|
<input type="text" id="network" name="network" required placeholder="10.xx.0.0/16"><br>
|
||||||
|
|
||||||
|
<label for="loopback">loopback</label>
|
||||||
|
<input type="text" id="loopback" name="loopback" required placeholder="192.168.11.xx"><br>
|
||||||
|
|
||||||
|
<label for="tunnel_number">Номер основного тоннеля</label>
|
||||||
|
<input type="text" id="tunnel_number" name="tunnel_number" required placeholder="999"><br>
|
||||||
|
|
||||||
|
<label for="tunnel_network">Подсеть основного тоннеля</label>
|
||||||
|
<input type="text" id="tunnel_network" name="tunnel_number" required placeholder="192.168.30.xx/30"><br><br>
|
||||||
|
|
||||||
|
<label for="isp_ip">IP адрес от провайдера</label>
|
||||||
|
<input type="text" id="isp_ip" name="isp_ip" required placeholder="123.123.123.123/24"><br>
|
||||||
|
|
||||||
|
<label for="isp_gw">Адрес шлюза провайдера</label>
|
||||||
|
<input type="text" id="isp_gw" name="isp_gw" required placeholder="123.123.123.1"><br><br>
|
||||||
|
|
||||||
|
<label for="netadm_pwd">Пароль netadm</label>
|
||||||
|
<input type="password" id="netadm_pwd" name="netadm_pwd" required placeholder="пароль от уз netadm"><br>
|
||||||
|
|
||||||
|
<label for="radius_pwd">Пароль от радиуса</label>
|
||||||
|
<input type="password" id="radius_pwd" name="radius_pwd" required placeholder="пароль от радиуса"><br>
|
||||||
|
|
||||||
|
<label for="snmp_community">SNMP community</label>
|
||||||
|
<input type="password" id="snmp_community" name="snmp_community" required placeholder="SNMP community"><br>
|
||||||
|
<button type="submit">Сгенерировать</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="cisco_tunnel" class="box">
|
||||||
|
тут конфиг для циски
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
<div id="ports" class="box">
|
||||||
|
<label for="sftplus">sftplus</label>
|
||||||
|
<select id="sftplus" name="sftplus">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether1">ether1</label>
|
||||||
|
<select id="ether1" name="ether1">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether2">ether2</label>
|
||||||
|
<select id="ether2" name="ether2">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether3">ether3</label>
|
||||||
|
<select id="ether3" name="ether3">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether4">ether4</label>
|
||||||
|
<select id="ether4" name="ether4">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether5">ether5</label>
|
||||||
|
<select id="ether5" name="ether5">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether6">ether6</label>
|
||||||
|
<select id="ether6" name="ether6">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether7">ether7</label>
|
||||||
|
<select id="ether7" name="ether7">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<label for="ether8">ether8</label>
|
||||||
|
<select id="ether8" name="ether8">
|
||||||
|
<option value="reserve">-- Резерв --</option>
|
||||||
|
<option value="isp">Провайдер</option>
|
||||||
|
<option value="pc">ПК</option>
|
||||||
|
<option value="voip">Телефон</option>
|
||||||
|
<option value="pc_voip">ПК+телефон</option>
|
||||||
|
<option value="printer">Принтер</option>
|
||||||
|
<option value="ap">Точка доступа</option>
|
||||||
|
<option value="scud">СКУД (201)</option>
|
||||||
|
<option value="video">Видеонаблюдение (202)</option>
|
||||||
|
<option value="free">Просто интернет (205)</option>
|
||||||
|
<option value="switch">Свитч</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<div id="settings" class="box">
|
||||||
|
|
||||||
|
</div>
|
Loading…
Reference in New Issue