Beispiel #1
0
    def _make_pay(self, data: dict):
        trade_point = lib.safe_int(data.get('TRADE_POINT'))
        receipt_num = lib.safe_int(data.get('RECEIPT_NUM'))
        pay_account = data.get('PAY_ACCOUNT')
        pay_id = data.get('PAY_ID')
        pay_amount = lib.safe_float(data.get('PAY_AMOUNT'))
        abon = Abon.objects.get(username=pay_account)
        pays = AllTimePayLog.objects.filter(pay_id=pay_id)
        if pays.exists():
            return self._bad_ret(-100, 'Pay already exists')

        abon.add_ballance(
            None, pay_amount,
            comment='%s %.2f' % (self.object.title, pay_amount)
        )
        abon.save(update_fields=('ballance',))

        AllTimePayLog.objects.create(
            pay_id=pay_id,
            summ=pay_amount,
            abon=abon,
            trade_point=trade_point,
            receipt_num=receipt_num,
            pay_gw=self.object
        )
        return {
            'pay_id': pay_id,
            'service_id': data.get('SERVICE_ID'),
            'amount': pay_amount,
            'status_code': 22,
            'time_stamp': self.current_date
        }
Beispiel #2
0
 def get_details(self):
     if self.db_instance is None:
         return
     num = safe_int(self.db_instance.snmp_extra)
     if num == 0:
         return
     try:
         status = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.26.%d' % num)
         signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % num)
         distance = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.27.%d' %
                                  num)
         mac = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % num)
         if mac is not None:
             mac = ':'.join('%x' % ord(i) for i in mac)
         # uptime = self.get_item('.1.3.6.1.2.1.2.2.1.9.%d' % num)
         signal = safe_int(signal)
         if status is not None and status.isdigit():
             return {
                 'status': status,
                 'signal': signal / 10 if signal != 0 else 0,
                 'name': self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % num),
                 'mac': mac,
                 'distance': int(distance) / 10 if distance.isdigit() else 0
             }
     except EasySNMPTimeoutError as e:
         return {'err': "%s: %s" % (_('ONU not connected'), e)}
Beispiel #3
0
    def get_ports_on_fiber(self, fiber_num: int) -> Iterable:

        onu_types = self.get_list_keyval(
            '.1.3.6.1.4.1.3902.1012.3.28.1.1.1.%d' % fiber_num)
        onu_ports = self.get_list('.1.3.6.1.4.1.3902.1012.3.28.1.1.2.%d' %
                                  fiber_num)
        onu_signals = self.get_list(
            '.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%d' % fiber_num)

        # Real sn in last 3 octets
        onu_sns = self.get_list('.1.3.6.1.4.1.3902.1012.3.28.1.1.5.%d' %
                                fiber_num)
        onu_prefixs = self.get_list('.1.3.6.1.4.1.3902.1012.3.50.11.2.1.1.%d' %
                                    fiber_num)
        onu_list = (
            {
                'onu_type':
                onu_type_num[0],
                'onu_port':
                onu_port,
                'onu_signal':
                conv_signal(safe_int(onu_signal)),
                'onu_sn':
                onu_prefix +
                ''.join('%.2X' % ord(i)
                        for i in onu_sn[-4:]),  # Real sn in last 4 octets,
                'snmp_extra':
                "%d.%d" % (fiber_num, safe_int(onu_type_num[1])),
            }
            for onu_type_num, onu_port, onu_signal, onu_sn, onu_prefix in zip(
                onu_types, onu_ports, onu_signals, onu_sns, onu_prefixs))

        return onu_list
Beispiel #4
0
    def _make_pay(self, data: dict):
        trade_point = lib.safe_int(data.get('TRADE_POINT'))
        receipt_num = lib.safe_int(data.get('RECEIPT_NUM'))
        pay_account = data.get('PAY_ACCOUNT')
        pay_id = data.get('PAY_ID')
        pay_amount = lib.safe_float(data.get('PAY_AMOUNT'))
        abon = Abon.objects.get(username=pay_account)
        pays = AllTimePayLog.objects.filter(pay_id=pay_id)
        if pays.exists():
            return self._bad_ret(-100, 'Pay already exists')

        with transaction.atomic():
            abon.add_ballance(None,
                              pay_amount,
                              comment='%s %.2f' %
                              (self.object.title, pay_amount))
            abon.save(update_fields=('ballance', ))

            AllTimePayLog.objects.create(pay_id=pay_id,
                                         summ=pay_amount,
                                         abon=abon,
                                         trade_point=trade_point,
                                         receipt_num=receipt_num,
                                         pay_gw=self.object)
        return {
            'pay_id': pay_id,
            'service_id': data.get('SERVICE_ID'),
            'amount': round(pay_amount, 2),
            'status_code': 22,
            'time_stamp': self.current_date
        }
Beispiel #5
0
    def get_details(self) -> Optional[Dict]:
        if self.db_instance is None:
            return
        snmp_extra = self.db_instance.snmp_extra
        if not snmp_extra:
            return
        try:
            fiber_num, onu_num = snmp_extra.split('.')
            fiber_num, onu_num = int(fiber_num), int(onu_num)
            fiber_addr = '%d.%d' % (fiber_num, onu_num)
            status = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.1.%s.1' % fiber_addr)
            signal = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%s.1' % fiber_addr)
            distance = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.18.%s.1' % fiber_addr)
            ip_addr = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.16.1.1.10.%s' % fiber_addr)
            vlans = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.15.100.1.1.7.%s.1.1' % fiber_addr)
            int_name = self.get_item('.1.3.6.1.4.1.3902.1012.3.28.1.1.3.%s' % fiber_addr)
            onu_type = self.get_item('.1.3.6.1.4.1.3902.1012.3.28.1.1.1.%s' % fiber_addr)

            sn = self.get_item('.1.3.6.1.4.1.3902.1012.3.28.1.1.5.%s' % fiber_addr)
            if sn is not None:
                sn = 'ZTEG%s' % ''.join('%.2X' % ord(x) for x in sn[-4:])

            return {
                'status': status,
                'signal': conv_signal(safe_int(signal)),
                'distance': safe_int(distance) / 10,
                'ip_addr': ip_addr,
                'vlans': vlans,
                'serial': sn,
                'int_name': int_name,
                'onu_type': onu_type
            }
        except IndexError:
            pass
