mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2025-04-19 08:55:12 +00:00
Manage DNS Settings
This commit is contained in:
parent
13702c664e
commit
414bc8076a
42
dns/forms.py
42
dns/forms.py
@ -11,6 +11,45 @@ from django.core.exceptions import ValidationError
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class DNSSettingsForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = DNSSettings
|
||||||
|
fields = ['dns_primary', 'dns_secondary']
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(DNSSettingsForm, self).__init__(*args, **kwargs)
|
||||||
|
self.helper = FormHelper()
|
||||||
|
self.fields['dns_primary'].label = 'Primary Resolver'
|
||||||
|
self.fields['dns_secondary'].label = 'Secondary Resolver'
|
||||||
|
self.helper.form_method = 'post'
|
||||||
|
self.helper.layout = Layout(
|
||||||
|
Fieldset(
|
||||||
|
'Resolver Settings',
|
||||||
|
Div(
|
||||||
|
Field('dns_primary', css_class='form-control'),
|
||||||
|
Field('dns_secondary', css_class='form-control'),
|
||||||
|
css_class='col-md-6'
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FormActions(
|
||||||
|
Submit('save', 'Save', css_class='btn btn-primary'),
|
||||||
|
HTML('<a class="btn btn-outline-primary" href="/dns/">Back</a>'),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super().clean()
|
||||||
|
dns_primary = cleaned_data.get('dns_primary')
|
||||||
|
dns_secondary = cleaned_data.get('dns_secondary')
|
||||||
|
if dns_secondary and not dns_primary:
|
||||||
|
dns_primary = dns_secondary
|
||||||
|
dns_secondary = ''
|
||||||
|
cleaned_data['dns_primary'] = dns_primary
|
||||||
|
cleaned_data['dns_secondary'] = dns_secondary
|
||||||
|
if dns_primary and dns_primary == dns_secondary:
|
||||||
|
raise ValidationError('Primary and secondary DNS cannot be the same')
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
class StaticHostForm(forms.ModelForm):
|
class StaticHostForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -42,7 +81,8 @@ class StaticHostForm(forms.ModelForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
hostname = self.cleaned_data.get('hostname')
|
cleaned_data = super().clean()
|
||||||
|
hostname = cleaned_data.get('hostname')
|
||||||
if hostname:
|
if hostname:
|
||||||
regex = r'^[a-zA-Z][a-zA-Z0-9-\.]*[a-zA-Z0-9]$'
|
regex = r'^[a-zA-Z][a-zA-Z0-9-\.]*[a-zA-Z0-9]$'
|
||||||
if not re.match(regex, hostname):
|
if not re.match(regex, hostname):
|
||||||
|
37
dns/views.py
37
dns/views.py
@ -3,7 +3,7 @@ from django.shortcuts import render, get_object_or_404, redirect
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from user_manager.models import UserAcl
|
from user_manager.models import UserAcl
|
||||||
from .models import DNSSettings, StaticHost
|
from .models import DNSSettings, StaticHost
|
||||||
from .forms import StaticHostForm
|
from .forms import StaticHostForm, DNSSettingsForm
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -17,6 +17,41 @@ def view_static_host_list(request):
|
|||||||
return render(request, 'dns/static_host_list.html', context=context)
|
return render(request, 'dns/static_host_list.html', context=context)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def view_manage_dns_settings(request):
|
||||||
|
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():
|
||||||
|
return render(request, 'access_denied.html', {'page_title': 'Access Denied'})
|
||||||
|
dns_settings, _ = DNSSettings.objects.get_or_create(name='dns_settings')
|
||||||
|
form = DNSSettingsForm(request.POST or None, instance=dns_settings)
|
||||||
|
if form.is_valid():
|
||||||
|
form.save()
|
||||||
|
messages.success(request, 'DNS settings saved successfully')
|
||||||
|
return redirect('/dns/')
|
||||||
|
|
||||||
|
form_description_content = '''
|
||||||
|
<strong>DNS Forwarders</strong>
|
||||||
|
<p>
|
||||||
|
All DNS queries will be forwarded to the primary resolver. If the primary resolver is not available, the secondary resolver will be used.
|
||||||
|
</p>
|
||||||
|
<strong>
|
||||||
|
Local DNS Resolution
|
||||||
|
</strong>
|
||||||
|
<p>
|
||||||
|
If no forwarders are specified, the system will locally resolve DNS queries. This can lead to slower DNS resolution times, but can be useful in certain scenarios.
|
||||||
|
</p>
|
||||||
|
'''
|
||||||
|
|
||||||
|
context = {
|
||||||
|
'dns_settings': dns_settings,
|
||||||
|
'form': form,
|
||||||
|
'form_description': {
|
||||||
|
'size': '',
|
||||||
|
'content': form_description_content
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return render(request, 'generic_form.html', context=context)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def view_manage_static_host(request):
|
def view_manage_static_host(request):
|
||||||
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=40).exists():
|
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=40).exists():
|
||||||
|
@ -24,7 +24,7 @@ from accounts.views import view_create_first_user, view_login, view_logout
|
|||||||
from wireguard_tools.views import export_wireguard_configs, download_config_or_qrcode, restart_wireguard_interfaces
|
from wireguard_tools.views import export_wireguard_configs, download_config_or_qrcode, restart_wireguard_interfaces
|
||||||
from api.views import wireguard_status, cron_check_updates, cron_update_peer_latest_handshake, routerfleet_get_user_token, routerfleet_authenticate_session
|
from api.views import wireguard_status, cron_check_updates, cron_update_peer_latest_handshake, routerfleet_get_user_token, routerfleet_authenticate_session
|
||||||
from firewall.views import view_redirect_rule_list, manage_redirect_rule, view_firewall_rule_list, manage_firewall_rule, view_manage_firewall_settings, view_generate_iptables_script, view_reset_firewall, view_firewall_migration_required
|
from firewall.views import view_redirect_rule_list, manage_redirect_rule, view_firewall_rule_list, manage_firewall_rule, view_manage_firewall_settings, view_generate_iptables_script, view_reset_firewall, view_firewall_migration_required
|
||||||
from dns.views import view_static_host_list, view_manage_static_host
|
from dns.views import view_static_host_list, view_manage_static_host, view_manage_dns_settings
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@ -33,6 +33,7 @@ urlpatterns = [
|
|||||||
path('status/', view_wireguard_status, name='wireguard_status'),
|
path('status/', view_wireguard_status, name='wireguard_status'),
|
||||||
path('dns/', view_static_host_list, name='static_host_list'),
|
path('dns/', view_static_host_list, name='static_host_list'),
|
||||||
path('dns/manage_static_host/', view_manage_static_host, name='manage_static_host'),
|
path('dns/manage_static_host/', view_manage_static_host, name='manage_static_host'),
|
||||||
|
path('dns/manage_settings/', view_manage_dns_settings, name='manage_dns_settings'),
|
||||||
path('peer/list/', view_wireguard_peer_list, name='wireguard_peer_list'),
|
path('peer/list/', view_wireguard_peer_list, name='wireguard_peer_list'),
|
||||||
path('peer/manage/', view_wireguard_peer_manage, name='wireguard_peer_manage'),
|
path('peer/manage/', view_wireguard_peer_manage, name='wireguard_peer_manage'),
|
||||||
path('peer/manage_ip_address/', view_manage_ip_address, name='manage_ip_address'),
|
path('peer/manage_ip_address/', view_manage_ip_address, name='manage_ip_address'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user