def openvas_download(request, id): scanner = VulnscanManager("localhost", openvas_username, openvas_password) task = openvas_requests.objects.get(id=id) if task.state == "Finished": result = openvas_results.objects.get(id=task.id) print(result.report) # Retornant pdf report = scanner.get_report_pdf(str(result.report)) nomArxiu = "Report_" + task.name.replace( " ", "-") + "_" + datetime.strftime(result.finish_date, "%Y%m%d%H%M") + ".pdf" #print("Report:" + report) reportXML = ElementTree.tostring(report.find("report"), encoding='utf-8', method='xml') print("ReportXML:" + str(reportXML).split(">")[-2].split("<")[0]) #fullReport = ElementTree.fromstring(reportXML) #response = HttpResponse(base64.b64decode(fullReport.find("in_use").tail), content_type='application/pdf') response = HttpResponse(base64.b64decode( str(reportXML).split(">")[-2].split("<")[0]), content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=' + nomArxiu return response else: context = crearContextBase(request) context.update({'openvas_tasks': "active"}) results = "fail" context.update({'task': task, 'results': results}) return render(request, 'openvas_task.html', context)
def put(self, request, id, format=None): task = openvas_requests.objects.get(id=id) print(task.id) e = request.data['state'] task.state = e task.save() if e == "Finished": result = openvas_results.objects.get(id=id) # Parsejar XML per treure High Medium i Low scanner = VulnscanManager("localhost", openvas_username, openvas_password) auxReport = scanner.get_report_xml(str(result.report)) auxReportString = ElementTree.tostring( auxReport.find("report").find("report").find("results"), encoding='utf-8', method='xml') auxReportXML = ElementTree.fromstring(auxReportString) print(auxReportString) high = 0 medium = 0 low = 0 log = 0 for v in auxReportXML: print(str(v.find("threat").text)) if v.find("threat").text == "High": high += 1 elif v.find("threat").text == "Medium": medium += 1 elif v.find("threat").text == "Low": low += 1 elif v.find("threat").text == "Log": log += 1 parsed = "High: " + str(high) + " / Medium: " + str( medium) + " / Low: " + str(low) + " / Log: " + str(log) print(parsed) # Inserting finish date and results result.finish_date = timezone.now() result.output = parsed result.save() if task.mail: report = scanner.get_report_pdf(str(result.report)) fileName = "Report_" + task.name + "_" + datetime.strftime( result.finish_date, "%Y%m%d%H%M") + ".pdf" reportXML = ElementTree.tostring(report.find("report"), encoding='utf-8', method='xml') fullReport = ElementTree.fromstring(reportXML) pdf = base64.b64decode(fullReport.find("in_use").tail) username = User.objects.get(id=task.user.id).username print("Username: "******"*****@*****.**", To=[task.mail], Subject=u'[AAPT] OpenVAS Report') message.Body = body.encode('utf-8') sender = Mailer('localhost') message.attach(filename=fileName, content=pdf, mimetype="application/pdf") sender.send(message) return Response(status=204)