Beispiel #6
0
def add_dev(request, did):
    if not request.user.is_superuser:
        return redirect('/')
    groups = Group.objects.all()
    dot = get_object_or_404(Dot, pk=did)
    param_user_group = safe_int(request.GET.get('grp'))

    if request.method == 'POST':
        selected_devs = request.POST.getlist('dv')
        selected_user_group = safe_int(request.POST.get('selected_user_group'))

        existing_devs = Device.objects.filter(
            group__id=selected_user_group or param_user_group)
        if existing_devs.exists():
            dot.devices.remove(*(dev.pk for dev in existing_devs.iterator()))
        dot.devices.add(*selected_devs)

        url = resolve_url('mapapp:add_dev', did=dot.pk)
        return HttpResponseRedirect(
            "%s?grp=%d" % (url, selected_user_group or param_user_group))
    else:
        existing_devs = Device.objects.filter(group=param_user_group)
    return render(
        request, 'maps/add_device.html', {
            'groups': groups.iterator(),
            'dot': dot,
            'existing_devs': existing_devs.iterator(),
            'grp': param_user_group,
            'dot_devices_ids':
            [dev.pk for dev in Device.objects.filter(dot=dot)]
        })
Beispiel #7
0
def add_dev(request, did):
    if not request.user.is_superuser:
        return redirect('/')
    groups = Group.objects.all()
    dot = get_object_or_404(Dot, pk=did)
    param_user_group = safe_int(request.GET.get('grp'))

    if request.method == 'POST':
        selected_devs = request.POST.getlist('dv')
        selected_user_group = safe_int(request.POST.get('selected_user_group'))

        existing_devs = Device.objects.filter(group__id=selected_user_group or param_user_group)
        if existing_devs.exists():
            dot.devices.remove(*(dev.pk for dev in existing_devs.iterator()))
        dot.devices.add(*selected_devs)

        url = resolve_url('mapapp:add_dev', did=dot.pk)
        return HttpResponseRedirect("%s?grp=%d" % (url, selected_user_group or param_user_group))
    else:
        existing_devs = Device.objects.filter(group=param_user_group)
    return render(request, 'maps/add_device.html', {
        'groups': groups.iterator(),
        'dot': dot,
        'existing_devs': existing_devs.iterator(),
        'grp': param_user_group,
        'dot_devices_ids': [dev.pk for dev in Device.objects.filter(dot=dot)]
    })
Beispiel #8
0
 def get_details(self):
     if self.db_instance is None:
         return
     num = safe_int(self.db_instance.snmp_extra)
     if num == 0:
         return
     try:
         status = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.26.%d' % num)
         signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % num)
         distance = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.27.%d' % num)
         mac = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % num)
         if mac is not None:
             mac = ':'.join('%x' % ord(i) for i in mac)
         # uptime = self.get_item('.1.3.6.1.2.1.2.2.1.9.%d' % num)
         signal = safe_int(signal)
         if status is not None and status.isdigit():
             return {
                 'status': status,
                 'signal': signal / 10 if signal != 0 else 0,
                 'name': self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % num),
                 'mac': mac,
                 'distance': int(distance) / 10 if distance.isdigit() else 0
             }
     except EasySNMPTimeoutError as e:
         return {'err': "%s: %s" % (_('ONU not connected'), e)}
Beispiel #9
0
    def get_context_data(self, **kwargs):
        gid = lib.safe_int(self.kwargs.get('gid'))
        if gid < 1:
            return HttpResponseBadRequest('group id is broken')
        group = get_object_or_404(Group, pk=gid)
        if not self.request.user.has_perm('group_app.view_group', group):
            raise PermissionDenied

        context = super(PeoplesListView, self).get_context_data(**kwargs)

        context['streets'] = models.AbonStreet.objects.filter(
            group=gid).only('name')
        context['street_id'] = lib.safe_int(self.request.GET.get('street'))
        context['group'] = group
        return context
Beispiel #10
0
 def get_queryset(self):
     group_id = safe_int(self.kwargs.get('group_id'))
     queryset = Device.objects.filter(group__pk=group_id) \
         .select_related('group') \
         .only('comment', 'mac_addr', 'devtype', 'group', 'pk',
               'ip_address')
     return queryset
Beispiel #11
0
    def get_context_data(self, **kwargs):
        gid = lib.safe_int(self.kwargs.get('gid'))
        if gid < 1:
            return HttpResponseBadRequest('group id is broken')
        group = get_object_or_404(Group, pk=gid)
        if not self.request.user.has_perm('group_app.view_group', group):
            raise PermissionDenied

        context = super(PeoplesListView, self).get_context_data(**kwargs)

        context['streets'] = models.AbonStreet.objects.filter(
            group=gid
        ).only('name')
        context['street_id'] = lib.safe_int(self.request.GET.get('street'))
        context['group'] = group
        return context
