Add pending changes warning context processor

This commit is contained in:
Eduardo Silva 2025-03-31 13:41:59 -03:00
parent fdc941726c
commit 2b8ec3ac88
6 changed files with 51 additions and 71 deletions

View File

@ -1,10 +1,12 @@
from wireguard.models import WireGuardInstance
from wgwadmlibrary.tools import is_valid_ip_or_hostname
from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required
from user_manager.models import UserAcl
import subprocess import subprocess
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, render
from user_manager.models import UserAcl
from wgwadmlibrary.tools import is_valid_ip_or_hostname
from wireguard.models import WireGuardInstance
@login_required @login_required
def view_console(request): def view_console(request):
@ -15,10 +17,6 @@ def view_console(request):
return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) return render(request, 'access_denied.html', {'page_title': 'Access Denied'})
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id') wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
if wireguard_instances.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
requested_command = request.GET.get('command') requested_command = request.GET.get('command')
command_target = request.GET.get('target', '') command_target = request.GET.get('target', '')
if command_target: if command_target:
@ -79,5 +77,5 @@ def view_console(request):
command_output = e.output.decode('utf-8') command_output = e.output.decode('utf-8')
command_success = False command_success = False
context = {'page_title': page_title, 'command_output': command_output, 'command_success': command_success, 'pending_changes_warning': pending_changes_warning} context = {'page_title': page_title, 'command_output': command_output, 'command_success': command_success}
return render(request, 'console/console.html', context) return render(request, 'console/console.html', context)

View File

