vpn integration

This commit is contained in:
2026-04-11 21:51:30 +02:00
parent 4671e5da63
commit c4d27e9842
26 changed files with 2566 additions and 899 deletions
+48
View File
@@ -1,3 +1,5 @@
import os
from django.conf import settings
import traceback
@@ -21,6 +23,24 @@ class Transmission:
def __init__(self):
self.client = Client(**settings.TRANSMISSION)
self.update_vpn_port()
def update_vpn_port(self):
"""Lit le port forwarded par Gluetun et met à jour Transmission si nécessaire"""
port_file = "/tmp/gluetun/forwarded_port"
if os.path.exists(port_file):
try:
with open(port_file) as f:
vpn_port = int(f.read().strip())
# Récupère le port actuel configuré dans Transmission
current_settings = self.client.get_session()
if current_settings.peer_port != vpn_port:
self.client.set_session(peer_port=vpn_port)
# Optionnel: loguer le changement
print(f"Transmission peer-port updated to {vpn_port}")
except Exception as e:
print(f"Error updating Transmission port: {e}")
def add_torrent(self, file, file_mode="file_object"):
match file_mode:
@@ -53,6 +73,34 @@ class Transmission:
def delete(self, hash_string):
return self.client.remove_torrent(hash_string, delete_data=True)
def get_diagnostics(self):
"""
Retourne des informations détaillées sur l'état de Transmission et du VPN.
Utile pour le debug via le shell Django.
"""
session = self.client.get_session()
# 1. Vérification du port VPN (Lecture du fichier Gluetun)
port_file = "/tmp/gluetun/forwarded_port"
vpn_port = None
if os.path.exists(port_file):
with open(port_file, "r") as f:
vpn_port = f.read().strip()
# 2. Test de connectivité du port (via l'API Transmission)
# Ceci demande à Transmission de vérifier si son port est ouvert sur internet
port_is_open = self.client.port_test()
return {
"transmission_version": session.version,
"config_peer_port": session.peer_port,
"gluetun_forwarded_port": vpn_port,
"port_test_success": port_is_open,
"download_dir": session.download_dir,
"rpc_version": session.rpc_version,
"peer_port_random_on_start": session.peer_port_random_on_start,
}
transmission_handler = Transmission()