Beispiel #12
0
def add_invoice(request, gid: int, uname: str):
    abon = get_object_or_404(models.Abon, username=uname)
    grp = get_object_or_404(Group, pk=gid)

    try:
        if request.method == 'POST':
            curr_amount = lib.safe_int(request.POST.get('curr_amount'))
            comment = request.POST.get('comment')

            newinv = models.InvoiceForPayment()
            newinv.abon = abon
            newinv.amount = curr_amount
            newinv.comment = comment

            if request.POST.get('status') == 'on':
                newinv.status = True

            newinv.author = request.user
            newinv.save()
            messages.success(request, _('Receipt has been created'))
            return redirect('abonapp:abon_debts', gid=gid, uname=uname)

    except (NasNetworkError, NasFailedResult) as e:
        messages.error(request, e)
    except lib.MultipleException as errs:
        for err in errs.err_list:
            messages.error(request, err)
    return render(
        request, 'abonapp/addInvoice.html', {
            'abon': abon,
            'invcount':
            models.InvoiceForPayment.objects.filter(abon=abon).count(),
            'group': grp
        })
Beispiel #13
0
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        act = lib.safe_int(request.GET.get('ACT'))
        self.current_date = timezone.now().strftime("%d.%m.%Y %H:%M")

        if act <= 0:
            return self._bad_ret(-101, 'ACT must be more than 0')
        sign = request.GET.get('SIGN')
        if not sign:
            return self._bad_ret(-101, 'SIGN not passed')
        if not self.check_sign(request.GET, sign.lower()):
            return self._bad_ret(-101, 'Bad sign')

        try:
            if act == 1:
                return self._fetch_user_info(request.GET)
            elif act == 4:
                return self._make_pay(request.GET)
            elif act == 7:
                return self._check_pay(request.GET)
            else:
                return self._bad_ret(-101, 'ACT is not passed')
        except Abon.DoesNotExist:
            return self._bad_ret(-40, 'Account does not exist')
        except DatabaseError:
            return self._bad_ret(-90)
        except AllTimePayLog.DoesNotExist:
            return self._bad_ret(-10)
        except AttributeError:
            return self._bad_ret(-101)
Beispiel #14
0
def add_invoice(request, gid: int, uname: str):
    abon = get_object_or_404(models.Abon, username=uname)
    grp = get_object_or_404(Group, pk=gid)

    try:
        if request.method == 'POST':
            curr_amount = lib.safe_int(request.POST.get('curr_amount'))
            comment = request.POST.get('comment')

            newinv = models.InvoiceForPayment()
            newinv.abon = abon
            newinv.amount = curr_amount
            newinv.comment = comment

            if request.POST.get('status') == 'on':
                newinv.status = True

            newinv.author = request.user
            newinv.save()
            messages.success(request, _('Receipt has been created'))
            return redirect('abonapp:abon_debts', gid=gid, uname=uname)

    except (NasNetworkError, NasFailedResult) as e:
        messages.error(request, e)
    except lib.MultipleException as errs:
        for err in errs.err_list:
            messages.error(request, err)
    return render(request, 'abonapp/addInvoice.html', {
        'abon': abon,
        'invcount': models.InvoiceForPayment.objects.filter(abon=abon).count(),
        'group': grp
    })
Beispiel #15
0
 def get_fibers(self):
     fibers = ({
         'fb_id': fiber_id,
         'fb_name': fiber_name,
         'fb_onu_num': safe_int(self.get_item('.1.3.6.1.4.1.3902.1012.3.13.1.1.13.%d' % int(fiber_id)))
     } for fiber_name, fiber_id in self.get_list_keyval('.1.3.6.1.4.1.3902.1012.3.13.1.1.1'))
     return fibers
Beispiel #16
0
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        act = lib.safe_int(request.GET.get('ACT'))
        self.current_date = timezone.now().strftime("%d.%m.%Y %H:%M")

        if act <= 0:
            return self._bad_ret(-101, 'ACT must be more than 0')
        sign = request.GET.get('SIGN')
        if not sign:
            return self._bad_ret(-101, 'SIGN not passed')
        if not self.check_sign(request.GET, sign.lower()):
            return self._bad_ret(-101, 'Bad sign')

        try:
            if act == 1:
                return self._fetch_user_info(request.GET)
            elif act == 4:
                return self._make_pay(request.GET)
            elif act == 7:
                return self._check_pay(request.GET)
            else:
                return self._bad_ret(-101, 'ACT is not passed')
        except Abon.DoesNotExist:
            return self._bad_ret(-40, 'Account does not exist')
        except DatabaseError:
            return self._bad_ret(-90)
        except AllTimePayLog.DoesNotExist:
            return self._bad_ret(-10)
        except AttributeError:
            return self._bad_ret(-101)
Beispiel #17
0
    def form_valid(self, form):
        # check if new task with picked user already exists
        if form.cleaned_data['state'] == 'S' and self.kwargs.get('task_id') is None:
            exists_task = Task.objects.filter(abon=form.cleaned_data['abon'], state='S')
            if exists_task.exists():
                messages.info(self.request, _('New task with this user already exists.'
                                              ' You are redirected to it.'))
                return redirect('taskapp:edit', exists_task.first().pk)

        try:
            self.object = form.save()
            if self.object.author is None:
                self.object.author = self.request.user
                self.object.save(update_fields=('author',))
            task_id = safe_int(self.kwargs.get('task_id', 0))
            if task_id == 0:
                log_text = _('Task has successfully created')
            else:
                log_text = _('Task has changed successfully')
            messages.add_message(self.request, messages.SUCCESS, log_text)
            self.object.send_notification()
        except MultipleException as e:
            for err in e.err_list:
                messages.add_message(self.request, messages.WARNING, err)
        except TaskException as e:
            messages.add_message(self.request, messages.ERROR, e)
        return FormMixin.form_valid(self, form)
