mirror of
https://github.com/yogeshojha/rengine.git
synced 2026-09-13 21:37:42 +02:00
129 lines
5.1 KiB
Python
129 lines
5.1 KiB
Python
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
from django.apps import apps
|
|
from django.contrib.postgres.fields import ArrayField
|
|
|
|
|
|
class AssociatedDomain(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
name = models.CharField(max_length=250, null=True, blank=True)
|
|
# target_id = models.ForeignKey(Domain, on_delete=models.CASCADE, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class RelatedTLD(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
name = models.CharField(max_length=250, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class RegistrantInfo(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
name = models.CharField(max_length=250, null=True, blank=True)
|
|
organization = models.CharField(max_length=250, null=True, blank=True)
|
|
email = models.CharField(max_length=250, null=True, blank=True)
|
|
address = models.CharField(max_length=200, null=True, blank=True)
|
|
city = models.CharField(max_length=50, null=True, blank=True)
|
|
state = models.CharField(max_length=20, null=True, blank=True)
|
|
country = models.CharField(max_length=50, null=True, blank=True)
|
|
country_iso = models.CharField(max_length=4, null=True, blank=True)
|
|
phone_number = models.CharField(max_length=50, null=True, blank=True)
|
|
fax = models.CharField(max_length=50, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.name if self.name else ''
|
|
|
|
|
|
class WhoisDetail(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
details = models.TextField(blank=True, null=True)
|
|
registrant = models.ForeignKey(RegistrantInfo, on_delete=models.CASCADE, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.registrant.name if self.registrant.name else ''
|
|
|
|
|
|
class NameServerHistory(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
date = models.CharField(max_length=10, null=True, blank=True)
|
|
action = models.CharField(max_length=50, null=True, blank=True)
|
|
server = models.CharField(max_length=100, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.server if self.server else ''
|
|
|
|
|
|
class NSRecord(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
type = models.CharField(max_length=10, null=True, blank=True)
|
|
hostname = models.CharField(max_length=50, null=True, blank=True)
|
|
address = models.CharField(max_length=50, null=True, blank=True)
|
|
preference = models.CharField(max_length=5, null=True, blank=True)
|
|
ttl = models.CharField(max_length=10, null=True, blank=True)
|
|
ns_class = models.CharField(max_length=10, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.hostname if self.hostname else ''
|
|
|
|
|
|
class DomainInfo(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
date_created = models.CharField(max_length=300, null=True, blank=True)
|
|
domain_age = models.CharField(max_length=300, null=True, blank=True)
|
|
ip_address = models.CharField(max_length=200, null=True, blank=True)
|
|
geolocation = models.CharField(max_length=50, null=True, blank=True)
|
|
geolocation_iso = models.CharField(max_length=4, null=True, blank=True)
|
|
is_private = models.BooleanField(default=False)
|
|
whois = models.ForeignKey(WhoisDetail, on_delete=models.CASCADE, null=True, blank=True)
|
|
nameserver_history = models.ManyToManyField(NameServerHistory)
|
|
nameserver_record = models.ManyToManyField(NSRecord)
|
|
organization_association_href = models.CharField(max_length=100, null=True, blank=True)
|
|
email_association_href = models.CharField(max_length=100, null=True, blank=True)
|
|
associated_domains = models.ManyToManyField(AssociatedDomain, blank=True)
|
|
related_tlds = models.ManyToManyField(RelatedTLD, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.ip_address
|
|
|
|
|
|
class Organization(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
name = models.CharField(max_length=300, unique=True)
|
|
description = models.TextField(blank=True, null=True)
|
|
insert_date = models.DateTimeField()
|
|
domains = models.ManyToManyField('Domain', related_name='domains')
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def get_domains(self):
|
|
return Domain.objects.filter(domains__in=Organization.objects.filter(id=self.id))
|
|
|
|
|
|
class Domain(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
name = models.CharField(max_length=300, unique=True)
|
|
h1_team_handle = models.CharField(max_length=100, blank=True, null=True)
|
|
ip_address_cidr = models.CharField(max_length=100, blank=True, null=True)
|
|
description = models.TextField(blank=True, null=True)
|
|
insert_date = models.DateTimeField()
|
|
start_scan_date = models.DateTimeField(null=True)
|
|
domain_info = models.ForeignKey(DomainInfo, on_delete=models.CASCADE, null=True, blank=True)
|
|
|
|
def get_organization(self):
|
|
return Organization.objects.filter(domains__id=self.id)
|
|
|
|
def get_recent_scan_id(self):
|
|
ScanHistory = apps.get_model('startScan.ScanHistory')
|
|
obj = ScanHistory.objects.filter(domain__id=self.id).order_by('-id')
|
|
if obj:
|
|
return obj[0].id
|
|
|
|
def __str__(self):
|
|
return self.name
|