mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2025-04-19 00:45:16 +00:00
Add sort_order field to Peer model and create a default order
This commit is contained in:
parent
0d374037b1
commit
6e22eafb05
@ -2,6 +2,7 @@ import ipaddress, re
|
|||||||
import subprocess
|
import subprocess
|
||||||
from wireguard.models import Peer, WireGuardInstance
|
from wireguard.models import Peer, WireGuardInstance
|
||||||
from user_manager.models import UserAcl
|
from user_manager.models import UserAcl
|
||||||
|
from django.db.models import Max
|
||||||
|
|
||||||
|
|
||||||
def user_has_access_to_instance(user_acl: UserAcl, instance: WireGuardInstance):
|
def user_has_access_to_instance(user_acl: UserAcl, instance: WireGuardInstance):
|
||||||
@ -35,7 +36,7 @@ def user_allowed_instances(user_acl: UserAcl):
|
|||||||
def user_allowed_peers(user_acl: UserAcl, instance: WireGuardInstance):
|
def user_allowed_peers(user_acl: UserAcl, instance: WireGuardInstance):
|
||||||
|
|
||||||
if not user_acl.peer_groups.exists():
|
if not user_acl.peer_groups.exists():
|
||||||
return Peer.objects.filter(wireguard_instance=instance).order_by('name')
|
return Peer.objects.filter(wireguard_instance=instance).order_by('sort_order')
|
||||||
|
|
||||||
peers_from_direct = Peer.objects.filter(
|
peers_from_direct = Peer.objects.filter(
|
||||||
wireguard_instance=instance,
|
wireguard_instance=instance,
|
||||||
@ -47,7 +48,7 @@ def user_allowed_peers(user_acl: UserAcl, instance: WireGuardInstance):
|
|||||||
wireguard_instance__peergroup__in=user_acl.peer_groups.filter(server_instance=instance)
|
wireguard_instance__peergroup__in=user_acl.peer_groups.filter(server_instance=instance)
|
||||||
)
|
)
|
||||||
|
|
||||||
return peers_from_direct.union(peers_from_instance).order_by('name')
|
return peers_from_direct.union(peers_from_instance).order_by('sort_order')
|
||||||
|
|
||||||
|
|
||||||
def is_valid_ip_or_hostname(value):
|
def is_valid_ip_or_hostname(value):
|
||||||
@ -82,3 +83,17 @@ def list_network_interfaces():
|
|||||||
interfaces.append(interface_name)
|
interfaces.append(interface_name)
|
||||||
|
|
||||||
return interfaces
|
return interfaces
|
||||||
|
|
||||||
|
|
||||||
|
def default_sort_peers(wireguard_instance: WireGuardInstance):
|
||||||
|
unsorted_peers = Peer.objects.filter(wireguard_instance=wireguard_instance, sort_order=0).order_by('created')
|
||||||
|
highest_sort_order = Peer.objects.filter(wireguard_instance=wireguard_instance).aggregate(Max('sort_order'))['sort_order__max']
|
||||||
|
if not highest_sort_order:
|
||||||
|
highest_sort_order = 0
|
||||||
|
if unsorted_peers:
|
||||||
|
new_sort_order = highest_sort_order + 1
|
||||||
|
for peer in unsorted_peers:
|
||||||
|
peer.sort_order = new_sort_order
|
||||||
|
peer.save()
|
||||||
|
new_sort_order += 1
|
||||||
|
return unsorted_peers
|
18
wireguard/migrations/0025_peer_sort_order.py
Normal file
18
wireguard/migrations/0025_peer_sort_order.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.1.5 on 2025-01-22 12:43
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wireguard', '0024_alter_peergroup_uuid'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='peer',
|
||||||
|
name='sort_order',
|
||||||
|
field=models.IntegerField(default=0),
|
||||||
|
),
|
||||||
|
]
|
@ -80,6 +80,7 @@ class Peer(models.Model):
|
|||||||
private_key = models.CharField(max_length=100, blank=True, null=True)
|
private_key = models.CharField(max_length=100, blank=True, null=True)
|
||||||
persistent_keepalive = models.IntegerField(default=25)
|
persistent_keepalive = models.IntegerField(default=25)
|
||||||
wireguard_instance = models.ForeignKey(WireGuardInstance, on_delete=models.CASCADE)
|
wireguard_instance = models.ForeignKey(WireGuardInstance, on_delete=models.CASCADE)
|
||||||
|
sort_order = models.IntegerField(default=0)
|
||||||
|
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
updated = models.DateTimeField(auto_now=True)
|
updated = models.DateTimeField(auto_now=True)
|
||||||
|
@ -6,7 +6,7 @@ from django.contrib import messages
|
|||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
import subprocess
|
import subprocess
|
||||||
import ipaddress
|
import ipaddress
|
||||||
from wgwadmlibrary.tools import user_has_access_to_peer, user_has_access_to_instance, user_allowed_instances, user_allowed_peers
|
from wgwadmlibrary.tools import user_has_access_to_peer, user_has_access_to_instance, user_allowed_instances, user_allowed_peers, default_sort_peers
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from wireguard_peer.forms import PeerAllowedIPForm, PeerForm
|
from wireguard_peer.forms import PeerAllowedIPForm, PeerForm
|
||||||
|
|
||||||
@ -60,6 +60,7 @@ def view_wireguard_peer_list(request):
|
|||||||
current_instance = wireguard_instances.first()
|
current_instance = wireguard_instances.first()
|
||||||
if current_instance not in wireguard_instances:
|
if current_instance not in wireguard_instances:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
default_sort_peers(current_instance)
|
||||||
peer_list = user_allowed_peers(user_acl, current_instance)
|
peer_list = user_allowed_peers(user_acl, current_instance)
|
||||||
else:
|
else:
|
||||||
current_instance = None
|
current_instance = None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user