feat: анти-спам блокировка повторной отправки на главной (cooldown по spam_interval_min)

- index.html/index.js: экран подтверждения отправки с обратным отсчётом
- локальный запрет повторной отправки через localStorage (по настройке spam_interval_min)
- server.js: отдаём spam_interval_min в public-settings (default 30)
- Dockerfile: timeout для apk add, чтобы сборка не зависала на недоступном зеркале
- docker-compose.yml: отключаем cloudflared сервис (закомментирован)
This commit is contained in:
dev
2026-09-13 12:27:35 +03:00
parent 0b763e5738
commit 2c8beedc4b
5 changed files with 93 additions and 23 deletions
+16 -16
View File
@@ -72,22 +72,22 @@ services:
# если в wg/wg0.conf лежит конфиг — контейнер сначала поднимает VPN и
# только потом запускает туннель (исход Cloudflare через VPN). Без конфига
# туннель стартует сразу, как в базовой схеме.
cloudflared:
build:
context: .
dockerfile: Dockerfile.cloudflared
restart: unless-stopped
cap_add:
- NET_ADMIN
privileged: true
volumes:
- ./wg:/etc/wireguard:ro
environment:
TZ: Europe/Moscow
CLOUDFLARE_TUNNEL_URL: ${CLOUDFLARE_TUNNEL_URL:-http://app:3003}
WG_HANDSHAKE_TIMEOUT: ${WG_HANDSHAKE_TIMEOUT:-60}
depends_on:
- app
# cloudflared:
# build:
# context: .
# dockerfile: Dockerfile.cloudflared
# restart: unless-stopped
# cap_add:
# - NET_ADMIN
# privileged: true
# volumes:
# - ./wg:/etc/wireguard:ro
# environment:
# TZ: Europe/Moscow
# CLOUDFLARE_TUNNEL_URL: ${CLOUDFLARE_TUNNEL_URL:-http://app:3003}
# WG_HANDSHAKE_TIMEOUT: ${WG_HANDSHAKE_TIMEOUT:-60}
# depends_on:
# - app