diff --git a/templates/base.html b/templates/base.html index 7831c89..543f2b5 100644 --- a/templates/base.html +++ b/templates/base.html @@ -192,7 +192,7 @@ diff --git a/templates/wireguard/welcome.html b/templates/wireguard/welcome.html index 99b480c..1b7e2d3 100644 --- a/templates/wireguard/welcome.html +++ b/templates/wireguard/welcome.html @@ -7,10 +7,8 @@

If you encounter any issues or have suggestions, please open an issue on GitHub so I can review it.

TODO list

diff --git a/templates/wireguard/wireguard_manage_server.html b/templates/wireguard/wireguard_manage_server.html index c82c939..7598752 100644 --- a/templates/wireguard/wireguard_manage_server.html +++ b/templates/wireguard/wireguard_manage_server.html @@ -24,18 +24,21 @@ {% csrf_token %}
- +
+
- - + +
+ +
- +
@@ -45,10 +48,12 @@
+
- - + +
+
@@ -77,6 +82,22 @@
+ +
+
+ + +
+
+ + +
+ +
+ + + +
diff --git a/templates/wireguard/wireguard_peer_list.html b/templates/wireguard/wireguard_peer_list.html index 361703b..5820bc3 100644 --- a/templates/wireguard/wireguard_peer_list.html +++ b/templates/wireguard/wireguard_peer_list.html @@ -136,7 +136,7 @@ }; fetchWireguardStatus(); - setInterval(fetchWireguardStatus, 30000); + setInterval(fetchWireguardStatus, {{ current_instance.peer_list_refresh_interval }} * 1000); }); const updateUI = (data) => { diff --git a/wireguard/admin.py b/wireguard/admin.py index 66cf0d8..ef6c0ed 100644 --- a/wireguard/admin.py +++ b/wireguard/admin.py @@ -3,8 +3,8 @@ from .models import WireGuardInstance, Peer, PeerAllowedIP class WireGuardInstanceAdmin(admin.ModelAdmin): - list_display = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive', 'created', 'updated', 'uuid') - search_fields = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive', 'created', 'updated', 'uuid') + list_display = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'created', 'updated', 'uuid') + search_fields = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'created', 'updated', 'uuid') admin.site.register(WireGuardInstance, WireGuardInstanceAdmin) diff --git a/wireguard/forms.py b/wireguard/forms.py index e64368c..b901ee0 100644 --- a/wireguard/forms.py +++ b/wireguard/forms.py @@ -14,12 +14,15 @@ class WireGuardInstanceForm(forms.ModelForm): 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='Keepalive') + peer_list_refresh_interval = forms.IntegerField(label='Web Refresh Interval', initial=20) + dns_primary = forms.GenericIPAddressField(label='Primary DNS', initial='1.1.1.1') + dns_secondary = forms.GenericIPAddressField(label='Secondary DNS', initial='1.0.0.1', required=False) class Meta: model = WireGuardInstance fields = [ - 'name', 'instance_id', 'private_key', 'public_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', 'peer_list_refresh_interval', 'dns_primary', 'dns_secondary' ] def clean(self): @@ -27,6 +30,9 @@ class WireGuardInstanceForm(forms.ModelForm): hostname = cleaned_data.get('hostname') address = cleaned_data.get('address') netmask = cleaned_data.get('netmask') + peer_list_refresh_interval = cleaned_data.get('peer_list_refresh_interval') + if peer_list_refresh_interval < 10: + raise forms.ValidationError('Peer List Refresh Interval must be at least 10 seconds') if not is_valid_ip_or_hostname(hostname): raise forms.ValidationError('Invalid hostname or IP Address') diff --git a/wireguard/migrations/0007_remove_wireguardinstance_persistent_keepalive.py b/wireguard/migrations/0007_remove_wireguardinstance_persistent_keepalive.py new file mode 100644 index 0000000..d70fd3b --- /dev/null +++ b/wireguard/migrations/0007_remove_wireguardinstance_persistent_keepalive.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.1 on 2024-02-17 17:21 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wireguard', '0006_peerstatus'), + ] + + operations = [ + migrations.RemoveField( + model_name='wireguardinstance', + name='persistent_keepalive', + ), + ] diff --git a/wireguard/migrations/0008_wireguardinstance_dns_primary_and_more.py b/wireguard/migrations/0008_wireguardinstance_dns_primary_and_more.py new file mode 100644 index 0000000..75e0269 --- /dev/null +++ b/wireguard/migrations/0008_wireguardinstance_dns_primary_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 5.0.1 on 2024-02-17 17:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wireguard', '0007_remove_wireguardinstance_persistent_keepalive'), + ] + + operations = [ + migrations.AddField( + model_name='wireguardinstance', + name='dns_primary', + field=models.GenericIPAddressField(default='1.1.1.1', protocol='IPv4', unique=True), + ), + migrations.AddField( + model_name='wireguardinstance', + name='dns_secondary', + field=models.GenericIPAddressField(blank=True, default='1.0.0.1', null=True, protocol='IPv4', unique=True), + ), + migrations.AddField( + model_name='wireguardinstance', + name='peer_list_refresh_interval', + field=models.IntegerField(default=20), + ), + ] diff --git a/wireguard/models.py b/wireguard/models.py index dbc6c72..a9b1a23 100644 --- a/wireguard/models.py +++ b/wireguard/models.py @@ -40,7 +40,9 @@ class WireGuardInstance(models.Model): netmask = models.IntegerField(default=24, choices=NETMASK_CHOICES) post_up = models.TextField(blank=True, null=True) post_down = models.TextField(blank=True, null=True) - persistent_keepalive = models.IntegerField(default=25) + peer_list_refresh_interval = models.IntegerField(default=20) + dns_primary = models.GenericIPAddressField(unique=True, protocol='IPv4', default='1.1.1.1') + dns_secondary = models.GenericIPAddressField(unique=True, protocol='IPv4', default='1.0.0.1', blank=True, null=True) pending_changes = models.BooleanField(default=True) created = models.DateTimeField(auto_now_add=True) diff --git a/wireguard_tools/views.py b/wireguard_tools/views.py index 6fd857a..7f2c3f6 100644 --- a/wireguard_tools/views.py +++ b/wireguard_tools/views.py @@ -36,7 +36,7 @@ def generate_peer_config(peer_uuid): "[Interface]", f"PrivateKey = {peer.private_key}" if peer.private_key else "", f"Address = {client_address}", - f"DNS = 8.8.8.8", + f"DNS = {wg_instance.dns_primary}" + (f", {wg_instance.dns_secondary}" if wg_instance.dns_secondary else ""), "\n[Peer]", f"PublicKey = {wg_instance.public_key}", f"Endpoint = {wg_instance.hostname}:{wg_instance.listen_port}",