add server selection and improve modal layout in wireguard peer list

This commit is contained in:
Eduardo Silva
2026-01-14 14:49:49 -03:00
parent 44eb36db14
commit 1ee5b06035
2 changed files with 51 additions and 23 deletions

View File

@@ -189,22 +189,43 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer d-flex flex-column align-items-stretch">
<!-- Row 1: buttons -->
<div class="d-flex w-100 justify-content-end flex-wrap">
<button type="button" class="btn btn-secondary mb-2" data-dismiss="modal">
<i class="fas fa-times"></i> {% trans 'Close' %}
</button>
<a href="#" class="btn btn-info ml-2 mb-2" id="downloadConfigButton">
<i class="fas fa-download"></i> {% trans 'Config' %}
</a>
<a href="#" class="btn btn-info ml-2 mb-2" id="qrcodeButton">
<i class="fas fa-qrcode"></i> {% trans 'QR Code' %}
</a>
<a href="#" class="btn btn-info ml-2 mb-2" id="inviteButton">
<i class="fas fa-share"></i> {% trans 'VPN Invite' %}
</a>
<a href="#" class="btn btn-outline-primary ml-2 mb-2" id="editPeerButton">
<i class="far fa-edit"></i> {% trans 'Edit' %}
</a>
</div>
<!-- Row 2: server select (right aligned) -->
{% if cluster_settings and servers|length > 1 %} {% if cluster_settings and servers|length > 1 %}
<div class="mr-auto form-inline"> <div class="d-flex w-100 mt-2">
<label class="mr-2" for="server_select">{% trans 'Server' %}:</label> <div class="form-inline ml-auto">
<select class="form-control" id="server_select"> <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 %} {% for server in servers %}
<option value="{{ server.address }}">{{ server.name }}</option> <option value="{{ server.address }}">{{ server.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
</div>
{% endif %} {% endif %}
<button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="fas fa-times"></i> {% trans 'Close' %}</button>
<a href="#" class="btn btn-info" id="downloadConfigButton"><i class="fas fa-download"></i> {% trans 'Config' %}</a>
<a href="#" class="btn btn-info" id="qrcodeButton"><i class="fas fa-qrcode"></i> {% trans 'QR Code' %}</a>
<a href="#" class="btn btn-info" id="inviteButton"><i class="fas fa-share"></i> {% trans 'VPN Invite' %}</a>
<a href="#" class="btn btn-outline-primary" id="editPeerButton"><i class="far fa-edit"></i> {% trans 'Edit' %}</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -8,7 +8,7 @@ from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
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 user_manager.models import UserAcl from user_manager.models import UserAcl
from wgwadmlibrary.tools import check_sort_order_conflict, deduplicate_sort_order, default_sort_peers, \ from wgwadmlibrary.tools import check_sort_order_conflict, deduplicate_sort_order, default_sort_peers, \
user_allowed_instances, user_allowed_peers, user_has_access_to_instance, user_has_access_to_peer user_allowed_instances, user_allowed_peers, user_has_access_to_instance, user_has_access_to_peer
@@ -83,17 +83,24 @@ def view_wireguard_peer_list(request):
if settings.WIREGUARD_STATUS_CACHE_ENABLED: if settings.WIREGUARD_STATUS_CACHE_ENABLED:
refresh_interval = settings.WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL refresh_interval = settings.WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL
if ClusterSettings.objects.filter(name='cluster_settings', enabled=True).exists(): cluster_settings = ClusterSettings.objects.filter(name='cluster_settings', enabled=True).first()
cluster_enabled = True servers = []
else: if cluster_settings:
cluster_enabled = False if cluster_settings.primary_enable_wireguard:
servers.append({'name': _('Primary Server'), 'address': ''})
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})
context = { context = {
'page_title': page_title, 'wireguard_instances': wireguard_instances, 'page_title': page_title, 'wireguard_instances': wireguard_instances,
'current_instance': current_instance, 'peer_list': peer_list, 'add_peer_enabled': add_peer_enabled, 'current_instance': current_instance, 'peer_list': peer_list, 'add_peer_enabled': add_peer_enabled,
'user_acl': user_acl, 'refresh_interval': refresh_interval, 'user_acl': user_acl, 'refresh_interval': refresh_interval,
'load_from_cache': load_from_cache, 'cache_previous_count': cache_previous_count, 'load_from_cache': load_from_cache, 'cache_previous_count': cache_previous_count,
'cluster_enabled': cluster_enabled, 'cluster_settings': cluster_settings,
'servers': servers,
} }
return render(request, 'wireguard/wireguard_peer_list.html', context) return render(request, 'wireguard/wireguard_peer_list.html', context)