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

View File

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

View File

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

View File

@@ -87,12 +87,10 @@ def view_wireguard_peer_list(request):
servers = [] servers = []
if cluster_settings: if cluster_settings:
if cluster_settings.primary_enable_wireguard: 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): for worker in Worker.objects.filter(enabled=True):
port = current_instance.listen_port if current_instance else 51820 servers.append({'name': worker.display_name, 'uuid': str(worker.uuid)})
worker_address = f"{worker.server_address}:{port}"
servers.append({'name': worker.display_name, 'address': worker_address})
context = { context = {
'page_title': page_title, 'wireguard_instances': wireguard_instances, '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 import timezone
from django.utils.translation import gettext_lazy as _ 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.models import RedirectRule
from firewall.tools import export_user_firewall, generate_firewall_footer, generate_firewall_header, \ from firewall.tools import export_user_firewall, generate_firewall_footer, generate_firewall_header, \
generate_port_forward_firewall, generate_redirect_dns_rules generate_port_forward_firewall, generate_redirect_dns_rules
@@ -199,7 +199,15 @@ def download_config_or_qrcode(request):
raise Http404 raise Http404
format_type = request.GET.get('format', 'conf') 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) config_content = generate_peer_config(peer.uuid, server_address=server_address)