From 25db44ba5ef056ff9693582c9ee16b88b3ac5e91 Mon Sep 17 00:00:00 2001 From: Daniele Scasciafratte Date: Mon, 2 May 2022 17:27:25 +0200 Subject: [PATCH] feat(rest): create user --- helpdesk/serializers.py | 16 ++++++++++++++++ helpdesk/urls.py | 3 ++- helpdesk/views/api.py | 10 +++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/helpdesk/serializers.py b/helpdesk/serializers.py index eb0cc447..b5734c49 100644 --- a/helpdesk/serializers.py +++ b/helpdesk/serializers.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from django.contrib.auth.models import User from django.contrib.humanize.templatetags import humanize from rest_framework.exceptions import ValidationError @@ -110,3 +111,18 @@ class TicketSerializer(serializers.ModelSerializer): instance = super().update(instance, validated_data) instance.save_custom_field_values(validated_data) return instance + + +class UserSerializer(serializers.ModelSerializer): + password = serializers.CharField(write_only=True) + + class Meta: + model = User + fields = ('first_name', 'last_name', 'username', 'email', 'password') + + def create(self, validated_data): + user = super(UserSerializer, self).create(validated_data) + user.is_active = True + user.set_password(validated_data['password']) + user.save() + return user diff --git a/helpdesk/urls.py b/helpdesk/urls.py index 711ffa00..9c1ecb76 100644 --- a/helpdesk/urls.py +++ b/helpdesk/urls.py @@ -17,7 +17,7 @@ from rest_framework.routers import DefaultRouter from helpdesk.decorators import helpdesk_staff_member_required, protect_view from helpdesk.views import feeds, staff, public, login from helpdesk import settings as helpdesk_settings -from helpdesk.views.api import TicketViewSet +from helpdesk.views.api import TicketViewSet, CreateUserView if helpdesk_settings.HELPDESK_KB_ENABLED: from helpdesk.views import kb @@ -226,6 +226,7 @@ urlpatterns += [ if helpdesk_settings.HELPDESK_ACTIVATE_API_ENDPOINT: router = DefaultRouter() router.register(r'tickets', TicketViewSet, basename='ticket') + router.register(r'users', CreateUserView, basename='user') urlpatterns += [ url(r'^api/', include(router.urls)) ] diff --git a/helpdesk/views/api.py b/helpdesk/views/api.py index dbeabf7c..b4ba189c 100644 --- a/helpdesk/views/api.py +++ b/helpdesk/views/api.py @@ -1,8 +1,11 @@ from rest_framework import viewsets from rest_framework.permissions import IsAdminUser +from rest_framework.viewsets import GenericViewSet +from rest_framework.mixins import CreateModelMixin +from django.contrib.auth import get_user_model from helpdesk.models import Ticket -from helpdesk.serializers import TicketSerializer +from helpdesk.serializers import TicketSerializer, UserSerializer class TicketViewSet(viewsets.ModelViewSet): @@ -23,3 +26,8 @@ class TicketViewSet(viewsets.ModelViewSet): ticket = super().get_object() ticket.set_custom_field_values() return ticket + + +class CreateUserView(CreateModelMixin, GenericViewSet): + queryset = get_user_model().objects.all() + serializer_class = UserSerializer