mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2026-02-19 19:26:17 +00:00
Add peer scheduling profile management functionality
This commit is contained in:
@@ -188,3 +188,34 @@ class PeerSuspensionForm(forms.ModelForm):
|
||||
raise forms.ValidationError(_('Scheduled unsuspension time must be at least 10 minutes in the future.'))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class PeerScheduleProfileForm(forms.ModelForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.peer = kwargs.pop('peer', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_method = 'post'
|
||||
|
||||
self.helper.layout = Layout(
|
||||
Row(Div(Field('profile'), css_class='col-md-12')),
|
||||
Row(
|
||||
Div(
|
||||
FormActions(
|
||||
Submit('save', _('Save'), css_class='btn-primary'),
|
||||
HTML(
|
||||
'<a class="btn btn-secondary" href="{}?peer={}">{}</a>'.format(
|
||||
reverse_lazy('wireguard_peer_manage'),
|
||||
self.peer.uuid,
|
||||
_("Back")
|
||||
)
|
||||
),
|
||||
),
|
||||
css_class='col-md-12'
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = PeerScheduling
|
||||
fields = ['profile']
|
||||
|
||||
@@ -16,7 +16,8 @@ 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, PeerNameForm, PeerKeepaliveForm, PeerKeysForm, PeerSuspensionForm
|
||||
from wireguard_peer.forms import PeerAllowedIPForm, PeerNameForm, PeerKeepaliveForm, PeerKeysForm, PeerSuspensionForm, \
|
||||
PeerScheduleProfileForm
|
||||
|
||||
|
||||
def generate_peer_default(wireguard_instance):
|
||||
@@ -231,10 +232,17 @@ def view_wireguard_peer_manage(request):
|
||||
page_title = _('Peer Configuration: ') + str(current_peer)
|
||||
peer_ip_list = current_peer.peerallowedip_set.filter(config_file='server').order_by('priority')
|
||||
peer_client_ip_list = current_peer.peerallowedip_set.filter(config_file='client').order_by('priority')
|
||||
|
||||
# Try to get peer scheduling, if it doesn't exist, it will be None
|
||||
try:
|
||||
peer_scheduling = current_peer.schedule
|
||||
except PeerScheduling.DoesNotExist:
|
||||
peer_scheduling = None
|
||||
|
||||
context = {
|
||||
'page_title': page_title, 'current_instance': current_instance, 'current_peer': current_peer,
|
||||
'peer_ip_list': peer_ip_list, 'peer_client_ip_list': peer_client_ip_list
|
||||
'peer_ip_list': peer_ip_list, 'peer_client_ip_list': peer_client_ip_list,
|
||||
'peer_scheduling': peer_scheduling
|
||||
}
|
||||
return render(request, 'wireguard/wireguard_manage_peer.html', context)
|
||||
|
||||
@@ -457,3 +465,32 @@ def view_wireguard_peer_suspend(request):
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'generic_form.html', context)
|
||||
|
||||
|
||||
@login_required
|
||||
def view_wireguard_peer_schedule_profile(request):
|
||||
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=30).exists():
|
||||
return render(request, 'access_denied.html', {'page_title': 'Access Denied'})
|
||||
|
||||
user_acl = get_object_or_404(UserAcl, user=request.user)
|
||||
current_peer = get_object_or_404(Peer, uuid=request.GET.get('peer'))
|
||||
|
||||
if not user_has_access_to_peer(user_acl, current_peer):
|
||||
raise Http404
|
||||
|
||||
peer_scheduling, created = PeerScheduling.objects.get_or_create(peer=current_peer)
|
||||
form = PeerScheduleProfileForm(request.POST or None, instance=peer_scheduling, peer=current_peer)
|
||||
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, _('Peer scheduling profile updated successfully.'))
|
||||
current_peer.wireguard_instance.pending_changes = True
|
||||
current_peer.wireguard_instance.save()
|
||||
return redirect('/peer/manage/?peer=' + str(current_peer.uuid))
|
||||
|
||||
context = {
|
||||
'page_title': _('Manage Peer Schedule Profile'),
|
||||
'current_peer': current_peer,
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'generic_form.html', context)
|
||||
|
||||
Reference in New Issue
Block a user