diff --git a/backend/server/main/urls.py b/backend/server/main/urls.py index e9eb1f7..f13410d 100644 --- a/backend/server/main/urls.py +++ b/backend/server/main/urls.py @@ -4,7 +4,7 @@ from django.views.generic import RedirectView, TemplateView from django.conf import settings from django.conf.urls.static import static from adventures import urls as adventures -from users.views import ChangeEmailView, IsRegistrationDisabled +from users.views import ChangeEmailView, IsRegistrationDisabled, PublicUserListView, PublicUserDetailView from .views import get_csrf_token from drf_yasg.views import get_schema_view @@ -22,6 +22,8 @@ urlpatterns = [ path('auth/change-email/', ChangeEmailView.as_view(), name='change_email'), path('auth/is-registration-disabled/', IsRegistrationDisabled.as_view(), name='is_registration_disabled'), + path('auth/users', PublicUserListView.as_view(), name='public-user-list'), + path('auth/user/', PublicUserDetailView.as_view(), name='public-user-detail'), path('csrf/', get_csrf_token, name='get_csrf_token'), re_path(r'^$', TemplateView.as_view( diff --git a/backend/server/users/serializers.py b/backend/server/users/serializers.py index d9628ba..5d3e3b4 100644 --- a/backend/server/users/serializers.py +++ b/backend/server/users/serializers.py @@ -174,7 +174,7 @@ class CustomUserDetailsSerializer(UserDetailsSerializer): class Meta(UserDetailsSerializer.Meta): model = CustomUser - fields = UserDetailsSerializer.Meta.fields + ('profile_pic',) + fields = UserDetailsSerializer.Meta.fields + ('profile_pic', 'uuid', 'public_profile') def to_representation(self, instance): representation = super().to_representation(instance) diff --git a/backend/server/users/views.py b/backend/server/users/views.py index 2c8021d..f01e4da 100644 --- a/backend/server/users/views.py +++ b/backend/server/users/views.py @@ -6,6 +6,11 @@ from .serializers import ChangeEmailSerializer from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from django.conf import settings +from django.shortcuts import get_object_or_404 +from django.contrib.auth import get_user_model +from .serializers import CustomUserDetailsSerializer as PublicUserSerializer + +User = get_user_model() class ChangeEmailView(APIView): permission_classes = [IsAuthenticated] @@ -41,4 +46,35 @@ class IsRegistrationDisabled(APIView): ) def get(self, request): return Response({"is_disabled": settings.DISABLE_REGISTRATION, "message": settings.DISABLE_REGISTRATION_MESSAGE}, status=status.HTTP_200_OK) - \ No newline at end of file + +class PublicUserListView(APIView): + # Allow the listing of all public users + permission_classes = [] + + @swagger_auto_schema( + responses={ + 200: openapi.Response('List of public users'), + 400: 'Bad Request' + }, + operation_description="List public users." + ) + def get(self, request): + users = User.objects.filter(public_profile=True).exclude(id=request.user.id) + serializer = PublicUserSerializer(users, many=True) + return Response(serializer.data, status=status.HTTP_200_OK) + +class PublicUserDetailView(APIView): + # Allow the retrieval of a single public user + permission_classes = [] + + @swagger_auto_schema( + responses={ + 200: openapi.Response('Public user information'), + 400: 'Bad Request' + }, + operation_description="Get public user information." + ) + def get(self, request, user_id): + user = get_object_or_404(User, uuid=user_id, public_profile=True) + serializer = PublicUserSerializer(user) + return Response(serializer.data, status=status.HTTP_200_OK)