-
{% if peer.name %}{{ peer.name}}{% else %}{{ peer.public_key }}{% endif %}
+
+ {% if peer.name %}
+ {{ peer.name}}
+ {% else %}
+ {{ peer.public_key|slice:":16" }}{% if peer.public_key|length > 16 %}...{% endif %}
+ {% endif %}
+
{% comment %}This needs to be improved{% endcomment %}
diff --git a/wireguard/forms.py b/wireguard/forms.py
index 0132dfc..e64368c 100644
--- a/wireguard/forms.py
+++ b/wireguard/forms.py
@@ -7,18 +7,19 @@ class WireGuardInstanceForm(forms.ModelForm):
name = forms.CharField(label='Display Name', required=False)
instance_id = forms.IntegerField(label='Instance ID')
private_key = forms.CharField(label='Private Key')
+ public_key = forms.CharField(label='Public Key')
hostname = forms.CharField(label='Public Address')
listen_port = forms.IntegerField(label='Listen Port')
address = forms.GenericIPAddressField(label='VPN IP Address')
netmask = forms.ChoiceField(choices=NETMASK_CHOICES, label='Netmask')
post_up = forms.CharField(label='Post Up', required=False)
post_down = forms.CharField(label='Post Down', required=False)
- persistent_keepalive = forms.IntegerField(label='Persistent Keepalive')
+ persistent_keepalive = forms.IntegerField(label='Keepalive')
class Meta:
model = WireGuardInstance
fields = [
- 'name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive'
+ 'name', 'instance_id', 'private_key', 'public_key','hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive'
]
def clean(self):
diff --git a/wireguard/migrations/0004_wireguardinstance_public_key.py b/wireguard/migrations/0004_wireguardinstance_public_key.py
new file mode 100644
index 0000000..4b193a0
--- /dev/null
+++ b/wireguard/migrations/0004_wireguardinstance_public_key.py
@@ -0,0 +1,19 @@
+# Generated by Django 5.0.1 on 2024-02-15 14:29
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wireguard', '0003_peerallowedip_missing_from_wireguard'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='wireguardinstance',
+ name='public_key',
+ field=models.CharField(default=' ', max_length=100),
+ preserve_default=False,
+ ),
+ ]
diff --git a/wireguard/models.py b/wireguard/models.py
index 7df7ae8..fabcf14 100644
--- a/wireguard/models.py
+++ b/wireguard/models.py
@@ -33,6 +33,7 @@ class WireGuardInstance(models.Model):
name = models.CharField(max_length=100, blank=True, null=True)
instance_id = models.PositiveIntegerField(unique=True, default=0)
private_key = models.CharField(max_length=100)
+ public_key = models.CharField(max_length=100)
hostname = models.CharField(max_length=100)
listen_port = models.IntegerField(default=51820, unique=True)
address = models.GenericIPAddressField(unique=True, protocol='IPv4')
diff --git a/wireguard/views.py b/wireguard/views.py
index 8fd9a7a..8bdaed3 100644
--- a/wireguard/views.py
+++ b/wireguard/views.py
@@ -17,6 +17,7 @@ def generate_instance_defaults():
new_listen_port = (max_listen_port + 1) if max_listen_port is not None else 51820
new_private_key = subprocess.check_output('wg genkey', shell=True).decode('utf-8').strip()
+ new_public_key = subprocess.check_output(f'echo {new_private_key} | wg pubkey', shell=True).decode('utf-8').strip()
new_address = f'10.188.{new_instance_id}.1'
@@ -52,6 +53,7 @@ def generate_instance_defaults():
'instance_id': new_instance_id,
'listen_port': new_listen_port,
'private_key': new_private_key,
+ 'public_key': new_public_key,
'address': new_address,
'netmask': 24,
'persistent_keepalive': 25,
diff --git a/wireguard_peer/views.py b/wireguard_peer/views.py
index 2b99493..fcb4cad 100644
--- a/wireguard_peer/views.py
+++ b/wireguard_peer/views.py
@@ -21,7 +21,7 @@ def generate_peer_default(wireguard_instance):
# the code below can be an issue for larger networks, for now it's fine, but it should be optimized in the future
used_ips = set(WireGuardInstance.objects.all().values_list('address', flat=True)) | \
- set(PeerAllowedIP.objects.all().values_list('allowed_ip', flat=True))
+ set(PeerAllowedIP.objects.filter(priority=0).values_list('allowed_ip', flat=True))
free_ip_address = None
for ip in network.hosts():
diff --git a/wireguard_webadmin/settings.py b/wireguard_webadmin/settings.py
index 6bf1378..353a567 100644
--- a/wireguard_webadmin/settings.py
+++ b/wireguard_webadmin/settings.py
@@ -78,9 +78,7 @@ WSGI_APPLICATION = 'wireguard_webadmin.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': '/etc/wireguard/wireguard-webadmin-db.sqlite3',
- #'NAME': BASE_DIR / 'db.sqlite3',
-
+ 'NAME': '/etc/wireguard/wireguard-webadmin.sqlite3',
}
}