-
+
{% if perms.abonapp.can_ping %}
diff --git a/abonapp/templates/abonapp/modal_confirm_ip_free.html b/abonapp/templates/abonapp/modal_confirm_ip_free.html
new file mode 100644
index 0000000..edfe35a
--- /dev/null
+++ b/abonapp/templates/abonapp/modal_confirm_ip_free.html
@@ -0,0 +1,14 @@
+{% extends 'base_delete_modal.html' %}
+{% load i18n %}
+
+{% block modal_form_url %}
+ {% url 'abonapp:user_session_free' gid object.username %}
+{% endblock %}
+
+{% block modal_form_title %}
+ {% trans 'Free session' %}
+{% endblock %}
+
+{% block modal_form_text %}
+
{% trans 'Are you sure you want to free ip user session?' %}
+{% endblock %}
diff --git a/abonapp/urls.py b/abonapp/urls.py
index e5585cd..ac1c048 100644
--- a/abonapp/urls.py
+++ b/abonapp/urls.py
@@ -25,7 +25,7 @@ subscriber_patterns = [
path('tel/add/', views.tel_add, name='telephone_new'),
path('tel/del/', views.tel_del, name='telephone_del'),
path('markers/', views.EditSibscriberMarkers.as_view(), name='markers_edit'),
- path('session/free/', views.user_session_free, name='user_session_free'),
+ path('session/free/', views.UserSessionFree.as_view(), name='user_session_free'),
path('periodic_pay/', views.add_edit_periodic_pay, name='add_periodic_pay'),
path('periodic_pay/
/', views.add_edit_periodic_pay, name='add_periodic_pay'),
path('periodic_pay//del/', views.del_periodic_pay, name='del_periodic_pay'),
diff --git a/abonapp/views.py b/abonapp/views.py
index 91472de..f8ab12a 100644
--- a/abonapp/views.py
+++ b/abonapp/views.py
@@ -23,7 +23,6 @@ from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from django.views.generic import ListView, UpdateView, CreateView, DeleteView
from djing import lib
-from djing import ping
from djing.global_base_views import OrderedFilteredList, SecureApiView
from djing.lib.decorators import json_view, only_admins
from djing.lib.mixins import (
@@ -1222,21 +1221,47 @@ class EditSibscriberMarkers(LoginAdminPermissionMixin, UpdateView):
return v
-@login_required
-@only_admins
-@permission_required('abonapp.change_abon')
-def user_session_free(request, gid: int, uname):
- abon = get_object_or_404(models.Abon, username=uname)
- if abon.nas is None:
- messages.error(request, _('gateway required'))
- return redirect('abonapp:abon_home', gid, uname)
- if abon.ip_address:
- abon.free_ip_addr()
- customer_nas_command.delay(abon.pk, 'remove')
- messages.success(request, _('Ip lease has been freed'))
- else:
- messages.error(request, _('User not have ip'))
- return redirect('abonapp:abon_home', gid, uname)
+class UserSessionFree(LoginRequiredMixin, OnlyAdminsMixin, PermissionRequiredMixin, UpdateView):
+ permission_required = 'abonapp.change_abon'
+ model = models.Abon
+ slug_url_kwarg = 'uname'
+ slug_field = 'username'
+ fields = 'ip_address',
+ template_name = 'abonapp/modal_confirm_ip_free.html'
+
+ def get(self, request, *args, **kwargs):
+ r = super().get(request, *args, **kwargs)
+ abon = self.object
+ if abon.nas is None:
+ messages.error(self.request, _('gateway required'))
+ return redirect(
+ 'abonapp:abon_home',
+ gid=self.kwargs.get('gid'),
+ uname=self.kwargs.get('uname')
+ )
+ return r
+
+ def post(self, request, *args, **kwargs):
+ self.object = self.get_object()
+ abon = self.object
+ if abon.ip_address:
+ abon.free_ip_addr()
+ customer_nas_command.delay(abon.pk, 'remove')
+ messages.success(request, _('Ip lease has been freed'))
+ else:
+ messages.error(request, _('User not have ip'))
+ return redirect(
+ 'abonapp:abon_home',
+ gid=self.kwargs.get('gid'),
+ uname=self.kwargs.get('uname')
+ )
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context.update({
+ 'gid': self.kwargs.get('gid'),
+ })
+ return context
@login_required