2023-07-10 18:44:42 -04:00
|
|
|
|
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from django.http import HttpResponse
|
|
|
|
from django.http import JsonResponse
|
|
|
|
|
|
|
|
from rest_framework.decorators import action, api_view, schema
|
|
|
|
|
|
|
|
from .. import models, schemas
|
|
|
|
from decouple import config
|
|
|
|
import json
|
|
|
|
import jwt
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
private_key = config('SECRET_JWT')
|
|
|
|
|
|
|
|
# Views jwt
|
|
|
|
@csrf_exempt
|
|
|
|
@action(detail=False, methods=['post','get'])
|
|
|
|
@api_view(['GET','POST'])
|
|
|
|
@schema(schemas.AuthSchema())
|
|
|
|
def jwt_login(request):
|
|
|
|
if request.method == 'POST':
|
|
|
|
count = models.Usuario.objects.filter(vigente = True).count()
|
|
|
|
# validar username y password
|
|
|
|
input = json.loads(request.body)
|
|
|
|
username = input['username']
|
|
|
|
password = input['password']
|
|
|
|
usuario = None
|
|
|
|
|
|
|
|
if count > 0:
|
|
|
|
usuario = models.Usuario.objects.filter(login = username, vigente = True).values().first()
|
|
|
|
elif username == '0' and password == '0':
|
|
|
|
usuario = { 'login': '0', 'clave': '0' }
|
|
|
|
|
|
|
|
if not usuario:
|
|
|
|
return HttpResponse('Acceso no valido', status = 400)
|
|
|
|
|
|
|
|
if usuario['clave'] != password:
|
|
|
|
return HttpResponse('Acceso no valido', status = 400)
|
|
|
|
|
2023-07-12 21:55:58 -04:00
|
|
|
ahora = datetime.utcnow()
|
|
|
|
# manana = ahora + timedelta(days=1)
|
|
|
|
# manana = manana.replace(hour=0, minute=0, second=0, microsecond=0)
|
2023-07-10 18:44:42 -04:00
|
|
|
|
|
|
|
payload = {
|
2023-07-12 21:55:58 -04:00
|
|
|
'exp': ahora + timedelta(minutes=60),
|
2023-07-10 18:44:42 -04:00
|
|
|
'login': usuario['login']
|
|
|
|
}
|
|
|
|
token = jwt.encode(payload, private_key, algorithm="HS256")
|
|
|
|
return JsonResponse({ 'token': token })
|
|
|
|
elif request.method == 'GET':
|
|
|
|
return JsonResponse(request.jwt_info)
|