diff --git a/comrade/comrade_core/views.py b/comrade/comrade_core/views.py index 6ab335b..f579282 100644 --- a/comrade/comrade_core/views.py +++ b/comrade/comrade_core/views.py @@ -1,40 +1,28 @@ -import asyncio -import datetime -import json -import random -from typing import AsyncGenerator, Callable - -import redis from allauth.socialaccount.adapter import ( get_adapter as get_socialaccount_adapter, ) -from allauth.socialaccount.models import SocialApp - from comrade_core.models import Task -from comrade_core.serializers import GroupSerializer, TaskSerializer, UserSerializer -from django.conf import settings -from django.contrib.auth.models import Group, User -from django.http import HttpResponse, StreamingHttpResponse +from allauth.socialaccount.models import SocialApp +from django.contrib.auth import authenticate from django.shortcuts import render -from django_async_stream import AsyncStreamingHttpResponse -from django_eventstream import send_event -from redis import asyncio as aioredis -from rest_framework import permissions, viewsets +from rest_framework import generics, status +from rest_framework.authtoken.models import Token +from rest_framework.decorators import api_view from rest_framework.permissions import IsAuthenticated -# from adrf.views import APIView -from rest_framework.renderers import BaseRenderer, JSONRenderer +from rest_framework.request import Request +from rest_framework.response import Response from rest_framework.views import APIView +from .serializers import UserDetailSerializer def index(request): return render(request, "index.html") + def google(request): try: - provider = get_socialaccount_adapter().get_provider( - request, "google" - ) + provider = get_socialaccount_adapter().get_provider(request, "google") context = { "client_id": provider.app.client_id, } @@ -44,11 +32,10 @@ def google(request): } return render(request, "google.html", context=context) + def map(request): return render(request, "map.html") -from rest_framework import generics -from .serializers import UserDetailSerializer class UserDetailView(generics.RetrieveAPIView): serializer_class = UserDetailSerializer @@ -57,18 +44,36 @@ class UserDetailView(generics.RetrieveAPIView): def get_object(self): return self.request.user # Return the currently authenticated user -from django.contrib.auth import authenticate -from rest_framework.response import Response -from rest_framework.authtoken.models import Token -from rest_framework import status -from rest_framework.decorators import api_view -@api_view(['POST']) +@api_view(["POST"]) def login_view(request): - username = request.data.get('username') - password = request.data.get('password') + username = request.data.get("username") + password = request.data.get("password") user = authenticate(username=username, password=password) if user is not None: token, created = Token.objects.get_or_create(user=user) - return Response({'token': token.key}, status=status.HTTP_200_OK) - return Response({'error': 'Invalid Credentials'}, status=status.HTTP_401_UNAUTHORIZED) + return Response({"token": token.key}, status=status.HTTP_200_OK) + + return Response( + {"error": "Invalid Credentials"}, status=status.HTTP_401_UNAUTHORIZED + ) + + +# POST /task/{taskId}/start +class MyPostView(APIView): + permission_classes = [IsAuthenticated] + + def post(self, request: Request): + taskId = request.query_params["taskId"] + task = None + try: + task = Task.objects.get(pk=taskId) + except Task.DoesNotExist as e: + raise e + + task.start(request.user) + + return Response( + {"message": "Task started!"}, + status=status.HTTP_200_OK, + )