Beispiel #18
0
 def get_fibers(self):
     fibers = ({
         'fb_id': fiber_id,
         'fb_name': fiber_name,
         'fb_onu_num': safe_int(self.get_item('.1.3.6.1.4.1.3902.1012.3.13.1.1.13.%d' % int(fiber_id)))
     } for fiber_name, fiber_id in self.get_list_keyval('.1.3.6.1.4.1.3902.1012.3.13.1.1.1'))
     return fibers
Beispiel #19
0
    def get_details(self) -> Optional[Dict]:
        if self.db_instance is None:
            return
        snmp_extra = self.db_instance.snmp_extra
        if not snmp_extra:
            return
        try:
            fiber_num, onu_num = snmp_extra.split('.')
            fiber_num, onu_num = int(fiber_num), int(onu_num)
            fiber_addr = '%d.%d' % (fiber_num, onu_num)
            status = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.1.%s.1' % fiber_addr)
            signal = safe_int(self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%s.1' % fiber_addr))
            distance = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.18.%s.1' % fiber_addr)
            ip_addr = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.16.1.1.10.%s' % fiber_addr)
            vlans = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.15.100.1.1.7.%s.1.1' % fiber_addr)
            int_name = self.get_item('.1.3.6.1.4.1.3902.1012.3.28.1.1.3.%s' % fiber_addr)
            onu_type = self.get_item('.1.3.6.1.4.1.3902.1012.3.28.1.1.1.%s' % fiber_addr)

            sn = self.get_item('.1.3.6.1.4.1.3902.1012.3.28.1.1.5.%s' % fiber_addr)
            if sn is not None:
                sn = 'ZTEG%s' % ''.join('%.2X' % ord(x) for x in sn[-4:])

            return {
                'status': status,
                'signal': conv_zte_signal(signal),
                'distance': safe_float(distance) / 10,
                'ip_addr': ip_addr,
                'vlans': vlans,
                'serial': sn,
                'int_name': int_name,
                'onu_type': onu_type,
                'mac': sn_to_mac(sn)
            }
        except IndexError:
            pass
Beispiel #20
0
    def dispatch(self, request, *args, **kwargs):
        task_id = safe_int(self.kwargs.get('task_id', 0))
        if task_id == 0:
            if not request.user.has_perm('taskapp.add_task'):
                raise PermissionDenied
        else:
            if not request.user.has_perm('taskapp.change_task'):
                raise PermissionDenied

        # check if new task with user already exists
        uname = request.GET.get('uname')
        if uname and self.kwargs.get('task_id') is None:
            exists_task = Task.objects.filter(abon__username=uname, state='S')
            if exists_task.exists():
                messages.info(
                    request,
                    _('New task with this user already exists.'
                      ' You are redirected to it.'))
                return redirect('taskapp:edit', exists_task.first().pk)

        try:
            return super(TaskUpdateView,
                         self).dispatch(request, *args, **kwargs)
        except TaskException as e:
            messages.error(request, e)
        return httpresponse_to_referrer(request)
Beispiel #21
0
    def form_valid(self, form):
        # check if new task with picked user already exists
        if form.cleaned_data['state'] == 'S' and self.kwargs.get(
                'task_id') is None:
            exists_task = Task.objects.filter(abon=form.cleaned_data['abon'],
                                              state='S')
            if exists_task.exists():
                messages.info(
                    self.request,
                    _('New task with this user already exists.'
                      ' You are redirected to it.'))
                return redirect('taskapp:edit', exists_task.first().pk)

        try:
            self.object = form.save()
            if self.object.author is None:
                self.object.author = self.request.user
                self.object.save(update_fields=('author', ))
            task_id = safe_int(self.kwargs.get('task_id', 0))
            if task_id == 0:
                log_text = _('Task has successfully created')
            else:
                log_text = _('Task has changed successfully')
            messages.add_message(self.request, messages.SUCCESS, log_text)
            self.object.send_notification()
        except MultipleException as e:
            for err in e.err_list:
                messages.add_message(self.request, messages.WARNING, err)
        except TaskException as e:
            messages.add_message(self.request, messages.ERROR, e)
        return FormMixin.form_valid(self, form)
Beispiel #22
0
def edit_tarif(request, tarif_id=0):
    tarif_id = lib.safe_int(tarif_id)

    if tarif_id == 0:
        if not request.user.has_perm('tariff_app.add_tariff'):
            raise PermissionDenied
        tarif = None
    else:
        if not request.user.has_perm('tariff_app.change_tariff'):
            raise PermissionDenied
        tarif = get_object_or_404(Tariff, pk=tarif_id)

    if request.method == 'POST':
        frm = forms.TariffForm(request.POST, instance=tarif)
        if frm.is_valid():
            service = frm.save()
            if tarif is None:
                request.user.log(request.META, 'csrv', '"%(title)s", "%(descr)s", %(amount).2f' % {
                    'title': service.title or '-',
                    'descr': service.descr or '-',
                    'amount': service.amount or 0.0
                })
            messages.success(request, _('Service has been saved'))
            return redirect('tarifs:edit', tarif_id=service.pk)
        else:
            messages.warning(request, _('Some fields were filled incorrect, please try again'))
    else:
        frm = forms.TariffForm(instance=tarif)

    return render(request, 'tariff_app/editTarif.html', {
        'form': frm,
        'tarif_id': tarif_id
    })
Beispiel #23
0
 def get_queryset(self):
     group_id = safe_int(self.kwargs.get('group_id'))
     queryset = Device.objects.filter(group__pk=group_id) \
         .select_related('group') \
         .only('comment', 'mac_addr', 'devtype', 'group', 'pk',
               'ip_address')
     return queryset
Beispiel #24
0
 def get_queryset(self):
     street_id = lib.safe_int(self.request.GET.get('street'))
     gid = lib.safe_int(self.kwargs.get('gid'))
     peoples_list = models.Abon.objects.filter(group__pk=gid)
     if street_id > 0:
         peoples_list = peoples_list.filter(street=street_id)
     peoples_list = peoples_list.select_related(
         'group', 'street', 'current_tariff__tariff',
         'statcache').only('group', 'street', 'fio', 'birth_day', 'street',
                           'house', 'telephone', 'ballance', 'markers',
                           'username', 'is_active', 'current_tariff',
                           'ip_address')
     ordering = self.get_ordering()
     if ordering and isinstance(ordering, str):
         ordering = (ordering, )
         peoples_list = peoples_list.order_by(*ordering)
     return peoples_list
Beispiel #25
0
 def update_status(**kwargs) -> JSONType:
     msg_id = safe_int(kwargs.get('mid'))
     if msg_id != 0:
         status = kwargs.get('status')
         update_count = SMSOut.objects.filter(pk=msg_id).update(
             status=status)
         return {'text': 'Status updated', 'update_count': update_count}
     return {'text': 'Bad mid parameter'}
Beispiel #26
0
 def get_queryset(self):
     street_id = lib.safe_int(self.request.GET.get('street'))
     gid = lib.safe_int(self.kwargs.get('gid'))
     peoples_list = models.Abon.objects.filter(group__pk=gid)
     if street_id > 0:
         peoples_list = peoples_list.filter(street=street_id)
     peoples_list = peoples_list.select_related(
         'group', 'street', 'current_tariff__tariff', 'statcache'
     ).only(
         'group', 'street', 'fio', 'birth_day',
         'street', 'house', 'telephone', 'ballance', 'markers',
         'username', 'is_active', 'current_tariff', 'ip_address'
     )
     ordering = self.get_ordering()
     if ordering and isinstance(ordering, str):
         ordering = (ordering,)
         peoples_list = peoples_list.order_by(*ordering)
     return peoples_list
Beispiel #27
0
 def _bad_ret(err_id, err_description=None):
     now = timezone.now()
     r = {
         'status_code': lib.safe_int(err_id),
         'time_stamp': now.strftime("%d.%m.%Y %H:%M")
     }
     if err_description:
         r.update({'description': err_description})
     return r
Beispiel #28
0
 def _bad_ret(err_id, err_description=None):
     now = timezone.now()
     r = {
         'status_code': lib.safe_int(err_id),
         'time_stamp': now.strftime("%d.%m.%Y %H:%M")
     }
     if err_description:
         r.update({'description': err_description})
     return r
Beispiel #29
0
def tel_del(request, gid: int, uname):
    try:
        tid = lib.safe_int(request.GET.get('tid'))
        tel = models.AdditionalTelephone.objects.get(pk=tid)
        tel.delete()
        messages.success(request,
                         _('Additional telephone successfully deleted'))
    except models.AdditionalTelephone.DoesNotExist:
        messages.error(request, _('Telephone not found'))
    return redirect('abonapp:abon_home', gid, uname)
Beispiel #30
0
def tel_del(request, gid: int, uname):
    try:
        tid = lib.safe_int(request.GET.get('tid'))
        tel = models.AdditionalTelephone.objects.get(pk=tid)
        tel.delete()
        messages.success(request,
                         _('Additional telephone successfully deleted'))
    except models.AdditionalTelephone.DoesNotExist:
        messages.error(request, _('Telephone not found'))
    return redirect('abonapp:abon_home', gid, uname)
Beispiel #31
0
def to_single_dev(request):
    dot_id = safe_int(request.GET.get('dot_id'))
    if dot_id <= 0:
        return HttpResponseBadRequest
    dev = Device.objects.filter(dot__id=dot_id).first()
    if dev is None:
        messages.error(request, gettext('Devices is not found on the dot'))
        return redirect('mapapp:edit_dot', dot_id)
    grp_id = dev.group.pk
    return redirect('devapp:view', grp_id, dev.pk)
Beispiel #32
0
def to_single_dev(request):
    dot_id = safe_int(request.GET.get('dot_id'))
    if dot_id <= 0:
        return HttpResponseBadRequest
    dev = Device.objects.filter(dot__id=dot_id).first()
    if dev is None:
        messages.error(request, gettext('Devices is not found on the dot'))
        return redirect('mapapp:edit_dot', dot_id)
    grp_id = dev.group.pk
    return redirect('devapp:view', grp_id, dev.pk)
Beispiel #33
0
 def get_object(self, queryset=None):
     task_id = safe_int(self.kwargs.get('task_id'))
     if task_id == 0:
         uname = self.request.GET.get('uname')
         if uname:
             self.selected_abon = Abon.objects.get(username=uname)
         return
     else:
         task = get_object_or_404(Task, pk=task_id)
         self.selected_abon = task.abon
         return task
Beispiel #34
0
    def get_ports_on_fiber(self, fiber_num: int) -> Iterable:

        onu_types = self.get_list_keyval('.1.3.6.1.4.1.3902.1012.3.28.1.1.1.%d' % fiber_num)
        onu_ports = self.get_list('.1.3.6.1.4.1.3902.1012.3.28.1.1.2.%d' % fiber_num)
        onu_signals = self.get_list('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%d' % fiber_num)

        # Real sn in last 3 octets
        onu_sns = self.get_list('.1.3.6.1.4.1.3902.1012.3.28.1.1.5.%d' % fiber_num)
        onu_prefixs = self.get_list('.1.3.6.1.4.1.3902.1012.3.50.11.2.1.1.%d' % fiber_num)
        onu_list = ({
            'onu_type': onu_type_num[0],
            'onu_port': onu_port,
            'onu_signal': conv_signal(safe_int(onu_signal)),
            'onu_sn': onu_prefix + ''.join('%.2X' % ord(i) for i in onu_sn[-4:]),  # Real sn in last 4 octets,
            'snmp_extra': "%d.%d" % (fiber_num, safe_int(onu_type_num[1])),
        } for onu_type_num, onu_port, onu_signal, onu_sn, onu_prefix in zip(
            onu_types, onu_ports, onu_signals, onu_sns, onu_prefixs
        ))

        return onu_list
Beispiel #35
0
 def get_object(self, queryset=None):
     task_id = safe_int(self.kwargs.get('task_id'))
     if task_id == 0:
         uname = self.request.GET.get('uname')
         if uname:
             self.selected_abon = Abon.objects.get(username=uname)
         return
     else:
         task = get_object_or_404(Task, pk=task_id)
         self.selected_abon = task.abon
         return task
Beispiel #36
0
def zte_port_view_uncfg(request, group_id: str, device_id: str, fiber_id: str):
    fiber_id = safe_int(fiber_id)
    zte_olt_device = get_object_or_404(Device, id=device_id)
    manager = zte_olt_device.get_manager_object()
    onu_list = manager.get_units_unregistered(fiber_id)
    return render(request,
                  'devapp/custom_dev_page/olt_ztec320_units_uncfg.html', {
                      'onu_list': onu_list,
                      'dev': zte_olt_device,
                      'grp': group_id
                  })
Beispiel #37
0
 def check_sign(self, data: dict, sign: str) -> bool:
     act = lib.safe_int(data.get('ACT'))
     pay_account = data.get('PAY_ACCOUNT')
     serv_id = data.get('SERVICE_ID')
     pay_id = data.get('PAY_ID')
     md = md5()
     s = '_'.join((str(act), pay_account or '', serv_id or '', pay_id
                   or '', self.object.secret))
     md.update(bytes(s, 'utf-8'))
     our_sign = md.hexdigest()
     return our_sign == sign
Beispiel #38
0
def zte_port_view_uncfg(request, group_id: str, device_id: str, fiber_id: str):
    fiber_id = safe_int(fiber_id)
    zte_olt_device = get_object_or_404(Device, id=device_id)
    manager = zte_olt_device.get_manager_object()
    onu_list = manager.get_units_unregistered(fiber_id)
    return render(request,
                  'devapp/custom_dev_page/olt_ztec320_units_uncfg.html', {
                      'onu_list': onu_list,
                      'dev': zte_olt_device,
                      'grp': group_id
                  })
Beispiel #39
0
def save_user_dev_port(request, gid: int, uname):
    if request.method != 'POST':
        messages.error(request, _('Method is not POST'))
        return redirect('abonapp:abon_home', gid, uname)
    user_port = lib.safe_int(request.POST.get('user_port'))
    is_dynamic_ip = request.POST.get('is_dynamic_ip')
    is_dynamic_ip = True if is_dynamic_ip == 'on' else False
    try:
        abon = models.Abon.objects.get(username=uname)
        if user_port == 0:
            port = None
        else:
            port = DevPort.objects.get(pk=user_port)
            if abon.device is not None:
                try:
                    other_abon = models.Abon.objects.get(
                        device=abon.device,
                        dev_port=port
                    )
                    if other_abon != abon:
                        user_url = resolve_url(
                            'abonapp:abon_home',
                            other_abon.group.id,
                            other_abon.username
                        )
                        messages.error(
                            request, _("<a href='%(user_url)s'>%(user_name)s</a> already pinned to this port on this device") % {
                                'user_url': user_url,
                                'user_name': other_abon.get_full_name()
                            }
                        )
                        return redirect('abonapp:abon_home', gid, uname)
                except models.Abon.DoesNotExist:
                    pass
                except models.Abon.MultipleObjectsReturned:
                    messages.error(request,
                                   _('Multiple users on the same device port'))
                    return redirect('devapp:view', abon.device.group.pk,
                                    abon.device.pk)

        abon.dev_port = port
        if abon.is_dynamic_ip != is_dynamic_ip:
            abon.is_dynamic_ip = is_dynamic_ip
            abon.save(update_fields=('dev_port', 'is_dynamic_ip'))
        else:
            abon.save(update_fields=('dev_port',))
        messages.success(request, _('User port has been saved'))
    except DevPort.DoesNotExist:
        messages.error(request, _('Selected port does not exist'))
    except models.Abon.DoesNotExist:
        messages.error(request, _('User does not exist'))
    return redirect('abonapp:abon_home', gid, uname)
Beispiel #40
0
 def get_ports(self):
     interfaces_ids = self.get_list('.1.3.6.1.2.1.17.1.4.1.2')
     if interfaces_ids is None:
         raise DeviceImplementationError('Switch returned null')
     for i, n in enumerate(interfaces_ids):
         n = int(n)
         speed = self.get_item('.1.3.6.1.2.1.2.2.1.5.%d' % n)
         oper_status = safe_int(self.get_item('.1.3.6.1.2.1.2.2.1.7.%d' % n))
         oper_status = True if oper_status == 1 else False
         link_status = safe_int(self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % n))
         link_status = True if link_status == 1 else False
         ep = EltexPort(
             self,
             num=i+1,
             snmp_num=n,
             name=self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % n),         # name
             status=oper_status,                                        # status
             mac='', # self.get_item('.1.3.6.1.2.1.2.2.1.6.%d' % n),    # mac
             speed=0 if not link_status else safe_int(speed)            # speed
         )
         ep.writable = True
         yield ep
