56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from rest_framework import viewsets
|
|
from rest_framework.decorators import action
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.http import HttpResponse
|
|
from django.http import JsonResponse
|
|
from .models import Usuario, Persona
|
|
from .models import Aplicacion
|
|
from .serializers import UsuarioSerializer, PersonaSerializer
|
|
from .serializers import AplicacionSerializer
|
|
import json
|
|
import jwt
|
|
import datetime
|
|
from decouple import config
|
|
|
|
private_key = config('SECRET_JWT')
|
|
|
|
# Create your views here.
|
|
class AplicacionViewSet(viewsets.ModelViewSet):
|
|
queryset = Aplicacion.objects.all()
|
|
serializer_class = AplicacionSerializer
|
|
|
|
class PersonaViewSet(viewsets.ModelViewSet):
|
|
queryset = Persona.objects.all()
|
|
serializer_class = PersonaSerializer
|
|
|
|
class UsuarioViewSet(viewsets.ModelViewSet):
|
|
queryset = Usuario.objects.all()
|
|
serializer_class = UsuarioSerializer
|
|
|
|
# Views jwt
|
|
@csrf_exempt
|
|
@action(detail=False, methods=['post','get'])
|
|
def jwt_login(request):
|
|
if request.method == 'POST':
|
|
# validar username y password
|
|
json_data = json.loads(request.body)
|
|
username = json_data['username']
|
|
password = json_data['password']
|
|
|
|
usuario = Usuario.objects.filter(login = username, vigente = True).values().first()
|
|
if not usuario:
|
|
return HttpResponse('Acceso no valido', status = 400)
|
|
|
|
if usuario['clave'] != password:
|
|
return HttpResponse('Acceso no valido', status = 400)
|
|
|
|
now = datetime.datetime.utcnow()
|
|
payload = {
|
|
'exp': now + datetime.timedelta(minutes=60),
|
|
'login': usuario['login']
|
|
}
|
|
token = jwt.encode(payload, private_key, algorithm="HS256")
|
|
return JsonResponse({ 'token': token })
|
|
elif request.method == 'GET':
|
|
return JsonResponse(request.jwt_info)
|
|
|