2023-06-11 15:27:18 -04:00
|
|
|
# models
|
2023-06-06 21:04:01 -04:00
|
|
|
from django.contrib.auth.models import User
|
2023-06-11 15:27:18 -04:00
|
|
|
from .models import Project, Agency, Route
|
|
|
|
# serializers
|
2023-06-03 17:19:58 -04:00
|
|
|
from .serializers import ProjectSerializer, AgencySerializer, RouteSerializer
|
2023-06-10 08:35:22 -04:00
|
|
|
from .serializers import UserSerializer, AuthSerializer
|
2023-06-11 15:27:18 -04:00
|
|
|
# others
|
|
|
|
import jwt
|
|
|
|
import datetime
|
|
|
|
from decouple import config
|
|
|
|
from rest_framework.response import Response
|
|
|
|
from rest_framework import viewsets
|
|
|
|
from rest_framework.decorators import action
|
|
|
|
from django.core.exceptions import PermissionDenied
|
2023-06-03 17:19:58 -04:00
|
|
|
|
|
|
|
# Create your views here.
|
|
|
|
class ProjectViewSet(viewsets.ModelViewSet):
|
|
|
|
queryset = Project.objects.all()
|
|
|
|
serializer_class = ProjectSerializer
|
|
|
|
|
|
|
|
class AgencyViewSet(viewsets.ModelViewSet):
|
|
|
|
queryset = Agency.objects.all()
|
|
|
|
serializer_class = AgencySerializer
|
|
|
|
|
|
|
|
class RouteViewSet(viewsets.ModelViewSet):
|
|
|
|
queryset = Route.objects.all()
|
2023-06-06 21:04:01 -04:00
|
|
|
serializer_class = RouteSerializer
|
|
|
|
|
|
|
|
class UserViewSet(viewsets.ModelViewSet):
|
|
|
|
queryset = User.objects.all()
|
2023-06-10 08:35:22 -04:00
|
|
|
serializer_class = UserSerializer
|
|
|
|
|
|
|
|
"""
|
|
|
|
Metodos de generacion de jwt en forma manual
|
|
|
|
"""
|
2023-06-11 15:27:18 -04:00
|
|
|
private_key = config('SECRET_JWT','palabrasecreta')
|
|
|
|
|
2023-06-10 08:35:22 -04:00
|
|
|
class AuthViewSet(viewsets.ViewSet):
|
|
|
|
serializer_class = AuthSerializer
|
|
|
|
|
|
|
|
def list(self, request):
|
|
|
|
return Response()
|
|
|
|
|
|
|
|
def create(self, request):
|
|
|
|
username = request.data.get('username')
|
|
|
|
user = User.objects.filter(username = username).first()
|
2023-06-11 15:27:18 -04:00
|
|
|
now = datetime.datetime.utcnow()
|
2023-06-10 08:35:22 -04:00
|
|
|
payload = {
|
2023-06-11 15:27:18 -04:00
|
|
|
'exp': now + datetime.timedelta(hours=1),
|
|
|
|
'user_id': user.id
|
2023-06-10 08:35:22 -04:00
|
|
|
}
|
|
|
|
token = jwt.encode(payload, private_key, algorithm="HS256")
|
2023-06-11 15:27:18 -04:00
|
|
|
return Response({ 'token': token })
|
|
|
|
|
|
|
|
@action(detail=False, methods=['post'])
|
|
|
|
def info(self, request, pk=None):
|
|
|
|
token = request.data.get('token')
|
|
|
|
decode = jwt.decode(token, private_key, algorithms= ["HS256"])
|
|
|
|
|
|
|
|
user = User.objects.filter(id = decode.get('user_id')).values().first()
|
|
|
|
if (user == None):
|
|
|
|
raise PermissionDenied
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
'id': user.get('id'),
|
|
|
|
'username': user.get('username'),
|
|
|
|
'first_name': user.get('first_name'),
|
|
|
|
'last_name': user.get('last_name'),
|
|
|
|
'email': user.get('email'),
|
|
|
|
})
|