Beispiel #41
0
 def get_ports(self):
     interfaces_ids = self.get_list('.1.3.6.1.2.1.17.1.4.1.2')
     if interfaces_ids is None:
         raise DeviceImplementationError('Switch returned null')
     for i, n in enumerate(interfaces_ids):
         n = int(n)
         speed = self.get_item('.1.3.6.1.2.1.2.2.1.5.%d' % n)
         oper_status = safe_int(self.get_item('.1.3.6.1.2.1.2.2.1.7.%d' % n))
         oper_status = True if oper_status == 1 else False
         link_status = safe_int(self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % n))
         link_status = True if link_status == 1 else False
         ep = EltexPort(
             self,
             num=i+1,
             snmp_num=n,
             name=self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % n),         # name
             status=oper_status,                                        # status
             mac='', # self.get_item('.1.3.6.1.2.1.2.2.1.6.%d' % n),    # mac
             speed=0 if not link_status else safe_int(speed)            # speed
         )
         ep.writable = True
         yield ep
Beispiel #42
0
 def check_sign(self, data: dict, sign: str) -> bool:
     act = safe_int(data.get('ACT'))
     pay_account = data.get('PAY_ACCOUNT')
     serv_id = data.get('SERVICE_ID')
     pay_id = data.get('PAY_ID')
     md = md5()
     s = '_'.join(
         (str(act), pay_account or '', serv_id or '',
          pay_id, self.object.secret)
     )
     md.update(bytes(s, 'utf-8'))
     our_sign = md.hexdigest()
     return our_sign == sign
