35275-vm/core/views.py
Flatlogic Bot 5b806425d9 1.3
2025-10-28 05:18:37 +00:00

73 lines
3.0 KiB
Python

from django.shortcuts import render, redirect
from .models import Application, Vulnerability
from .forms import UploadFileForm, VulnerabilitySearchForm
import csv
import io
import requests
def dashboard(request):
# Placeholder data
total_apps = Application.objects.count()
total_vulns = Vulnerability.objects.count()
critical_vulns = Vulnerability.objects.filter(severity='Critical').count()
new_vulns = Vulnerability.objects.filter(status='New').count()
applications = Application.objects.all()
context = {
'total_applications': total_apps,
'total_vulnerabilities': total_vulns,
'critical_vulnerabilities': critical_vulns,
'new_vulnerabilities': new_vulns,
'applications': applications,
"project_name": "Vulnerability Scanner",
}
return render(request, "core/index.html", context)
def upload_inventory(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
try:
csv_file = request.FILES['file']
decoded_file = io.TextIOWrapper(csv_file.file, encoding='utf-8', newline='', errors='ignore')
reader = csv.reader(decoded_file)
# Skip header row
next(reader)
for row in reader:
if row and len(row) == 3:
print(f"Processing row: {row}")
Application.objects.create(
name=row[0],
version=row[1],
vendor=row[2],
)
return redirect('dashboard')
except Exception as e:
print(f"An error occurred: {e}")
form.add_error(None, f"An error occurred: {e}")
else:
form = UploadFileForm()
return render(request, 'core/upload_inventory.html', {'form': form})
def vulnerability_search(request):
form = VulnerabilitySearchForm()
results = []
if request.method == 'POST':
form = VulnerabilitySearchForm(request.POST)
if form.is_valid():
application_name = form.cleaned_data['application_name']
# Basic search using NVD API
url = f"https://services.nvd.nist.gov/rest/json/cves/1.0?keyword={application_name}"
try:
response = requests.get(url)
data = response.json()
if 'result' in data:
for cve_item in data['result']['CVE_Items']:
cve_id = cve_item['cve']['CVE_data_meta']['ID']
description = cve_item['cve']['description']['description_data'][0]['value']
results.append({'cve_id': cve_id, 'description': description})
except requests.exceptions.RequestException as e:
form.add_error(None, f"Error fetching data from NVD: {e}")
return render(request, 'core/vulnerability_search.html', {'form': form, 'results': results})