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" msgid "User not have ip"
msgstr "У пользователя нет 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) messages.error(request, e)
return self.render_to_response(self.get_context_data(**kwargs)) 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): def get_context_data(self, **kwargs):
context = super(IpUpdateView, self).get_context_data(**kwargs) context = super(IpUpdateView, self).get_context_data(**kwargs)
context['group'] = self.object.group 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: def add_queue(self, queue: i_structs.SubnetQueue) -> None:
if not isinstance(queue, i_structs.SubnetQueue): if not isinstance(queue, i_structs.SubnetQueue):
raise TypeError('queue must be instance of SubnetQueue') raise TypeError('queue must be instance of SubnetQueue')
self._exec_cmd((
return self._exec_cmd((
'/queue/simple/add', '/queue/simple/add',
'=name=%s' % queue.name, '=name=%s' % queue.name,
# FIXME: тут в разных микротиках или =target-addresses или =target # FIXME: тут в разных микротиках или =target-addresses или =target
@ -293,9 +293,8 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def update_queue(self, queue: i_structs.SubnetQueue): def update_queue(self, queue: i_structs.SubnetQueue):
if not isinstance(queue, i_structs.SubnetQueue): if not isinstance(queue, i_structs.SubnetQueue):
raise TypeError 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) return self.add_queue(queue)
else: else:
cmd = [ cmd = [
@ -348,10 +347,14 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def find_ip(self, net, list_name: str): def find_ip(self, net, list_name: str):
if not issubclass(net.__class__, _BaseNetwork): if not issubclass(net.__class__, _BaseNetwork):
raise TypeError raise TypeError
if net.prefixlen == net.max_prefixlen:
ip = net.network_address
else:
ip = net.with_prefixlen
r = self._exec_cmd(( r = self._exec_cmd((
'/ip/firewall/address-list/print', 'where', '/ip/firewall/address-list/print', 'where',
'?list=%s' % list_name, '?list=%s' % list_name,
'?address=%s' % net
'?address=%s' % ip
)) ))
return r.get('!re') return r.get('!re')
@ -366,6 +369,13 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
n.queue_id = dat.get('=.id') n.queue_id = dat.get('=.id')
yield n 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 # BaseTransmitter implementation
################################################# #################################################
@ -406,6 +416,7 @@ class MikrotikTransmitter(core.BaseTransmitter, ApiRos,
def update_user(self, queue: i_structs.SubnetQueue, *args): def update_user(self, queue: i_structs.SubnetQueue, *args):
self.update_queue(queue) self.update_queue(queue)
self.update_ip(queue.network)
def ping(self, host, count=10) -> Optional[Tuple[int, int]]: def ping(self, host, count=10) -> Optional[Tuple[int, int]]:
r = self._exec_cmd(( r = self._exec_cmd((

Loading…
Cancel
Save