Quellcode durchsuchen

Autenticacion a clima y filtrado de query preport

cettipao vor 3 Jahren
Ursprung
Commit
75ac6cbbcc
5 geänderte Dateien mit 45 neuen und 2 gelöschten Zeilen
  1. 13 0
      app/api/client.py
  2. 20 0
      app/api/permissions.py
  3. 5 2
      app/api/views.py
  4. 2 0
      app/preports/settings.py
  5. 5 0
      app/requirements.txt

+ 13 - 0
app/api/client.py

@@ -0,0 +1,13 @@
+from tkinter import E
+import requests
+from preports.settings import CLIMA_URL
+
+def get_user_id(token: str) -> requests.Response:
+    try:
+        response = requests.get(
+            f"{CLIMA_URL}api/get_user_id/",
+            headers={"Authorization": token},
+        )
+        return response
+    except:
+        return None

+ 20 - 0
app/api/permissions.py

@@ -0,0 +1,20 @@
+from traceback import print_tb
+from urllib import response
+from rest_framework import permissions
+from .client import get_user_id
+
+class IsOmixomUser(permissions.BasePermission):
+    message = 'El token no pertenece a un usuario de Omixom'
+
+    # TODO: Dar permisos solo si el token pertenece a un usuario de Omixom
+    def has_permission(self, request, view):
+        token = request.META.get('HTTP_AUTHORIZATION')
+        response = get_user_id(token)
+        if response:
+            #Guardar id de usuario
+            request.GET._mutable = True
+            request.GET['user_id'] = response.json()["user_id"]
+            return response.status_code == 200
+        else:
+            return False
+        

+ 5 - 2
app/api/views.py

@@ -1,16 +1,19 @@
 from rest_framework import viewsets
 from rest_framework.permissions import AllowAny
+from rest_framework.decorators import permission_classes
 from .models import Preport
 from .serializers import PreportSerializer
+from .permissions import IsOmixomUser
 
 
 class PreportViewSet(viewsets.ModelViewSet):
     # TODO: Mostrar solo los reportes del usuario
     def get_queryset(self):
-        qs = Preport.objects.all()
+        user_id = self.request.GET.get("user_id")
+        qs = Preport.objects.filter(user_id=user_id)
         return qs
 
     serializer_class = PreportSerializer
 
     # TODO: Implementar la permission class para checkear el token del usuario y vea que clases
-    permission_classes = [AllowAny]
+    permission_classes = [IsOmixomUser]

+ 2 - 0
app/preports/settings.py

@@ -127,3 +127,5 @@ STATIC_URL = 'static/'
 # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
 
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+CLIMA_URL = os.getenv("CLIMA_URL")

+ 5 - 0
app/requirements.txt

@@ -1,10 +1,15 @@
 asgiref==3.5.1
+certifi==2022.5.18.1
+charset-normalizer==2.0.12
 Django==4.0.4
 django-filter==21.1
 djangorestframework==3.13.1
+idna==3.3
 importlib-metadata==4.11.3
 Markdown==3.3.7
 psycopg2-binary==2.9.3
 pytz==2022.1
+requests==2.27.1
 sqlparse==0.4.2
+urllib3==1.26.9
 zipp==3.8.0