newfunctions server version CFDI checks and model Bitacora

This commit is contained in:
fjrodriguez
2023-02-09 09:12:49 -06:00
parent a59de70f54
commit 814412e9bf
9 changed files with 157 additions and 12 deletions

6
.gitignore vendored
View File

@@ -134,4 +134,8 @@ GitHub.sublime-settings
!.vscode/tasks.json !.vscode/tasks.json
!.vscode/launch.json !.vscode/launch.json
!.vscode/extensions.json !.vscode/extensions.json
.history .history
# systems ignore
downloadSystems/

0
.vscode/settings.json vendored Normal file
View File

View File

@@ -391,7 +391,7 @@ def PACS_Retrive_RFCS(request):
#-------------------------------------------- #--------------------------------------------
class check_RFC(APIView): class check_RFC(APIView):
permission_classes = (ItsAdminToken,IsAuthenticated,) permission_classes = (IsAuthenticated,ItsAdminToken,)
def get(self,request): def get(self,request):
rfc = request.GET.get('RFC', None) rfc = request.GET.get('RFC', None)
try: try:
@@ -411,7 +411,7 @@ class check_RFC(APIView):
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True}) return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True})
class add_timbre2(APIView): class add_timbre2(APIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,ItsAdminToken,)
def get(self,request): def get(self,request):
uuid= request.GET.get('uuid', None) uuid= request.GET.get('uuid', None)
rfcc= request.GET.get('rfcc', None) rfcc= request.GET.get('rfcc', None)
@@ -438,7 +438,7 @@ class add_timbre2(APIView):
return Response({'Error':f'{e}'}) return Response({'Error':f'{e}'})
class saldo_funct2(APIView): class saldo_funct2(APIView):
permission_classes =(IsAuthenticated,) permission_classes =(IsAuthenticated,ItsAdminToken,)
def get(self, request): def get(self, request):
timbres = request.GET.get('num',None) timbres = request.GET.get('num',None)
try: try:
@@ -452,7 +452,7 @@ class saldo_funct2(APIView):
return Response(content) return Response(content)
class check_host(APIView): class check_host(APIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,ItsAdminToken,)
def post(self,request, format=None): def post(self,request, format=None):
data = request.data data = request.data

View File

@@ -0,0 +1,19 @@
# Generated by Django 4.1.3 on 2023-02-08 21:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Sistemas', '0008_device_macaddress'),
]
operations = [
migrations.AddField(
model_name='sistema',
name='version',
field=models.CharField(default='23.13.0.0', max_length=10),
preserve_default=False,
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.1.3 on 2023-02-08 21:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Sistemas', '0009_sistema_version'),
]
operations = [
migrations.AlterField(
model_name='sistema',
name='version',
field=models.CharField(max_length=25),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.1.3 on 2023-02-09 15:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Sistemas', '0010_alter_sistema_version'),
]
operations = [
migrations.CreateModel(
name='BitacoraErrores',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('level', models.PositiveBigIntegerField(choices=[(1, 'Critical'), (2, 'Error'), (3, 'Warning'), (4, 'Info'), (5, 'Debug')])),
('message', models.TextField()),
('timestamp', models.DateTimeField(auto_now_add=True)),
('traceback', models.TextField(blank=True, null=True)),
],
),
]

View File

@@ -7,12 +7,30 @@ from django.contrib.auth.models import BaseUserManager
import re 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): class Sistema(models.Model):
nombre_sistema= models.CharField(max_length=100, blank=False,null=False,unique=True) nombre_sistema= models.CharField(max_length=100, blank=False,null=False,unique=True)
version = models.CharField(max_length=25)
# class Meta: # class Meta:
# abstract=True # abstract=True
def __str__(self): def __str__(self):
return self.nombre_sistema return f'{self.nombre_sistema}, Version{self.version}'
class sistemas_por_cliente(models.Model): class sistemas_por_cliente(models.Model):
id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE) id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE)

View File

