Files
osmedeus/server/api/models.py
T

324 lines
11 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from core import utils
# from django.db.models import signals
# from django.dispatch import receiver
# store some configuration
class Configurations(models.Model):
name = models.TextField(unique=True, blank=False, default='')
value = models.TextField(blank=False, default='')
alias = models.TextField(default='')
desc = models.TextField(default='')
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
name=self.name,
value=self.value,
alias=self.alias,
desc=self.desc,
)
# sekeleton of the command
class Commands(models.Model):
cmd = models.TextField(blank=False)
requirement = models.TextField(default='')
output_path = models.TextField(default='')
std_path = models.TextField(default='')
mode = models.TextField(default='general')
cmd_type = models.TextField(default='single')
speed = models.TextField(default='quick')
pre_run = models.TextField(default='')
post_run = models.TextField(default='')
waiting = models.TextField(default='')
cleaned_output = models.TextField(default='')
chunk = models.IntegerField(default=1)
delay = models.IntegerField(default=1)
banner = models.TextField(default='')
resources = models.TextField(default='')
alias = models.TextField(default='')
module = models.TextField(default='general')
note = models.TextField(default='')
checksum = models.TextField(
unique=True, blank=False,
default='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
def save(self, *args, **kwargs):
# prevent duplicate analyzed command
raw_check = str(self.cmd) + \
str(self.output_path) + str(self.std_path) + \
str(self.alias) + str(self.cmd_type) + \
str(self.mode) + str(self.pre_run) + \
str(self.resources) + str(self.speed)
self.checksum = utils.gen_checksum(raw_check)
try:
super(Commands, self).save(*args, **kwargs)
except Exception:
utils.print_bad("Duplicate Commands")
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
cmd=self.cmd,
requirement=self.requirement,
output_path=self.output_path,
std_path=self.std_path,
alias=self.alias,
module=self.module,
cmd_type=self.cmd_type,
chunk=self.chunk,
delay=self.delay,
banner=self.banner,
resources=self.resources,
pre_run=self.pre_run,
post_run=self.post_run,
waiting=self.waiting,
cleaned_output=self.cleaned_output,
)
# place to check if command is done or not
class Activities(models.Model):
cmd = models.TextField(blank=False)
output_path = models.TextField(default='')
std_path = models.TextField(default='')
module = models.TextField(default='general')
status = models.TextField(default=False)
workspace = models.TextField(default=False)
cmd_type = models.TextField(default='single')
chunk = models.IntegerField(default=1)
delay = models.IntegerField(default=1)
resources = models.TextField(default='')
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
cmd=self.cmd,
output_path=self.output_path,
std_path=self.std_path,
module=self.module,
status=self.status,
workspace=self.workspace,
chunk=self.chunk,
delay=self.delay,
resources=self.resources,
)
# place to check if command is done or not
class Logs(models.Model):
cmd = models.TextField(blank=False)
output_path = models.TextField(default='')
std_path = models.TextField(default='')
module = models.TextField(default='general')
workspace = models.TextField(default=False)
cmd_type = models.TextField(default='single')
status = models.TextField(default=False)
chunk = models.IntegerField(default=1)
delay = models.IntegerField(default=1)
resources = models.TextField(default='')
checksum = models.TextField(
unique=True, blank=False,
default='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
def save(self, *args, **kwargs):
raw_check = str(self.cmd) + \
str(self.output_path) + str(self.std_path) + \
str(self.workspace) + str(self.cmd_type)
self.checksum = utils.gen_checksum(raw_check)
try:
super(Logs, self).save(*args, **kwargs)
except Exception:
pass
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
cmd=self.cmd,
output_path=self.output_path,
std_path=self.std_path,
module=self.module,
workspace=self.workspace,
chunk=self.chunk,
status=self.status,
delay=self.delay,
resources=self.resources,
checksum=self.checksum,
)
class Workspaces(models.Model):
raw_target = models.TextField(blank=False)
target = models.TextField(default='')
ip_address = models.TextField(default='')
workspace = models.TextField(blank=False, unique=True)
output = models.TextField(blank=False)
mode = models.TextField(default='')
workspaces = models.TextField(default='')
# list modules will run in the routine
modules = models.TextField(default='')
speed = models.TextField(default='quick|*;;slow|-')
# where to run command and store result
arch = models.TextField(default='server')
forced = models.BooleanField(default=False)
verbose = models.BooleanField(default=False)
created_time = models.IntegerField(default=0)
def save(self, *args, **kwargs):
self.created_time = utils.gen_ts()
try:
super(Workspaces, self).save(*args, **kwargs)
except Exception:
utils.print_bad("Duplicate workspace or missing Field")
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
raw_target=self.raw_target,
target=self.target,
ip_address=self.ip_address,
workspace=self.workspace,
output=self.output,
workspaces=self.workspaces,
mode=self.mode,
modules=self.modules,
speed=self.speed,
arch=self.arch,
forced=self.forced,
verbose=self.verbose,
)
class Summaries(models.Model):
domain = models.TextField(default='')
ip_address = models.TextField(default='N/A')
technologies = models.TextField(default='N/A')
ports = models.TextField(default='N/A')
workspace = models.TextField(blank=False)
paths = models.TextField(default='')
screenshot = models.TextField(default='')
note = models.TextField(default='')
checksum = models.TextField(
unique=True, blank=False,
default='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
def save(self, *args, **kwargs):
if self.domain is None:
self.domain = self.ip_address
# prevent duplicate analyzed command
raw_check = str(self.domain) + str(self.workspace)
self.checksum = utils.gen_checksum(raw_check)
try:
super(Summaries, self).save(*args, **kwargs)
except Exception:
utils.print_bad("Duplicate Summaries Record")
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
domain=self.domain,
ip_address=self.ip_address,
technologies=self.technologies,
ports=self.ports,
workspace=self.workspace,
paths=self.paths,
screenshot=self.screenshot,
note=self.note,
checksum=self.checksum,
)
class ReportsSkeleton(models.Model):
report_path = models.TextField(default='')
report_type = models.TextField(default='')
module = models.TextField(default='')
note = models.TextField(default='')
mode = models.TextField(default='general')
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
report_path=self.report_path,
report_type=self.report_type,
module=self.module,
note=self.note,
mode=self.mode,
)
class Reports(models.Model):
report_path = models.TextField(default='')
report_type = models.TextField(default='')
note = models.TextField(default='')
module = models.TextField(default='')
workspace = models.TextField(default='')
mode = models.TextField(default='general')
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
report_path=self.report_path,
report_type=self.report_type,
note=self.note,
module=self.module,
mode=self.mode,
workspace=self.workspace,
)
class Monitors(models.Model):
old_path = models.TextField(default='')
new_path = models.TextField(default='')
compare_ts = models.TextField(default='')
diff_content = models.TextField(default='')
diff_type = models.TextField(default='new')
workspace = models.TextField(default='')
level = models.TextField(default='final')
notified = models.BooleanField(default=False)
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
old_path=self.old_path,
new_path=self.new_path,
compare_ts=self.compare_ts,
diff_content=self.diff_content,
diff_type=self.diff_type,
workspace=self.workspace,
level=self.level,
notified=self.notified,
)
class Exploits(models.Model):
description = models.TextField(default='')
condition_command = models.TextField(default='')
condition_tech = models.TextField(default='')
condition_content = models.TextField(default='')
exploit_command = models.TextField(default='')
def as_json(self):
return dict(
source_model=self.__class__.__name__,
pk=self.pk,
description=self.description,
condition_command=self.condition_command,
condition_tech=self.condition_tech,
condition_content=self.condition_content,
exploit_command=self.exploit_command,
)