@ -1,14 +1,14 @@
from django.http import JsonResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.db.models import Max
from firewall.models import RedirectRule, FirewallRule, FirewallSettings
from firewall.forms import RedirectRuleForm, FirewallRuleForm, FirewallSettingsForm
from django.contrib import messages from django.contrib import messages
from wireguard.models import WireGuardInstance
from user_manager.models import UserAcl
from firewall.tools import export_user_firewall, generate_firewall_header, generate_firewall_footer, generate_port_forward_firewall, reset_firewall_to_default
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.utils import timezone from django.db.models import Max
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, redirect, render
from firewall.forms import FirewallRuleForm, FirewallSettingsForm, RedirectRuleForm
from firewall.models import FirewallRule, FirewallSettings, RedirectRule
from firewall.tools import reset_firewall_to_default
from user_manager.models import UserAcl
from wireguard.models import WireGuardInstance
@login_required @login_required
@ -16,13 +16,8 @@ def view_redirect_rule_list(request):
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id') wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
if wireguard_instances.filter(legacy_firewall=True).exists(): if wireguard_instances.filter(legacy_firewall=True).exists():
return redirect('/firewall/migration_required/') return redirect('/firewall/migration_required/')
if wireguard_instances.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
context = { context = {
'page_title': 'Port Forward List', 'page_title': 'Port Forward List',
'pending_changes_warning': pending_changes_warning,
'redirect_rule_list': RedirectRule.objects.all().order_by('port'), 'redirect_rule_list': RedirectRule.objects.all().order_by('port'),
'current_chain': 'portforward', 'current_chain': 'portforward',
} }
@ -79,13 +74,8 @@ def view_firewall_rule_list(request):
current_chain = request.GET.get('chain', 'forward') current_chain = request.GET.get('chain', 'forward')
if current_chain not in ['forward', 'portforward', 'postrouting']: if current_chain not in ['forward', 'portforward', 'postrouting']:
current_chain = 'forward' current_chain = 'forward'
if wireguard_instances.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
context = { context = {
'page_title': 'Firewall Rule List', 'page_title': 'Firewall Rule List',
'pending_changes_warning': pending_changes_warning,
'firewall_rule_list': FirewallRule.objects.filter(firewall_chain=current_chain).order_by('sort_order'), 'firewall_rule_list': FirewallRule.objects.filter(firewall_chain=current_chain).order_by('sort_order'),
'current_chain': current_chain, 'current_chain': current_chain,
'port_forward_list': RedirectRule.objects.all().order_by('port'), 'port_forward_list': RedirectRule.objects.all().order_by('port'),

View File

@ -0,0 +1,9 @@
from .models import WireGuardInstance
def pending_changes_warning(request):
if request.user.is_authenticated:
pending = WireGuardInstance.objects.filter(pending_changes=True).exists()
else:
pending = False
return {'pending_changes_warning': pending}

View File

@ -1,16 +1,14 @@
from decimal import Decimal, ROUND_DOWN
from django.shortcuts import render, get_object_or_404, redirect
from user_manager.models import UserAcl
from wireguard.forms import WireGuardInstanceForm
from .models import WireGuardInstance, WebadminSettings
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.db import models
from django.conf import settings
import os
import subprocess import subprocess
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db import models
from django.shortcuts import get_object_or_404, redirect, render
from user_manager.models import UserAcl
from wireguard.forms import WireGuardInstanceForm
from .models import WebadminSettings, WireGuardInstance
def generate_instance_defaults(): def generate_instance_defaults():
max_instance_id = WireGuardInstance.objects.all().aggregate(models.Max('instance_id'))['instance_id__max'] max_instance_id = WireGuardInstance.objects.all().aggregate(models.Max('instance_id'))['instance_id__max']
@ -74,10 +72,6 @@ def legacy_view_wireguard_status(request):
user_acl = get_object_or_404(UserAcl, user=request.user) user_acl = get_object_or_404(UserAcl, user=request.user)
page_title = 'WireGuard Status' page_title = 'WireGuard Status'
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id') wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
if wireguard_instances.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
if user_acl.enable_enhanced_filter: if user_acl.enable_enhanced_filter:
command_output = 'Enhanced filter is enabled. This command is not available.' command_output = 'Enhanced filter is enabled. This command is not available.'
@ -91,7 +85,7 @@ def legacy_view_wireguard_status(request):
command_output = e.output.decode('utf-8') command_output = e.output.decode('utf-8')
command_success = False command_success = False
context = {'page_title': page_title, 'command_output': command_output, 'command_success': command_success, 'pending_changes_warning': pending_changes_warning, 'wireguard_instances': wireguard_instances} context = {'page_title': page_title, 'command_output': command_output, 'command_success': command_success, 'wireguard_instances': wireguard_instances}
return render(request, 'wireguard/wireguard_status.html', context) return render(request, 'wireguard/wireguard_status.html', context)
@ -109,15 +103,10 @@ def view_wireguard_status(request):
else: else:
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id') wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
if WireGuardInstance.objects.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
if user_acl.enable_enhanced_filter: if user_acl.enable_enhanced_filter:
pass pass
context = {'page_title': page_title, 'pending_changes_warning': pending_changes_warning, 'wireguard_instances': wireguard_instances} context = {'page_title': page_title, 'wireguard_instances': wireguard_instances}
return render(request, 'wireguard/wireguard_status.html', context) return render(request, 'wireguard/wireguard_status.html', context)
@ -126,10 +115,6 @@ def view_wireguard_manage_instance(request):
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists(): if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():
return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) return render(request, 'access_denied.html', {'page_title': 'Access Denied'})
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id') wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
if wireguard_instances.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
if request.GET.get('uuid'): if request.GET.get('uuid'):
current_instance = get_object_or_404(WireGuardInstance, uuid=request.GET.get('uuid')) current_instance = get_object_or_404(WireGuardInstance, uuid=request.GET.get('uuid'))
else: else:
@ -172,7 +157,7 @@ def view_wireguard_manage_instance(request):
form = WireGuardInstanceForm(initial=generate_instance_defaults()) form = WireGuardInstanceForm(initial=generate_instance_defaults())
else: else:
form = WireGuardInstanceForm(instance=current_instance) form = WireGuardInstanceForm(instance=current_instance)
context = {'page_title': page_title, 'wireguard_instances': wireguard_instances, 'current_instance': current_instance, 'form': form, 'pending_changes_warning': pending_changes_warning} context = {'page_title': page_title, 'wireguard_instances': wireguard_instances, 'current_instance': current_instance, 'form': form}
return render(request, 'wireguard/wireguard_manage_server.html', context) return render(request, 'wireguard/wireguard_manage_server.html', context)

View File

@ -1,13 +1,15 @@
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from user_manager.models import UserAcl
from wireguard.models import WireGuardInstance, Peer, PeerAllowedIP
from django.contrib import messages
from django.db.models import Max
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, default_sort_peers, deduplicate_sort_order, check_sort_order_conflict import subprocess
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import Http404 from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render
from user_manager.models import UserAcl
from wgwadmlibrary.tools import check_sort_order_conflict, deduplicate_sort_order, default_sort_peers, \
user_allowed_instances, user_allowed_peers, user_has_access_to_instance, user_has_access_to_peer
from wireguard.models import Peer, PeerAllowedIP, WireGuardInstance
from wireguard_peer.forms import PeerAllowedIPForm, PeerForm from wireguard_peer.forms import PeerAllowedIPForm, PeerForm
@ -47,11 +49,6 @@ def view_wireguard_peer_list(request):
page_title = 'WireGuard Peer List' page_title = 'WireGuard Peer List'
user_acl = get_object_or_404(UserAcl, user=request.user) user_acl = get_object_or_404(UserAcl, user=request.user)
wireguard_instances = user_allowed_instances(user_acl) wireguard_instances = user_allowed_instances(user_acl)
if WireGuardInstance.objects.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
if wireguard_instances: if wireguard_instances:
if request.GET.get('uuid'): if request.GET.get('uuid'):
@ -71,7 +68,7 @@ def view_wireguard_peer_list(request):
if user_has_access_to_instance(user_acl, current_instance): if user_has_access_to_instance(user_acl, current_instance):
add_peer_enabled = True add_peer_enabled = True
context = {'page_title': page_title, 'wireguard_instances': wireguard_instances, 'current_instance': current_instance, 'peer_list': peer_list, 'pending_changes_warning': pending_changes_warning, 'add_peer_enabled': add_peer_enabled, 'user_acl': user_acl} context = {'page_title': page_title, 'wireguard_instances': wireguard_instances, 'current_instance': current_instance, 'peer_list': peer_list, 'add_peer_enabled': add_peer_enabled, 'user_acl': user_acl}
return render(request, 'wireguard/wireguard_peer_list.html', context) return render(request, 'wireguard/wireguard_peer_list.html', context)

View File

@ -71,6 +71,7 @@ TEMPLATES = [
'django.template.context_processors.request', 'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
'wireguard.context_processors.pending_changes_warning',
], ],
}, },
}, },
@ -135,6 +136,6 @@ STATICFILES_DIRS = [
DNS_CONFIG_FILE = '/etc/dnsmasq/wireguard_webadmin_dns.conf' DNS_CONFIG_FILE = '/etc/dnsmasq/wireguard_webadmin_dns.conf'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
WIREGUARD_WEBADMIN_VERSION = 9962 WIREGUARD_WEBADMIN_VERSION = 9963
from wireguard_webadmin.production_settings import * from wireguard_webadmin.production_settings import *