From 666ea0402de68eb59770bc5f25e796c9b2fe415c Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Mon, 26 Jan 2026 12:00:17 -0300 Subject: [PATCH] split create/manage peer in different views --- templates/wireguard/wireguard_peer_list.html | 3 +- wireguard_peer/views.py | 88 ++++++++++---------- wireguard_webadmin/urls.py | 3 +- 3 files changed, 49 insertions(+), 45 deletions(-) diff --git a/templates/wireguard/wireguard_peer_list.html b/templates/wireguard/wireguard_peer_list.html index 37bae21..54231d0 100644 --- a/templates/wireguard/wireguard_peer_list.html +++ b/templates/wireguard/wireguard_peer_list.html @@ -28,7 +28,8 @@ {% include 'wireguard/peer_list/peer_data.html' %} {% if add_peer_enabled %} - {% trans 'Create Peer' %} diff --git a/wireguard_peer/views.py b/wireguard_peer/views.py index a849607..fdc88ed 100644 --- a/wireguard_peer/views.py +++ b/wireguard_peer/views.py @@ -143,22 +143,16 @@ def view_wireguard_peer_sort(request): return redirect(redirect_url) -@login_required -def view_wireguard_peer_manage(request): - if request.method == 'POST': - if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=30).exists(): - return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) - else: - if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=20).exists(): - return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) +def view_wireguard_peer_create(request): + if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=30).exists(): + return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) user_acl = get_object_or_404(UserAcl, user=request.user) if request.GET.get('instance'): current_instance = get_object_or_404(WireGuardInstance, uuid=request.GET.get('instance')) if not user_has_access_to_instance(user_acl, current_instance): raise Http404 - current_peer = None - page_title = _('Create a new Peer for instance wg') + str(current_instance.instance_id) + new_peer_data = generate_peer_default(current_instance) if new_peer_data['allowed_ip']: @@ -184,41 +178,49 @@ def view_wireguard_peer_manage(request): else: messages.warning(request, _('Error creating peer|No available IP address found for peer creation.')) return redirect('/peer/list/') - - elif request.GET.get('peer'): - current_peer = get_object_or_404(Peer, uuid=request.GET.get('peer')) - if not user_has_access_to_peer(user_acl, current_peer): - raise Http404 - current_instance = current_peer.wireguard_instance - if request.GET.get('action') == 'delete': - if request.GET.get('confirmation') == 'delete': - current_peer.wireguard_instance.pending_changes = True - current_peer.wireguard_instance.save() - current_peer.delete() - messages.success(request, _('Peer deleted|Peer deleted successfully.')) - return redirect('/peer/list/?uuid=' + str(current_instance.uuid)) - else: - messages.warning(request, _('Error deleting peer|Invalid confirmation message. Type "delete" to confirm.')) - return redirect('/peer/manage/?peer=' + str(current_peer.uuid)) - page_title = _('Update Peer: ') - peer_ip_list = current_peer.peerallowedip_set.filter(config_file='server').order_by('priority') - peer_client_ip_list = current_peer.peerallowedip_set.filter(config_file='client').order_by('priority') - if current_peer.name: - page_title += current_peer.name - else: - page_title += current_peer.public_key[:16] + ("..." if len(current_peer.public_key) > 16 else "") - if request.method == 'POST': - form = PeerForm(request.POST, instance=current_peer) - if form.is_valid(): - form.save() - messages.success(request, _('Peer updated|Peer updated successfully.')) - current_peer.wireguard_instance.pending_changes = True - current_peer.wireguard_instance.save() - return redirect('/peer/list/?uuid=' + str(current_peer.wireguard_instance.uuid)) - else: - form = PeerForm(instance=current_peer) else: return redirect('/peer/list/') + + +@login_required +def view_wireguard_peer_manage(request): + if request.method == 'POST': + if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=30).exists(): + return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) + else: + if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=20).exists(): + return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) + user_acl = get_object_or_404(UserAcl, user=request.user) + + current_peer = get_object_or_404(Peer, uuid=request.GET.get('peer')) + if not user_has_access_to_peer(user_acl, current_peer): + raise Http404 + current_instance = current_peer.wireguard_instance + if request.GET.get('action') == 'delete': + if request.GET.get('confirmation') == 'delete': + current_peer.wireguard_instance.pending_changes = True + current_peer.wireguard_instance.save() + current_peer.delete() + messages.success(request, _('Peer deleted|Peer deleted successfully.')) + return redirect('/peer/list/?uuid=' + str(current_instance.uuid)) + else: + messages.warning(request, _('Error deleting peer|Invalid confirmation message. Type "delete" to confirm.')) + return redirect('/peer/manage/?peer=' + str(current_peer.uuid)) + page_title = _('Update Peer: ') + str(current_peer) + peer_ip_list = current_peer.peerallowedip_set.filter(config_file='server').order_by('priority') + peer_client_ip_list = current_peer.peerallowedip_set.filter(config_file='client').order_by('priority') + + if request.method == 'POST': + form = PeerForm(request.POST, instance=current_peer) + if form.is_valid(): + form.save() + messages.success(request, _('Peer updated|Peer updated successfully.')) + current_peer.wireguard_instance.pending_changes = True + current_peer.wireguard_instance.save() + return redirect('/peer/list/?uuid=' + str(current_peer.wireguard_instance.uuid)) + else: + form = PeerForm(instance=current_peer) + context = { 'page_title': page_title, 'current_instance': current_instance, 'current_peer': current_peer, 'form': form, 'peer_ip_list': peer_ip_list, 'peer_client_ip_list': peer_client_ip_list diff --git a/wireguard_webadmin/urls.py b/wireguard_webadmin/urls.py index dfb9291..d627973 100644 --- a/wireguard_webadmin/urls.py +++ b/wireguard_webadmin/urls.py @@ -39,7 +39,7 @@ from wgrrd.views import view_rrd_graph from wireguard.views import view_apply_db_patches, view_wireguard_manage_instance, view_wireguard_status, \ view_server_list, view_server_detail from wireguard_peer.views import view_manage_ip_address, view_wireguard_peer_list, view_wireguard_peer_manage, \ - view_wireguard_peer_sort, view_apply_route_template + view_wireguard_peer_sort, view_apply_route_template, view_wireguard_peer_create from wireguard_tools.views import download_config_or_qrcode, export_wireguard_configs, restart_wireguard_interfaces urlpatterns = [ @@ -56,6 +56,7 @@ urlpatterns = [ path('peer/list/', view_wireguard_peer_list, name='wireguard_peer_list'), path('peer/sort/', view_wireguard_peer_sort, name='wireguard_peer_sort'), path('peer/manage/', view_wireguard_peer_manage, name='wireguard_peer_manage'), + path('peer/create/', view_wireguard_peer_create, name='wireguard_peer_create'), path('peer/apply_route_template/', view_apply_route_template, name='apply_route_template'), path('peer/manage_ip_address/', view_manage_ip_address, name='manage_ip_address'), path('rrd/graph/', view_rrd_graph, name='rrd_graph'),