- исправлен 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
28 строки
815 B
Python
28 строки
815 B
Python
#!/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())
|