Update peer management view and forms.

This commit is contained in:
Eduardo Silva
2026-01-26 13:57:31 -03:00
parent 666ea0402d
commit 5b21f24b7c
4 changed files with 152 additions and 126 deletions

View File

@@ -14,7 +14,7 @@ from user_manager.models import UserAcl
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
from wireguard.models import Peer, PeerAllowedIP, WireGuardInstance
from wireguard_peer.forms import PeerAllowedIPForm, PeerForm
from wireguard_peer.forms import PeerAllowedIPForm, PeerNameForm, PeerKeepaliveForm, PeerKeysForm
def generate_peer_default(wireguard_instance):
@@ -184,12 +184,8 @@ def view_wireguard_peer_create(request):
@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'})
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'))
@@ -197,6 +193,8 @@ def view_wireguard_peer_manage(request):
raise Http404
current_instance = current_peer.wireguard_instance
if request.GET.get('action') == 'delete':
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=30).exists():
return render(request, 'access_denied.html', {'page_title': 'Access Denied'})
if request.GET.get('confirmation') == 'delete':
current_peer.wireguard_instance.pending_changes = True
current_peer.wireguard_instance.save()
@@ -206,28 +204,62 @@ def view_wireguard_peer_manage(request):
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)
page_title = _('Peer Configuration: ') + 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,
'page_title': page_title, 'current_instance': current_instance, 'current_peer': current_peer,
'peer_ip_list': peer_ip_list, 'peer_client_ip_list': peer_client_ip_list
}
return render(request, 'wireguard/wireguard_manage_peer.html', context)
@login_required
def view_wireguard_peer_edit_field(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)
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
group = request.GET.get('group')
form_classes = {
'name': PeerNameForm,
'keepalive': PeerKeepaliveForm,
'keys': PeerKeysForm
}
if group not in form_classes:
raise Http404
FormClass = form_classes[group]
form = FormClass(request.POST or None, instance=current_peer)
if form.is_valid():
form.save()
current_peer.wireguard_instance.pending_changes = True
current_peer.wireguard_instance.save()
messages.success(request, _('Peer updated|Peer updated successfully.'))
return redirect('/peer/manage/?peer=' + str(current_peer.uuid))
page_title = _('Edit Peer')
if group == 'name':
page_title = _('Edit Peer Name')
elif group == 'keepalive':
page_title = _('Edit Keepalive')
elif group == 'keys':
page_title = _('Edit Keys')
context = {
'page_title': page_title,
'form': form,
}
return render(request, 'generic_form.html', context)
def view_manage_ip_address(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'})