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)