2023-07-27 04:26:27 +02:00
|
|
|
import hashlib
|
2023-08-08 13:27:45 +02:00
|
|
|
import uuid
|
2023-07-27 04:26:27 +02:00
|
|
|
from functools import partial
|
|
|
|
|
2023-08-08 13:27:45 +02:00
|
|
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
2023-07-27 04:26:27 +02:00
|
|
|
from django.contrib.auth.models import User
|
2023-07-25 08:29:17 +02:00
|
|
|
from django.db import models
|
2023-07-27 04:26:27 +02:00
|
|
|
from django.conf import settings
|
|
|
|
from django.core.files.storage import FileSystemStorage
|
2023-07-29 06:56:42 +02:00
|
|
|
from django.urls import reverse
|
|
|
|
|
2023-08-05 04:05:56 +02:00
|
|
|
from .utils import logs_dir_path
|
2023-07-27 04:26:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
# Create a custom storage location, using a value from your settings file
|
|
|
|
sensitive_upload_storage = FileSystemStorage(
|
|
|
|
location=settings.MEDIA_ROOT_FOR_SENSITIVE_FILES,
|
|
|
|
base_url=settings.MEDIA_URL_FOR_SENSITIVE_FILES
|
|
|
|
)
|
|
|
|
# ... and a file field that will use the custom storage
|
2023-07-29 06:56:42 +02:00
|
|
|
AuthenticatedFileField = partial(
|
|
|
|
models.FileField,
|
|
|
|
storage=sensitive_upload_storage
|
|
|
|
)
|
2023-07-27 04:26:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
class Archive(models.Model):
|
|
|
|
file = AuthenticatedFileField(
|
|
|
|
upload_to=logs_dir_path,
|
|
|
|
blank=True,
|
|
|
|
null=True
|
|
|
|
)
|
2023-08-08 12:05:11 +02:00
|
|
|
md5 = models.CharField(max_length=1024, editable=False)
|
2023-07-27 04:26:27 +02:00
|
|
|
time_create = models.DateTimeField(auto_now_add=True)
|
|
|
|
time_update = models.DateTimeField(auto_now=True)
|
2023-08-08 08:15:39 +02:00
|
|
|
ticket = models.ForeignKey(
|
|
|
|
'Ticket',
|
|
|
|
to_field='number',
|
|
|
|
db_column='ticket_number',
|
|
|
|
on_delete=models.CASCADE
|
|
|
|
)
|
2023-08-08 13:27:45 +02:00
|
|
|
token = models.ForeignKey('Token', on_delete=models.CASCADE)
|
2023-07-27 04:26:27 +02:00
|
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
2023-08-08 12:05:11 +02:00
|
|
|
# calculate sha 1 hash sum and write md5 field to db
|
2023-07-27 04:26:27 +02:00
|
|
|
with self.file.open('rb') as f:
|
2023-08-08 12:05:11 +02:00
|
|
|
md5 = hashlib.md5()
|
2023-07-27 04:26:27 +02:00
|
|
|
for byte_block in iter(lambda: f.read(4096), b""):
|
2023-08-08 12:05:11 +02:00
|
|
|
md5.update(byte_block)
|
|
|
|
self.md5 = md5.hexdigest()
|
2023-07-27 04:26:27 +02:00
|
|
|
# Call the "real" save() method
|
|
|
|
super().save(*args, **kwargs)
|
|
|
|
|
2023-07-29 06:56:42 +02:00
|
|
|
def get_absolute_url(self):
|
2023-08-04 04:53:53 +02:00
|
|
|
return reverse('collector:download', kwargs={'path': self.file})
|
2023-07-29 06:56:42 +02:00
|
|
|
|
2023-07-27 04:26:27 +02:00
|
|
|
def __str__(self):
|
|
|
|
return str(self.file)
|
|
|
|
|
|
|
|
|
|
|
|
class Platform(models.Model):
|
|
|
|
name = models.CharField(max_length=20)
|
2023-07-29 06:56:42 +02:00
|
|
|
pretty_name = models.CharField(max_length=20)
|
|
|
|
|
|
|
|
def get_absolute_url(self):
|
2023-08-04 04:53:53 +02:00
|
|
|
return reverse('collector:platform', kwargs={'platform': self.name})
|
2023-07-27 04:26:27 +02:00
|
|
|
|
|
|
|
def __str__(self):
|
2023-08-05 13:18:20 +02:00
|
|
|
return self.pretty_name
|
2023-07-27 04:26:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
class Ticket(models.Model):
|
2023-08-05 13:18:20 +02:00
|
|
|
number = models.IntegerField(unique=True, db_index=True)
|
2023-07-27 04:26:27 +02:00
|
|
|
resolved = models.BooleanField(default=False)
|
|
|
|
note = models.TextField(blank=True)
|
|
|
|
time_create = models.DateTimeField(auto_now_add=True)
|
|
|
|
time_update = models.DateTimeField(auto_now=True)
|
|
|
|
platform = models.ForeignKey('Platform', on_delete=models.CASCADE)
|
|
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
2023-07-25 08:29:17 +02:00
|
|
|
|
2023-07-29 09:36:08 +02:00
|
|
|
class Meta:
|
2023-08-04 17:41:32 +02:00
|
|
|
ordering = ['-time_create']
|
2023-07-29 09:36:08 +02:00
|
|
|
|
2023-07-29 06:56:42 +02:00
|
|
|
def get_absolute_url(self):
|
|
|
|
return reverse(
|
2023-08-04 04:53:53 +02:00
|
|
|
'collector:ticket',
|
2023-07-29 06:56:42 +02:00
|
|
|
kwargs={'platform': self.platform.name, 'ticket': self.number}
|
|
|
|
)
|
|
|
|
|
2023-07-27 04:26:27 +02:00
|
|
|
def __str__(self):
|
|
|
|
return str(self.number)
|
2023-08-08 13:27:45 +02:00
|
|
|
|
|
|
|
|
|
|
|
class Token(models.Model):
|
|
|
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
|
|
expires = models.IntegerField(default=5, validators=[
|
|
|
|
MaxValueValidator(10),
|
|
|
|
MinValueValidator(1)
|
|
|
|
])
|
|
|
|
blocked = models.BooleanField(default=False)
|
|
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
def get_absolute_url(self):
|
|
|
|
return reverse('collector:token')
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return str(self.id)
|