Browse Source

fix save subscriber

devel
Dmitry Novikov 7 years ago
parent
commit
5504313e86
  1. 3
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 9
      abonapp/views.py
  3. 21
      nas_app/nas_managers/mod_mikrotik.py

3
abonapp/locale/ru/LC_MESSAGES/django.po

@ -1153,3 +1153,6 @@ msgstr "Автор не назначен"
msgid "User not have ip"
msgstr "У пользователя нет ip"
msgid "Ip successfully updated"
msgstr "IP успешно обновлён"

9
abonapp/views.py

@ -566,6 +566,15 @@ class IpUpdateView(AbonappPermissionMixin, UpdateView):
messages.error(request, e)
return self.render_to_response(self.get_context_data(**kwargs))
def form_valid(self, form):
r = super(IpUpdateView, self).form_valid(form)
abon = self.object
res = abon.nas_sync_self()
if isinstance(res, Exception):
messages.warning(self.request, res)
messages.success(self.request, _('Ip successfully updated'))
return r
def get_context_data(self, **kwargs):
context = super(IpUpdateView, self).get_context_data(**kwargs)
context['group'] = self.object.group

21
nas_app/nas_managers/mod_mikrotik.py

@ -262,7 +262,7 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def add_queue(self, queue: i_structs.SubnetQueue) -> None:
if not isinstance(queue, i_structs.SubnetQueue):
raise TypeError('queue must be instance of SubnetQueue')
self._exec_cmd((
return self._exec_cmd((
'/queue/simple/add',
'=name=%s' % queue.name,
# FIXME: тут в разных микротиках или =target-addresses или =target
@ -293,9 +293,8 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def update_queue(self, queue: i_structs.SubnetQueue):
if not isinstance(queue, i_structs.SubnetQueue):
raise TypeError
if not queue.queue_id:
queue = self.find_queue(queue.name)
if queue is None:
queue_gw = self.find_queue(queue.name)
if queue_gw is None:
return self.add_queue(queue)
else:
cmd = [
@ -348,10 +347,14 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def find_ip(self, net, list_name: str):
if not issubclass(net.__class__, _BaseNetwork):
raise TypeError
if net.prefixlen == net.max_prefixlen:
ip = net.network_address
else:
ip = net.with_prefixlen
r = self._exec_cmd((
'/ip/firewall/address-list/print', 'where',
'?list=%s' % list_name,
'?address=%s' % net
'?address=%s' % ip
))
return r.get('!re')
@ -366,6 +369,13 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
n.queue_id = dat.get('=.id')
yield n
def update_ip(self, net):
if not issubclass(net.__class__, _BaseNetwork):
raise TypeError
res_net_gw = self.find_ip(net, LIST_USERS_ALLOWED)
if not res_net_gw:
self.add_ip(LIST_USERS_ALLOWED, net)
#################################################
# BaseTransmitter implementation
#################################################
@ -406,6 +416,7 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def update_user(self, queue: i_structs.SubnetQueue, *args):
self.update_queue(queue)
self.update_ip(queue.network)
def ping(self, host, count=10) -> Optional[Tuple[int, int]]:
r = self._exec_cmd((

Loading…
Cancel
Save