56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
| from __future__ import unicode_literals
 | |
| import re
 | |
| from django.db import models
 | |
| from django.forms import ModelForm
 | |
| from django.core.exceptions import ValidationError
 | |
| 
 | |
| SCAN_STATUS = ( ('waiting','Waiting'),('running','Running'),('finished','Finished') )
 | |
| 
 | |
| def validate_cmd(str):
 | |
|     valid = re.match('^[\sa-zA-Z0-9_/.,\"\'\=\(\)\*-]*$', str)
 | |
|     if not valid:
 | |
|         raise ValidationError(u'%s is not a valid Nmap command' % str)
 | |
| 
 | |
| class NmapProfile(models.Model):
 | |
|     alias_text = models.CharField(max_length=32)
 | |
|     args_text = models.CharField(max_length=1024, validators=[validate_cmd])
 | |
|     pub_date = models.DateTimeField('date created')
 | |
|     def __str__(self):
 | |
|         return self.alias_text
 | |
| 
 | |
| class NmapScan(models.Model):
 | |
|     target_text = models.CharField(max_length=1024)
 | |
|     cmd_text = models.CharField(max_length=256, validators=[validate_cmd])
 | |
|     email_text = models.EmailField(max_length=254)
 | |
|     status_text = models.CharField(max_length=16, choices = SCAN_STATUS)
 | |
|     start_date = models.DateTimeField('date started')
 | |
|     end_date = models.DateTimeField('date end')
 | |
|     uuid = models.CharField(max_length=32)
 | |
|     def __str__(self):
 | |
|         return "%s - %s" % (self.cmd_text, self.email_text)
 | |
|     def valid_chars(self, str):
 | |
|         valid = re.match('^[\sa-zA-Z0-9_/.,\"\'\=\(\)\*-]*$', str)
 | |
|         if not valid:
 | |
|             return False
 | |
|         return True
 | |
|     def validate_opts(self, cmd):
 | |
|         if not self.valid_chars(cmd):
 | |
|             return False
 | |
|         for arg in cmd.split(" "):
 | |
|             if not self.valid_nmap_arg(arg):
 | |
|                 return False
 | |
|         return True
 | |
|     def valid_nmap_arg(self, arg):
 | |
|         #TODO: Add regex to validate Nmap argument
 | |
|         return True
 | |
|     def valid_target(self, target):
 | |
|         if not self.valid_chars(target):
 | |
|             return False
 | |
|         return True
 | |
| 
 | |
| class ScanForm(ModelForm):
 | |
|     class Meta:
 | |
|         model = NmapScan
 | |
|         fields = ['target_text', 'email_text']
 | |
| 
 |