Web-панель была подготовлена к продакшену
- исправлен NameError при создании VM: не был импортирован platform; - на странице VM автозапуск всегда показывался выключенным; - сообщения в redirect-URL теперь кодируются (кириллица, пробелы, &); - проверка пароля вынесена в web/auth.py и работает на Python 3.13+, где модули crypt и spwd удалены (fallback на libcrypt и /etc/shadow); - добавлены ограничение попыток входа, срок жизни сессии, флаг Secure для cookie, защита от cross-origin POST и заголовки безопасности; - добавлен публичный /healthz с версией панели; - правила проброса портов восстанавливаются после перезагрузки (virtuality-network.service); - обновление из панели запускается через systemd-run и больше не убивается перезапуском virtuality-web; - install_web_panel.sh сохраняет порт, пользователя и режим автообновления в /var/lib/virtuality/config/web.env, поэтому обновление больше не сбрасывает порт на 8088 и пользователя на viktor; - поддержка офлайн-установки Python-зависимостей из wheels/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
Этот коммит содержится в:
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Re-apply Virtuality NAT port forwards after boot.
|
||||
|
||||
nftables/iptables rules created by the panel live only in the kernel, so they
|
||||
are lost on reboot. virtuality-network.service runs this once at startup.
|
||||
"""
|
||||
import sys
|
||||
|
||||
import network_core
|
||||
|
||||
|
||||
def main() -> int:
|
||||
if not network_core.PORT_FORWARDS_FILE.exists():
|
||||
print("No port forwards configured, nothing to restore")
|
||||
return 0
|
||||
try:
|
||||
result = network_core.apply_port_forwards()
|
||||
except network_core.NetworkError as exc:
|
||||
print(f"Failed to restore port forwards: {exc}", file=sys.stderr)
|
||||
return 1
|
||||
count = len(network_core.load_port_forwards())
|
||||
print(f"Restored {count} port forward(s), nft ok={result['nft_apply']['ok']}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Ссылка в новой задаче
Block a user