129 lines
4.6 KiB
Python
129 lines
4.6 KiB
Python
from django.db import models
|
|
from django.core.exceptions import ValidationError
|
|
from Clientes.models import Clientes
|
|
from django.contrib.auth.models import User
|
|
from rest_framework.authtoken.models import Token
|
|
from django.contrib.auth.models import BaseUserManager
|
|
|
|
import re
|
|
|
|
|
|
class BitacoraErrores(models.Model):
|
|
LEVEL_CHOICES = [
|
|
(1,'Critical'),
|
|
(2,'Error'),
|
|
(3,'Warning'),
|
|
(4,'Info'),
|
|
(5,'Debug'),
|
|
]
|
|
level = models.PositiveBigIntegerField(choices=LEVEL_CHOICES)
|
|
message = models.TextField()
|
|
timestamp = models.DateTimeField(auto_now_add=True)
|
|
traceback = models.TextField(null=True,blank=True)
|
|
def __str__(self):
|
|
return f"{self.get_level_display()}: {self.message}"
|
|
|
|
class Sistema(models.Model):
|
|
nombre_sistema= models.CharField(max_length=100, blank=False,null=False,unique=True)
|
|
version = models.CharField(max_length=25)
|
|
# class Meta:
|
|
# abstract=True
|
|
def __str__(self):
|
|
return f'{self.nombre_sistema}, Version{self.version}'
|
|
|
|
|
|
class sistemas_por_cliente(models.Model):
|
|
id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE)
|
|
cliente = models.ForeignKey(Clientes, related_name='cliente_spc', on_delete=models.CASCADE)
|
|
num_licencias= models.IntegerField(default=1)
|
|
|
|
def __str__(self):
|
|
|
|
return f'{self.cliente.Nombre}'
|
|
class Meta:
|
|
ordering= ('-cliente','id_sistema')
|
|
|
|
|
|
class DeviceManager(BaseUserManager):
|
|
def generate_unique_username(self,client, device_name, ip_address):
|
|
username = f"Device_{client.RFC}_{device_name}_{ip_address}"
|
|
username_ = re.sub(r'\W+', '', username)
|
|
if User.objects.filter(username=username_).exists():
|
|
raise ValidationError(f"El Usuario ya existe {username_}")
|
|
return username_
|
|
|
|
def create_user(self,client, device_name, device_os, ip_address ):
|
|
user_= User.objects.create_user(
|
|
username=self.generate_unique_username(client,device_name,ip_address)
|
|
)
|
|
device =self.model(
|
|
client=client,
|
|
device_name= device_name,
|
|
device_os=device_os,
|
|
ip_address=ip_address,
|
|
username=user_
|
|
)
|
|
device.save()
|
|
|
|
Token.objects.create(user=user_)
|
|
DeviceHistory.objects.create(device=device)
|
|
return device
|
|
|
|
class Device(models.Model):
|
|
client = models.ForeignKey(Clientes,on_delete=models.CASCADE)
|
|
device_name = models.CharField(max_length=255)
|
|
device_os = models.CharField(max_length=255)
|
|
ip_address= models.GenericIPAddressField()
|
|
token = models.OneToOneField(Token, on_delete=models.CASCADE, blank=True,null=True)
|
|
username = models.OneToOneField(User, on_delete=models.CASCADE)
|
|
sistema = models.ForeignKey(Sistema,on_delete=models.CASCADE, blank=True, null=True)
|
|
macAddress = models.CharField(max_length=30, unique=True, blank=True,null=True)
|
|
#objects = DeviceManager()
|
|
def generate_unique_username(self,client, device_name,ip_address, macAddress):
|
|
username = f"Device_{client.RFC}_{device_name}_{ip_address}_{macAddress}"
|
|
username_ = re.sub(r'\W+', '', username)
|
|
|
|
if User.objects.filter(username=username_).exists():
|
|
raise ValidationError(f"El Usuario ya existe {username_}")
|
|
obj= User.objects.create_user(
|
|
username=username_
|
|
)
|
|
return obj
|
|
|
|
def save(self, *args, **kwargs):
|
|
if not self.pk:
|
|
obj = self.generate_unique_username(self.client,self.device_name, self.ip_address, self.macAddress)
|
|
self.username= obj
|
|
token= Token.objects.create(user=obj)
|
|
self.token=token
|
|
super().save(*args, **kwargs)
|
|
DeviceHistory.objects.create(device=self,ip_address=self.ip_address)
|
|
|
|
def __str__(self):
|
|
return f'{self.username}'
|
|
|
|
class DeviceHistory(models.Model):
|
|
device = models.ForeignKey(Device, on_delete=models.CASCADE)
|
|
first_authentication = models.DateTimeField(auto_now_add=True)
|
|
last_authentication = models.DateTimeField(auto_now=True)
|
|
ip_address = models.GenericIPAddressField()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Maquinas_Conectadas(models.Model):
|
|
|
|
UserName = models.CharField(max_length=255)
|
|
PC_Name = models.CharField(max_length=255)
|
|
Is64 = models.BooleanField()
|
|
OSversion= models.CharField(max_length=255)
|
|
local_ip = models.CharField(max_length=55)
|
|
public_ip= models.CharField(max_length=55)
|
|
|
|
Token = models.CharField(max_length=50)
|
|
Cliente = models.CharField(max_length=13)
|
|
class Meta:
|
|
abstract =True |