Beispiel #43
0
 def dispatch(self, request, *args, **kwargs):
     task_id = safe_int(self.kwargs.get('task_id', 0))
     if task_id == 0:
         if not request.user.has_perm('taskapp.add_task'):
             raise PermissionDenied
     else:
         if not request.user.has_perm('taskapp.change_task'):
             raise PermissionDenied
     try:
         return super(TaskUpdateView,
                      self).dispatch(request, *args, **kwargs)
     except TaskException as e:
         messages.error(request, e)
     return httpresponse_to_referrer(request)
Beispiel #44
0
def save_user_dev_port(request, gid: int, uname):
    if request.method != 'POST':
        messages.error(request, _('Method is not POST'))
        return redirect('abonapp:abon_home', gid, uname)
    user_port = lib.safe_int(request.POST.get('user_port'))
    is_dynamic_ip = request.POST.get('is_dynamic_ip')
    is_dynamic_ip = True if is_dynamic_ip == 'on' else False
    try:
        abon = models.Abon.objects.get(username=uname)
        if user_port == 0:
            port = None
        else:
            port = DevPort.objects.get(pk=user_port)
            if abon.device is not None:
                try:
                    other_abon = models.Abon.objects.get(device=abon.device,
                                                         dev_port=port)
                    if other_abon != abon:
                        user_url = resolve_url('abonapp:abon_home',
                                               other_abon.group.id,
                                               other_abon.username)
                        messages.error(
                            request,
                            _("<a href='%(user_url)s'>%(user_name)s</a> already pinned to this port on this device"
                              ) % {
                                  'user_url': user_url,
                                  'user_name': other_abon.get_full_name()
                              })
                        return redirect('abonapp:abon_home', gid, uname)
                except models.Abon.DoesNotExist:
                    pass
                except models.Abon.MultipleObjectsReturned:
                    messages.error(request,
                                   _('Multiple users on the same device port'))
                    return redirect('devapp:view', abon.device.group.pk,
                                    abon.device.pk)

        abon.dev_port = port
        if abon.is_dynamic_ip != is_dynamic_ip:
            abon.is_dynamic_ip = is_dynamic_ip
            abon.save(update_fields=('dev_port', 'is_dynamic_ip'))
        else:
            abon.save(update_fields=('dev_port', ))
        messages.success(request, _('User port has been saved'))
    except DevPort.DoesNotExist:
        messages.error(request, _('Selected port does not exist'))
    except models.Abon.DoesNotExist:
        messages.error(request, _('User does not exist'))
    return redirect('abonapp:abon_home', gid, uname)
