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 }
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)}
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
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 }
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
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)] })
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)] })
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
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
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
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 })
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)
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 })
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
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)
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
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)
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)
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 })
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
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'}
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
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
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)
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)
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
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
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 })
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
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)
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
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
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)
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)
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')
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)
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() })
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 })
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() })
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)
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
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
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
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)