update server selection to use UUID instead of address in VPN invite and peer list

This commit is contained in:
Eduardo Silva
2026-01-14 15:31:48 -03:00
parent 1ee5b06035
commit a42c7be908
5 changed files with 26 additions and 22 deletions

View File

@@ -134,7 +134,7 @@
<label for="server_select">Server:</label>
<select id="server_select" style="padding: 5px; border-radius: 4px; border: 1px solid #ccc;">
{% for server in servers %}
<option value="{{ server.address }}">{{ server.name }}</option>
<option value="{{ server.uuid }}">{{ server.name }}</option>
{% endfor %}
</select>
</div>
@@ -176,7 +176,7 @@
var server = document.getElementById("server_select") ? document.getElementById("server_select").value : "";
var url = "/invite/download_config/?token={{ peer_invite.uuid }}&password={{ password }}&format=qrcode";
if (server) {
url += "&server=" + encodeURIComponent(server);
url += "&worker=" + encodeURIComponent(server);
}
img.src = url;
img.alt = "QR Code";
@@ -198,7 +198,7 @@
var server = document.getElementById("server_select") ? document.getElementById("server_select").value : "";
var url = "/invite/download_config/?token={{ peer_invite.uuid }}&password={{ password }}";
if (server) {
url += "&server=" + encodeURIComponent(server);
url += "&worker=" + encodeURIComponent(server);
}
this.href = url;
});

View File

@@ -220,7 +220,7 @@
<label class="mr-2 mb-0" for="server_select">{% trans 'Server' %}:</label>
<select class="form-control" id="server_select" style="width: 300px;">
{% for server in servers %}
<option value="{{ server.address }}">{{ server.name }}</option>
<option value="{{ server.uuid }}">{{ server.name }}</option>
{% endfor %}
</select>
</div>
@@ -321,7 +321,7 @@
var server = $('#server_select').val(); // Get selected server
var url = "/tools/download_peer_config/?uuid=" + uuid + "&format=qrcode";
if (server) {
url += "&server=" + encodeURIComponent(server);
url += "&worker=" + encodeURIComponent(server);
}
$("#qrCodeImg").attr("src", url);
@@ -337,14 +337,14 @@
// Update download config button
var downloadUrl = '/tools/download_peer_config/?uuid=' + uuid;
if (server) {
downloadUrl += '&server=' + encodeURIComponent(server);
downloadUrl += '&worker=' + encodeURIComponent(server);
}
$('#downloadConfigButton').attr('href', downloadUrl);
// Update QR code button (href is used for storing base url, actual action is click)
var qrUrl = '/tools/download_peer_config/?uuid=' + uuid + '&format=qrcode';
if (server) {
qrUrl += '&server=' + encodeURIComponent(server);
qrUrl += '&worker=' + encodeURIComponent(server);
}
$('#qrcodeButton').attr('href', qrUrl);
});
@@ -400,8 +400,8 @@
var qrUrl = '/tools/download_peer_config/?uuid=' + uuid + '&format=qrcode';
if (server) {
downloadUrl += '&server=' + encodeURIComponent(server);
qrUrl += '&server=' + encodeURIComponent(server);
downloadUrl += '&worker=' + encodeURIComponent(server);
qrUrl += '&worker=' + encodeURIComponent(server);
}
$('#downloadConfigButton').attr('href', downloadUrl);

View File

@@ -18,12 +18,10 @@ def view_public_vpn_invite(request):
servers = []
if cluster_settings:
if cluster_settings.primary_enable_wireguard:
servers.append({'name': 'Primary Server', 'address': ''})
servers.append({'name': 'Primary Server', 'uuid': ''})
for worker in Worker.objects.filter(enabled=True):
listen_port = peer_invite.peer.wireguard_instance.listen_port
worker_address = f"{worker.server_address}:{listen_port}"
servers.append({'name': worker.display_name, 'address': worker_address})
servers.append({'name': worker.display_name, 'uuid': str(worker.uuid)})
context = {
'peer_invite': peer_invite,

View File

@@ -87,12 +87,10 @@ def view_wireguard_peer_list(request):
servers = []
if cluster_settings:
if cluster_settings.primary_enable_wireguard:
servers.append({'name': _('Primary Server'), 'address': ''})
servers.append({'name': _('Primary Server'), 'uuid': ''})
for worker in Worker.objects.filter(enabled=True):
port = current_instance.listen_port if current_instance else 51820
worker_address = f"{worker.server_address}:{port}"
servers.append({'name': worker.display_name, 'address': worker_address})
servers.append({'name': worker.display_name, 'uuid': str(worker.uuid)})
context = {
'page_title': page_title, 'wireguard_instances': wireguard_instances,

View File

@@ -11,7 +11,7 @@ from django.shortcuts import Http404, get_object_or_404, redirect, render
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from cluster.models import ClusterSettings
from cluster.models import ClusterSettings, Worker
from firewall.models import RedirectRule
from firewall.tools import export_user_firewall, generate_firewall_footer, generate_firewall_header, \
generate_port_forward_firewall, generate_redirect_dns_rules
@@ -199,7 +199,15 @@ def download_config_or_qrcode(request):
raise Http404
format_type = request.GET.get('format', 'conf')
server_address = request.GET.get('server')
worker_uuid = request.GET.get('worker')
server_address = None
if worker_uuid:
try:
worker = Worker.objects.get(uuid=worker_uuid)
server_address = f"{worker.server_address}:{peer.wireguard_instance.listen_port}"
except (Worker.DoesNotExist, ValueError):
pass
config_content = generate_peer_config(peer.uuid, server_address=server_address)