Beispiel #45
0
 def get_ports(self) -> ListOrError:
     interfaces_count = safe_int(self.get_item('.1.3.6.1.2.1.2.1.0'))
     nams = tuple(self.get_list('.1.3.6.1.4.1.171.10.134.2.1.1.100.2.1.3'))
     stats = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.7'))
     macs = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.6'))
     speeds = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.5'))
     try:
         for n in range(interfaces_count):
             status = True if int(stats[n]) == 1 else False
             yield DLinkPort(
                 num=n + 1,
                 name=nams[n] if len(nams) > 0 else '',
                 status=status,
                 mac=macs[n] if len(macs) > 0 else _('does not fetch the mac'),
                 speed=int(speeds[n]) if len(speeds) > 0 else 0,
                 snmp_worker=self)
     except IndexError:
         return DeviceImplementationError('Dlink port index error')
Beispiel #46
0
 def get_ports(self) -> ListOrError:
     interfaces_count = safe_int(self.get_item('.1.3.6.1.2.1.2.1.0'))
     nams = tuple(self.get_list('.1.3.6.1.4.1.171.10.134.2.1.1.100.2.1.3'))
     stats = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.7'))
     macs = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.6'))
     speeds = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.5'))
     try:
         for n in range(interfaces_count):
             status = True if int(stats[n]) == 1 else False
             yield DLinkPort(
                 num=n + 1,
                 name=nams[n] if len(nams) > 0 else '',
                 status=status,
                 mac=macs[n] if len(macs) > 0 else _('does not fetch the mac'),
                 speed=int(speeds[n]) if len(speeds) > 0 else 0,
                 snmp_worker=self)
     except IndexError:
         return DeviceImplementationError('Dlink port index error')
