Переделана форма создания проброса портов без шаблонов

Этот коммит содержится в:
Виктор
2026-05-07 00:36:59 +09:00
родитель 36571af240
Коммит 7c89632a85
+52 -52
Просмотреть файл
@@ -72,42 +72,6 @@
</article>
</section>
<section class="card">
<div class="card-head">
<h2>Быстрые шаблоны публичного доступа</h2>
<span class="pill">one click presets</span>
</div>
<div class="grid two">
{% for key, tpl in templates.items() %}
<article class="big-action static">
<strong>{{ tpl.title }}</strong>
<span>{{ tpl.description }}</span>
<form method="post" action="/network/template/apply" class="form-grid top-space">
<label>
<span>Виртуальная машина</span>
<select name="vm_name" required>
{% for vm in vms %}
<option value="{{ vm.name }}">{{ vm.name }} — {{ vm.state }}</option>
{% endfor %}
</select>
</label>
<input type="hidden" name="template_key" value="{{ key }}">
{% if key == 'ssh' %}
<label>
<span>Внешний SSH-порт</span>
<input type="number" name="external_base_port" min="1" max="65535" value="2222">
</label>
{% else %}
<input type="hidden" name="external_base_port" value="0">
{% endif %}
<button class="primary wide">Применить шаблон</button>
</form>
</article>
{% endfor %}
</div>
<div class="notice top-space">Шаблоны не затирают существующие правила: если внешний порт уже занят, правило будет пропущено.</div>
</section>
<section class="grid two">
<article class="card">
<div class="card-head">
@@ -116,26 +80,62 @@
</div>
<form method="post" action="/network/forward/add" class="form-grid">
<label>
<span>Виртуальная машина</span>
<span>Описание</span>
<input type="text" name="note" placeholder="Например: сайт, SSH, SIP, панель управления">
</label>
<label>
<span>Внешний порт</span>
<input type="number" name="external_port" min="1" max="65535" placeholder="Например: 80, 443, 2222" required>
</label>
<label>
<span>Машина</span>
<select name="vm_name" required>
{% for vm in vms %}
<option value="{{ vm.name }}">{{ vm.name }} — {{ vm.state }}</option>
{% endfor %}
</select>
</label>
<input type="hidden" name="guest_ip" value="auto">
<div class="notice">Внутренний IP VM будет подставлен автоматически. VM должна быть запущена и получить адрес в NAT-сети.</div>
<div class="form-row">
<label>
<span>Внешний порт сервера</span>
<input type="number" name="external_port" min="1" max="65535" placeholder="80" required>
<span>Внутренний порт</span>
<input type="number" name="guest_port" list="standard-ports" min="1" max="65535" placeholder="Выбери стандартный или введи вручную" required>
<datalist id="standard-ports">
<option value="20" label="FTP data"></option>
<option value="21" label="FTP"></option>
<option value="22" label="SSH"></option>
<option value="25" label="SMTP"></option>
<option value="53" label="DNS"></option>
<option value="80" label="HTTP / web"></option>
<option value="110" label="POP3"></option>
<option value="123" label="NTP"></option>
<option value="143" label="IMAP"></option>
<option value="443" label="HTTPS / SSL web"></option>
<option value="465" label="SMTPS"></option>
<option value="587" label="SMTP submission"></option>
<option value="993" label="IMAPS"></option>
<option value="995" label="POP3S"></option>
<option value="1194" label="OpenVPN"></option>
<option value="1433" label="Microsoft SQL Server"></option>
<option value="1521" label="Oracle Database"></option>
<option value="2049" label="NFS"></option>
<option value="3306" label="MySQL / MariaDB"></option>
<option value="3389" label="RDP / Windows Remote Desktop"></option>
<option value="5060" label="SIP"></option>
<option value="5061" label="SIP TLS"></option>
<option value="5432" label="PostgreSQL"></option>
<option value="5900" label="VNC"></option>
<option value="6379" label="Redis"></option>
<option value="8000" label="HTTP dev"></option>
<option value="8080" label="HTTP alternative"></option>
<option value="8443" label="HTTPS alternative"></option>
<option value="10000" label="Webmin / RTP start"></option>
</datalist>
</label>
<label>
<span>Порт внутри VM</span>
<input type="number" name="guest_port" min="1" max="65535" placeholder="80" required>
</label>
</div>
<div class="form-row">
<label>
<span>Протокол</span>
<select name="protocol">
@@ -143,11 +143,11 @@
<option value="udp">udp</option>
</select>
</label>
<label>
<span>Заметка</span>
<input type="text" name="note" placeholder="web / ssh / sip">
</label>
<div class="notice">
Внутренний IP VM подставится автоматически. Внутренний порт можно выбрать из списка или вписать любой вручную.
</div>
<button class="primary wide">Добавить и применить</button>
</form>
</article>
@@ -232,7 +232,7 @@
</div>
<table>
<thead>
<tr><th>Внешний порт</th><th>VM</th><th>Внутренний адрес</th><th>Протокол</th><th>Заметка</th><th></th></tr>
<tr><th>Внешний порт</th><th>VM</th><th>Внутренний адрес</th><th>Протокол</th><th>Описание</th><th></th></tr>
</thead>
<tbody>
{% for item in ctx.forwards %}