From 797058b29b97d48ed78633d9d7734870361b4bd9 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Mon, 20 Jan 2025 09:55:35 -0300 Subject: [PATCH] Add peer group model --- .../migrations/0004_useracl_peer_groups.py | 19 +++++++++++++++ user_manager/models.py | 2 ++ wireguard/migrations/0023_peergroup.py | 24 +++++++++++++++++++ wireguard/models.py | 20 +++++++++++++++- 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 user_manager/migrations/0004_useracl_peer_groups.py create mode 100644 wireguard/migrations/0023_peergroup.py diff --git a/user_manager/migrations/0004_useracl_peer_groups.py b/user_manager/migrations/0004_useracl_peer_groups.py new file mode 100644 index 0000000..2455c0d --- /dev/null +++ b/user_manager/migrations/0004_useracl_peer_groups.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.5 on 2025-01-20 12:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('user_manager', '0003_authenticationtoken'), + ('wireguard', '0023_peergroup'), + ] + + operations = [ + migrations.AddField( + model_name='useracl', + name='peer_groups', + field=models.ManyToManyField(blank=True, to='wireguard.peergroup'), + ), + ] diff --git a/user_manager/models.py b/user_manager/models.py index 9fec415..923edcb 100644 --- a/user_manager/models.py +++ b/user_manager/models.py @@ -1,6 +1,7 @@ from django.db import models from django.contrib.auth.models import User import uuid +from wireguard.models import PeerGroup class UserAcl(models.Model): @@ -12,6 +13,7 @@ class UserAcl(models.Model): (40, 'Wireguard Manager'), (50, 'Administrator'), )) + peer_groups = models.ManyToManyField(PeerGroup, blank=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) diff --git a/wireguard/migrations/0023_peergroup.py b/wireguard/migrations/0023_peergroup.py new file mode 100644 index 0000000..fc79239 --- /dev/null +++ b/wireguard/migrations/0023_peergroup.py @@ -0,0 +1,24 @@ +# Generated by Django 5.1.5 on 2025-01-20 12:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wireguard', '0022_alter_wireguardinstance_dns_primary'), + ] + + operations = [ + migrations.CreateModel( + name='PeerGroup', + fields=[ + ('name', models.CharField(max_length=100, unique=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('uuid', models.UUIDField(editable=False, primary_key=True, serialize=False)), + ('peer', models.ManyToManyField(blank=True, to='wireguard.peer')), + ('server_instance', models.ManyToManyField(blank=True, to='wireguard.wireguardinstance')), + ], + ), + ] diff --git a/wireguard/models.py b/wireguard/models.py index c371384..409d556 100644 --- a/wireguard/models.py +++ b/wireguard/models.py @@ -1,3 +1,4 @@ +from django.core.exceptions import ValidationError from django.db import models import uuid @@ -119,4 +120,21 @@ class PeerAllowedIP(models.Model): def __str__(self): return str(self.allowed_ip) + '/' + str(self.netmask) - \ No newline at end of file + + +class PeerGroup(models.Model): + name = models.CharField(max_length=100, unique=True) + peer = models.ManyToManyField(Peer, blank=True) + server_instance = models.ManyToManyField(WireGuardInstance, blank=True) + + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + uuid = models.UUIDField(primary_key=True, editable=False) + + def clean(self): + if self.peer.exists() and self.server_instance.exists(): + raise ValidationError("Please choose either WireGuard Instances or Peers, not both.") + + def save(self, *args, **kwargs): + self.clean() + super().save(*args, **kwargs)