def query_view(request): """ Allow the user to search for an AS or prefix, and show all published ROA information. """ if request.method == 'POST': form = forms.SearchForm(request.POST, request.FILES) if form.is_valid(): certs = None roas = None addr = form.cleaned_data.get('addr') asn = form.cleaned_data.get('asn') if addr: family, r = misc.parse_ipaddr(addr) prefixes = models.ROAPrefix.objects.filter(family=family, prefix=str(r.min)) prefix_list = [] for pfx in prefixes: for roa in pfx.roas.all(): prefix_list.append((pfx, roa)) elif asn: r = resource_range_as.parse_str(asn) roas = models.ROA.objects.filter(asid__gte=r.min, asid__lte=r.max) # display the results sorted by prefix prefix_list = [] for roa in roas: for pfx in roa.prefixes.all(): if pfx.family == 4: addr = v4addr(pfx.prefix.encode()) elif pfx.family == 6: addr = v6addr(pfx.prefix.encode()) prefix_list.append((pfx, roa, addr)) prefix_list.sort(cmp=cmp_prefix) return render('cacheview/query_result.html', { 'object_list': prefix_list }, request) else: form = forms.SearchForm() return render('cacheview/search_form.html', { 'form':form, 'search_type': 'ROA ' }, request)
def search_view(request): if request.method == 'POST': form = forms.SearchForm(request.POST, request.FILES) if form.is_valid(): certs = None roas = None addr = form.cleaned_data.get('addr') asn = form.cleaned_data.get('asn') if addr: family, r = misc.parse_ipaddr(addr) certs = models.Cert.objects.filter(addresses__family=family, addresses__min=str(r.min), addresses__max=str(r.max)) roas = models.ROA.objects.filter(prefixes__family=family, prefixes__prefix=str(r.min)) elif asn: r = resource_range_as.parse_str(asn) certs = models.Cert.objects.filter(asns__min__gte=r.min, asns__max__lte=r.max) roas = models.ROA.objects.filter(asid__gte=r.min, asid__lte=r.max) return render('cacheview/search_result.html', { 'certs': certs, 'roas': roas }, request) else: form = forms.SearchForm() return render('cacheview/search_form.html', { 'form': form, 'search_type': 'Resource' }, request)