@@ -7,10 +7,17 @@ from .views import (
SistemasXCliente_DetailView, SistemasXCliente_DetailView,
UsersConnectedList, UsersConnectedList,
#DRF APIViews #DRF APIViews
RegisterDeviceView, RegisterDeviceView,
AuthenticateDeviceView, AuthenticateDeviceView,
LogoutView, LogoutView,
CheckVersionView,
#function
download_version_FromServer,
) )
urlpatterns = [ urlpatterns = [
path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'), path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'),
@@ -19,4 +26,6 @@ urlpatterns = [
path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"), path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"),
path('logout/', LogoutView.as_view(), name='logout_sistemas'), path('logout/', LogoutView.as_view(), name='logout_sistemas'),
path('usuariosConectados/', UsersConnectedList.as_view(), name='lista_usuarios'), path('usuariosConectados/', UsersConnectedList.as_view(), name='lista_usuarios'),
path('checkVersion/', CheckVersionView.as_view(), name='checkVersion'),
path('download_version_FromServer/',download_version_FromServer, name='downloadVersionFromServer'),
] ]

View File

@@ -1,4 +1,4 @@
from django.shortcuts import render from django.shortcuts import render,redirect
from django.contrib.auth import logout from django.contrib.auth import logout
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
@@ -13,6 +13,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from .models import sistemas_por_cliente, DeviceHistory,Device from .models import sistemas_por_cliente, DeviceHistory,Device
from .serializers import DeviceSerializer from .serializers import DeviceSerializer
from .permissions import HasAuthorizationHeader from .permissions import HasAuthorizationHeader
from .models import Sistema
from django.utils import timezone from django.utils import timezone
import re import re
@@ -22,6 +23,26 @@ from datetime import timedelta
from django.contrib.sessions.models import Session from django.contrib.sessions.models import Session
from django.http.response import HttpResponse
import os
import mimetypes
def download_version_FromServer(request):
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print('BASE_DIR',BASE_DIR)
filename = 'CFDI.zip'
filepath = f'{BASE_DIR }/downloadSystems/{filename}'
#path = open(filepath, 'r')
with open(filepath, 'rb') as path:
mime_type, _ = mimetypes.guess_type(filepath)
print(mime_type)
response = HttpResponse(path.read(),content_type=mime_type)
response['Content-Disposition']= f'attachment; filename={filename}'
return response#redirect('index')
def get_logged_in_users(): def get_logged_in_users():
sessions = Session.objects.filter(expire_date__gte=timezone.now()) sessions = Session.objects.filter(expire_date__gte=timezone.now())
@@ -89,9 +110,9 @@ class RegisterDeviceView(APIView):
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
else: else:
return Response({'Error':f'{serializer.errors}','isError':True}, status=status.HTTP_200_OK) return Response({'Error':f'{serializer.errors}','isError':True}, status=status.HTTP_200_OK)
except Exception as e: except Exception as ex:
return Response( return Response(
{'Error':f'{e}','isError':True} {'Error':f'{ex}','isError':True}
, status=status.HTTP_200_OK) , status=status.HTTP_200_OK)
@@ -115,9 +136,9 @@ class AuthenticateDeviceView(APIView):
return Response( return Response(
{'Error':f'{device_data.serializer.errors}','isError':True} {'Error':f'{device_data.serializer.errors}','isError':True}
, status=status.HTTP_200_OK) , status=status.HTTP_200_OK)
except Exception as e: except Exception as ex:
return Response( return Response(
{'Error':f'{e}','isError':True} {'Error':f'{ex}','isError':True}
, status=status.HTTP_200_OK) , status=status.HTTP_200_OK)
@@ -127,4 +148,37 @@ class LogoutView(APIView):
def post(self, request): def post(self, request):
logout(request) logout(request)
return Response({'OK':'Dispositivo desautenticado'},status=200) return Response({'OK':'Dispositivo desautenticado'},status=200)
class CheckVersionView(APIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,HasAuthorizationHeader,)
def post(self, request,*args, **kwargs):
try:
version = request.data.get('version')
client_version = [int(x) for x in version.split(".")]
print('client_version: ',client_version)
try:
ver = Sistema.objects.get(nombre_sistema="CFDI")
server_version = [int(x) for x in ver.version.split(".")]
except Exception as e:
return Response({'success':True, 'actualizar':False})
print('server_version', server_version)
result=False
#for i in range(len(client_version)):
for cont, ele in enumerate(client_version):
if client_version[cont] < server_version[cont]:
print('server verion is grater')
result = True
break
else:
result= False
print('equal')
return Response({'success':True, 'actualizar':result})
except Exception as ex:
return Response({'Error':f'{ex}','isError':True})