mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-09-20 14:42:00 +00:00
fix: ASCII-safe export filenames and trim landing footer
Content-Disposition rejects non-ASCII in Node; sanitize export names. Public landing keeps admin link only; donate links stay in admin UI. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -114,7 +114,7 @@ chmod +x scripts/warp-amnezia.sh
|
||||
|
||||
Необязательно передайте в контейнер **amnezia-admin** переменные `WARP_DIR`, `WARP_CONF_PATH`, `WARP_CLIENTS_LIST`, `AMNEZIA_START_SCRIPT` через установщик — см. таблицу выше.
|
||||
|
||||
После установки: **админ-панель** `http://IP:8080` (или ваш `HOST_PORT`). **Лендинг** с поддержкой по умолчанию на порту **80**; если порт занят, установщик сообщит об ошибке — задайте **`LANDING_PORT=8081`** или **`SKIP_LANDING=1`** (на работу панели это не влияет). Кнопка на лендинге ведёт на админку с тем же `HOST_PORT`.
|
||||
После установки: **админ-панель** `http://IP:8080` (или ваш `HOST_PORT`). **Лендинг** с инструкцией по умолчанию на порту **80** (без блока доната — только текст администратору и дисклеймер); если порт занят, установщик сообщит об ошибке — задайте **`LANDING_PORT=8081`** или **`SKIP_LANDING=1`** (на работу панели это не влияет). Кнопка на лендинге ведёт на админку с тем же `HOST_PORT`.
|
||||
|
||||
Футер с ссылками (**Amnezia Admin WebUI**, Boosty, Ozon СБП, Telegram) в админке находится **внизу страницы** — прокрутите ниже таблицы.
|
||||
|
||||
@@ -237,7 +237,7 @@ ADMIN_PASSWORD=localtest node server.js
|
||||
|
||||
## Support links
|
||||
|
||||
Как на главной странице установки (**лендинг на порту 80**): **Amnezia Admin WebUI** · GitHub · Boosty · Ozon СБП · Telegram · текст поддержки.
|
||||
Эти ссылки дублируют блок в **футере админ-панели** (`:8080`). На публичном лендинге **`:80`** этого блока нет — там только напоминание написать администратору сервера.
|
||||
|
||||
Поддержать проект — поставь звезду на GitHub **И донат**. Связаться с автором — Telegram.
|
||||
|
||||
@@ -248,11 +248,11 @@ ADMIN_PASSWORD=localtest node server.js
|
||||
| Ozon СБП | [Ozon СБП](https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798) |
|
||||
| Telegram | [@lot_andrey](https://t.me/lot_andrey) |
|
||||
|
||||
Ссылки совпадают с блоком в репозитории [domen_hydra](https://github.com/andrey271192/domen_hydra) (Boosty / Ozon), отображаются на **публичной странице** после установки и в футере админ-панели.
|
||||
Ссылки совпадают с блоком в репозитории [domen_hydra](https://github.com/andrey271192/domen_hydra) (Boosty / Ozon); в интерфейсе они видны **только в админке**, не на лендинге `:80`.
|
||||
|
||||
Файл [`.github/FUNDING.yml`](.github/FUNDING.yml) задаёт кнопку **Sponsor** на GitHub.
|
||||
|
||||
Тот же блок поддержки продублирован в **футере веб-интерфейса** и на **`http://сервер:80/`** (если лендинг не отключён).
|
||||
Блок с донатом и ссылками на автора — **только в футере админ-панели**; лендинг на **`http://сервер:80/`** его не показывает.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -258,18 +258,6 @@
|
||||
|
||||
<footer class="site-footer">
|
||||
<p class="site-footer-lead">Возникли проблемы с подключением — напишите администратору сервера.</p>
|
||||
<div class="support-line">
|
||||
<strong class="support-title">Amnezia Admin WebUI</strong>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://github.com/andrey271192/Amnezia_web" target="_blank" rel="noopener noreferrer">GitHub</a>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://boosty.to/andrey27/donate" target="_blank" rel="noopener noreferrer">Boosty</a>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">Ozon СБП</a>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram @lot_andrey</a>
|
||||
</div>
|
||||
<p class="support-blurb">Поддержать проект — звезда на GitHub и донат. Связаться с автором — Telegram.</p>
|
||||
<p class="disclaimer-footer">Страница только для приглашённых пользователей. Не передавайте конфиг третьим лицам.</p>
|
||||
</footer>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "amnezia-admin",
|
||||
"version": "1.1.0",
|
||||
"version": "1.1.1",
|
||||
"private": true,
|
||||
"description": "Web-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
||||
"license": "MIT",
|
||||
|
||||
12
server.js
12
server.js
@@ -798,9 +798,17 @@ function parseInterfaceKeyValues(head) {
|
||||
return out;
|
||||
}
|
||||
|
||||
/** Имя файла только из ASCII — иначе Node отклоняет заголовок Content-Disposition. */
|
||||
function safeExportFilenamePart(name, fallback) {
|
||||
const s = String(name || fallback || "client").replace(/[^\w\u0400-\u04FF\-]+/g, "_");
|
||||
return s.slice(0, 80) || "client";
|
||||
const toAsciiToken = (s) =>
|
||||
String(s ?? "")
|
||||
.normalize("NFKD")
|
||||
.replace(/[^\x20-\x7E]/g, "")
|
||||
.replace(/[^a-zA-Z0-9._-]/g, "_")
|
||||
.replace(/_+/g, "_")
|
||||
.replace(/^_|_$/g, "")
|
||||
.slice(0, 80);
|
||||
return toAsciiToken(name) || toAsciiToken(fallback) || "client";
|
||||
}
|
||||
|
||||
function formatExportAllowedIps(lc, fallback = "0.0.0.0/0, ::/0") {
|
||||
|
||||
Reference in New Issue
Block a user