Beispiel #47
0
 def form_valid(self, form):
     try:
         self.object = form.save()
         if self.object.author is None:
             self.object.author = self.request.user
             self.object.save(update_fields=('author', ))
         task_id = safe_int(self.kwargs.get('task_id', 0))
         if task_id == 0:
             log_text = _('Task has successfully created')
         else:
             log_text = _('Task has changed successfully')
         messages.add_message(self.request, messages.SUCCESS, log_text)
         self.object.send_notification()
     except MultipleException as e:
         for err in e.err_list:
             messages.add_message(self.request, messages.WARNING, err)
     except TaskException as e:
         messages.add_message(self.request, messages.ERROR, e)
     return FormMixin.form_valid(self, form)
Beispiel #48
0
def attach_nas(request, gid):
    if request.method == 'POST':
        gateway_id = lib.safe_int(request.POST.get('gateway'))
        if gateway_id:
            nas = get_object_or_404(NASModel, pk=gateway_id)
            customers = models.Abon.objects.filter(group__id=gid)
            if customers.exists():
                customers.update(nas=nas)
                messages.success(
                    request,
                    _('Network access server for users in this '
                      'group, has been updated'))
                return redirect('abonapp:group_list')
            else:
                messages.warning(request, _('Users not found'))
        else:
            messages.error(request, _('You must select gateway'))
    return render(request, 'abonapp/modal_attach_nas.html', {
        'gid': gid,
        'nas_list': NASModel.objects.all().iterator()
    })
Beispiel #49
0
def profile_show(request, uid=0):
    uid = lib.safe_int(uid)

    if uid == 0:
        return redirect('acc_app:other_profile', uid=request.user.id)

    usr = get_object_or_404(UserProfile, id=uid)
    if request.user != usr and not request.user.has_perm('accounts_app.view_userprofile', usr):
        raise PermissionDenied
    if request.method == 'POST':
        usr.username = request.POST.get('username')
        usr.fio = request.POST.get('fio')
        usr.telephone = request.POST.get('telephone')
        usr.is_active = request.POST.get('stat')
        usr.is_admin = request.POST.get('is_admin')
        usr.save()
        return redirect('acc_app:other_profile', uid=uid)

    return render(request, 'accounts/index.html', {
        'uid': uid,
        'userprofile': usr
    })
Beispiel #50
0
def attach_nas(request, gid):
    if request.method == 'POST':
        gateway_id = lib.safe_int(request.POST.get('gateway'))
        if gateway_id:
            nas = get_object_or_404(NASModel, pk=gateway_id)
            customers = models.Abon.objects.filter(group__id=gid)
            if customers.exists():
                customers.update(nas=nas)
                messages.success(
                    request,
                    _('Network access server for users in this '
                      'group, has been updated')
                )
                return redirect('abonapp:group_list')
            else:
                messages.warning(request, _('Users not found'))
        else:
            messages.error(request, _('You must select gateway'))
    return render(request, 'abonapp/modal_attach_nas.html', {
        'gid': gid,
        'nas_list': NASModel.objects.all().iterator()
    })
Beispiel #51
0
    def dispatch(self, request, *args, **kwargs):
        task_id = safe_int(self.kwargs.get('task_id', 0))
        if task_id == 0:
            if not request.user.has_perm('taskapp.add_task'):
                raise PermissionDenied
        else:
            if not request.user.has_perm('taskapp.change_task'):
                raise PermissionDenied

        # check if new task with user already exists
        uname = request.GET.get('uname')
        if uname and self.kwargs.get('task_id') is None:
            exists_task = Task.objects.filter(abon__username=uname, state='S')
            if exists_task.exists():
                messages.info(request, _('New task with this user already exists.'
                                         ' You are redirected to it.'))
                return redirect('taskapp:edit', exists_task.first().pk)

        try:
            return super(TaskUpdateView, self).dispatch(request, *args, **kwargs)
        except TaskException as e:
            messages.error(request, e)
        return httpresponse_to_referrer(request)
Beispiel #52
0
 def uptime(self):
     up_timestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0'))
     tm = RuTimedelta(seconds=up_timestamp / 100)
     return tm
Beispiel #53
0
 def get_context_data(self, **kwargs):
     group_id = safe_int(self.kwargs.get('group_id'))
     context = super(DevicesListView, self).get_context_data(**kwargs)
     context['group'] = get_object_or_404(Group, pk=group_id)
     return context
Beispiel #54
0
 def uptime(self):
     up_timestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0'))
     tm = RuTimedelta(timedelta(seconds=up_timestamp / 100)) or RuTimedelta(timedelta())
     return tm
Beispiel #55
0
 def get_success_url(self):
     task_id = safe_int(self.kwargs.get('task_id'))
     if task_id == 0:
         return resolve_url('taskapp:own_tasks')
     else:
         return resolve_url('taskapp:edit', task_id)
Beispiel #56
0
 def get_success_url(self):
     task_id = safe_int(self.kwargs.get('task_id'))
     if task_id == 0:
         return resolve_url('taskapp:own_tasks')
     else:
         return resolve_url('taskapp:edit', task_id)