vpn integration

This commit is contained in:
2026-04-11 22:07:59 +02:00
parent c4d27e9842
commit 00ac38d126
47 changed files with 945 additions and 749 deletions
+50 -38
View File
@@ -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