vpn integration
This commit is contained in:
+50
-38
@@ -1,20 +1,19 @@
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.views.generic import CreateView
|
||||
from django.contrib.auth import login
|
||||
from django.urls import reverse_lazy
|
||||
from django.db.models import Count, Sum, F, IntegerField
|
||||
from django.db.models.functions import Coalesce
|
||||
import shutil
|
||||
|
||||
from rest_framework.viewsets import ModelViewSet, GenericViewSet
|
||||
from django.contrib.auth import login
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.db.models import Count, Sum
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import CreateView
|
||||
from rest_framework import mixins
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
import shutil
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
|
||||
from .models import User, FriendRequest, Invitation
|
||||
from .forms import RegisterForm
|
||||
from .serializers import UserSerializer, FriendRequestSerializer, InvitationSerializer
|
||||
|
||||
from .models import FriendRequest, Invitation, User
|
||||
from .serializers import FriendRequestSerializer, UserSerializer
|
||||
|
||||
|
||||
class UserLoginView(LoginView):
|
||||
@@ -31,7 +30,9 @@ class RegisterView(CreateView):
|
||||
invitation = None
|
||||
|
||||
def get_form(self, form_class=None):
|
||||
self.invitation = Invitation.objects.get(token=self.kwargs.get("token"), user__isnull=True)
|
||||
self.invitation = Invitation.objects.get(
|
||||
token=self.kwargs.get("token"), user__isnull=True
|
||||
)
|
||||
return super().get_form(form_class)
|
||||
|
||||
def form_valid(self, form):
|
||||
@@ -42,9 +43,7 @@ class RegisterView(CreateView):
|
||||
return r
|
||||
|
||||
|
||||
class UserViewSet(mixins.RetrieveModelMixin,
|
||||
mixins.ListModelMixin,
|
||||
GenericViewSet):
|
||||
class UserViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, GenericViewSet):
|
||||
queryset = User.objects.all().annotate(
|
||||
count_torrent=Count("torrents") + Count("torrents_shares")
|
||||
)
|
||||
@@ -72,18 +71,22 @@ class UserViewSet(mixins.RetrieveModelMixin,
|
||||
return Response({"success": False, "message": "Already friend"})
|
||||
elif FriendRequest.objects.filter(sender=user, receiver=receiver).exists():
|
||||
# déjà une demande en attente
|
||||
return Response({"success": False, "message": "Friend request Already sent"})
|
||||
return Response(
|
||||
{"success": False, "message": "Friend request Already sent"}
|
||||
)
|
||||
elif FriendRequest.objects.filter(sender=receiver, receiver=user).exists():
|
||||
# friend request en cours, on accepte
|
||||
FriendRequest.objects.filter(sender=receiver, receiver=user).delete()
|
||||
user.friends.add(receiver)
|
||||
return Response({"success": True, "message": f"{receiver.username} added to your friend list"})
|
||||
return Response(
|
||||
{
|
||||
"success": True,
|
||||
"message": f"{receiver.username} added to your friend list",
|
||||
}
|
||||
)
|
||||
else:
|
||||
# aucune demande en cours, on créer un friend request
|
||||
FriendRequest.objects.create(
|
||||
sender=user,
|
||||
receiver=receiver
|
||||
)
|
||||
FriendRequest.objects.create(sender=user, receiver=receiver)
|
||||
return Response({"success": True, "message": "Request sent"})
|
||||
|
||||
@action(methods=["get"], detail=True)
|
||||
@@ -91,8 +94,13 @@ class UserViewSet(mixins.RetrieveModelMixin,
|
||||
friend = User.objects.get(pk=pk)
|
||||
if self.request.user.friends.filter(pk=friend.pk).exists():
|
||||
self.request.user.friends.remove(friend)
|
||||
return Response({"success": True, "message": f"The friend {friend.username} successfully removed"})
|
||||
return Response({"success": False, "message": f"error"})
|
||||
return Response(
|
||||
{
|
||||
"success": True,
|
||||
"message": f"The friend {friend.username} successfully removed",
|
||||
}
|
||||
)
|
||||
return Response({"success": False, "message": "error"})
|
||||
|
||||
@action(methods=["get"], detail=False)
|
||||
def user_stats(self, request):
|
||||
@@ -104,23 +112,27 @@ class UserViewSet(mixins.RetrieveModelMixin,
|
||||
|
||||
disk_usage = shutil.disk_usage("/")
|
||||
|
||||
return Response({
|
||||
"torrents_size": stats["total_size"],
|
||||
"torrents_len": stats["total_torrent"],
|
||||
"torrent_len_shared": stats["total_shared_torrent"],
|
||||
"torrents_total_len": stats["total_torrent"] + stats["total_shared_torrent"],
|
||||
"user_max_size": request.user.max_size,
|
||||
"user_usage_percent": (stats["total_size"] / request.user.max_size) * 100,
|
||||
"disk_total": disk_usage.total,
|
||||
"disk_used": disk_usage.used,
|
||||
"disk_free": disk_usage.free,
|
||||
"disk_usage_percent": (disk_usage.used / disk_usage.total) * 100,
|
||||
})
|
||||
return Response(
|
||||
{
|
||||
"torrents_size": stats["total_size"],
|
||||
"torrents_len": stats["total_torrent"],
|
||||
"torrent_len_shared": stats["total_shared_torrent"],
|
||||
"torrents_total_len": stats["total_torrent"]
|
||||
+ stats["total_shared_torrent"],
|
||||
"user_max_size": request.user.max_size,
|
||||
"user_usage_percent": (stats["total_size"] / request.user.max_size)
|
||||
* 100,
|
||||
"disk_total": disk_usage.total,
|
||||
"disk_used": disk_usage.used,
|
||||
"disk_free": disk_usage.free,
|
||||
"disk_usage_percent": (disk_usage.used / disk_usage.total) * 100,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class FriendRequestViewSet(mixins.ListModelMixin,
|
||||
mixins.DestroyModelMixin,
|
||||
GenericViewSet):
|
||||
class FriendRequestViewSet(
|
||||
mixins.ListModelMixin, mixins.DestroyModelMixin, GenericViewSet
|
||||
):
|
||||
queryset = FriendRequest.objects.all()
|
||||
serializer_class = FriendRequestSerializer
|
||||
|
||||
|
||||
Reference in New Issue
Block a user