def scan_site(request: HttpRequest, site_id: Union[int, None] = None) -> HttpResponse:
"""Schedule the scan of a site."""
if site_id:
site = get_object_or_404(
Site.objects.annotate_most_recent_scan_start() \
.annotate_most_recent_scan_end_or_null(),
pk=site_id)
else:
# no site_id supplied
form = SingleSiteForm(request.POST)
if form.is_valid():
site, created = Site.objects.annotate_most_recent_scan_start() \
.annotate_most_recent_scan_end_or_null().get_or_create(
url=form.cleaned_data.get('url'))
if created:
site.last_scan__end_or_null = None
site.last_scan__start = None
else:
return render(request, 'frontend/create_site.html', {
'form': form,
})
status_code = site.scan()
if status_code == Site.SCAN_OK:
if not site_id: # if the site is new we want to show the dog
return redirect(reverse('frontend:scan_site_created', args=(site.pk,)))
else:
num_scanning_sites = Scan.objects.filter(end__isnull=True).count()
messages.success(request,
_("A scan of the site has been scheduled. "+ \
"The total number of sites in the scanning queue "+ \
"is %i (including yours)." % num_scanning_sites))
return redirect(reverse('frontend:view_site', args=(site.pk,)))
elif status_code == Site.SCAN_COOLDOWN:
messages.warning(request,
_('The site is already scheduled for scanning or it has been scanned recently. No scan was scheduled.'))
elif status_code == Site.SCAN_BLACKLISTED:
messages.warning(request,
_('The operator of this website requested to be blacklisted, scanning this website is not possible, sorry.'))
return redirect(reverse('frontend:view_site', args=(site.pk,)))
评论列表
文章目录