41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
from django.shortcuts import render, redirect
|
|
from django.http import HttpResponse
|
|
from django.template import loader
|
|
from django.utils import timezone
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from .models import NmapProfile
|
|
from .models import NmapScan
|
|
from .models import ScanForm
|
|
|
|
@login_required(login_url='/login/')
|
|
def index(request):
|
|
context = { 'profiles' : NmapProfile.objects.all() }
|
|
template = loader.get_template('index.html')
|
|
|
|
if request.method == 'POST':
|
|
f = ScanForm(request.POST)
|
|
if f.is_valid():
|
|
new_scan = f.save(commit=False)
|
|
if not new_scan.valid_target(new_scan.target_text):
|
|
context['popup_message'] = 'Invalid target!'
|
|
new_scan.target_text = "invalid"
|
|
new_scan.status_text = "waiting"
|
|
new_scan.start_date = timezone.now()
|
|
new_scan.end_date = timezone.now()
|
|
if not request.POST['cmd_text']:
|
|
nmap_cmd = NmapProfile.objects.get(id = request.POST['profile'])
|
|
new_scan.cmd_text = "%s %s" % (nmap_cmd.args_text, new_scan.target_text)
|
|
else:
|
|
new_scan.cmd_text = "%s %s" % (request.POST['cmd_text'], new_scan.target_text)
|
|
if new_scan.validate_opts(new_scan.cmd_text) and new_scan.target_text != "invalid":
|
|
context['popup_message'] = 'Your scan has been added to the queue!'
|
|
new_scan.save()
|
|
else:
|
|
context['popup_message'] = 'Not a valid Nmap command!'
|
|
else:
|
|
context['popup_message'] = f.errors
|
|
|
|
return HttpResponse(template.render(context, request))
|
|
|