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

4
.gitignore vendored
View File

@@ -135,3 +135,7 @@ GitHub.sublime-settings
!.vscode/launch.json
!.vscode/extensions.json
.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):
permission_classes = (ItsAdminToken,IsAuthenticated,)
permission_classes = (IsAuthenticated,ItsAdminToken,)
def get(self,request):
rfc = request.GET.get('RFC', None)
try:
@@ -411,7 +411,7 @@ class check_RFC(APIView):
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True})
class add_timbre2(APIView):
permission_classes = (IsAuthenticated,)
permission_classes = (IsAuthenticated,ItsAdminToken,)
def get(self,request):
uuid= request.GET.get('uuid', None)
rfcc= request.GET.get('rfcc', None)
@@ -438,7 +438,7 @@ class add_timbre2(APIView):
return Response({'Error':f'{e}'})
class saldo_funct2(APIView):
permission_classes =(IsAuthenticated,)
permission_classes =(IsAuthenticated,ItsAdminToken,)
def get(self, request):
timbres = request.GET.get('num',None)
try:
@@ -452,7 +452,7 @@ class saldo_funct2(APIView):
return Response(content)
class check_host(APIView):
permission_classes = (IsAuthenticated,)
permission_classes = (IsAuthenticated,ItsAdminToken,)
def post(self,request, format=None):
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
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 self.nombre_sistema
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)

View File

@@ -7,10 +7,17 @@ from .views import (
SistemasXCliente_DetailView,
UsersConnectedList,
#DRF APIViews
RegisterDeviceView,
AuthenticateDeviceView,
LogoutView,
CheckVersionView,
#function
download_version_FromServer,
)
urlpatterns = [
path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'),
@@ -19,4 +26,6 @@ urlpatterns = [
path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"),
path('logout/', LogoutView.as_view(), name='logout_sistemas'),
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.views.generic.list import ListView
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 .serializers import DeviceSerializer
from .permissions import HasAuthorizationHeader
from .models import Sistema
from django.utils import timezone
import re
@@ -22,6 +23,26 @@ from datetime import timedelta
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():
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)
else:
return Response({'Error':f'{serializer.errors}','isError':True}, status=status.HTTP_200_OK)
except Exception as e:
except Exception as ex:
return Response(
{'Error':f'{e}','isError':True}
{'Error':f'{ex}','isError':True}
, status=status.HTTP_200_OK)
@@ -115,9 +136,9 @@ class AuthenticateDeviceView(APIView):
return Response(
{'Error':f'{device_data.serializer.errors}','isError':True}
, status=status.HTTP_200_OK)
except Exception as e:
except Exception as ex:
return Response(
{'Error':f'{e}','isError':True}
{'Error':f'{ex}','isError':True}
, status=status.HTTP_200_OK)
@@ -128,3 +149,36 @@ class LogoutView(APIView):
def post(self, request):
logout(request)
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})