From 25db44ba5ef056ff9693582c9ee16b88b3ac5e91 Mon Sep 17 00:00:00 2001 From: Daniele Scasciafratte Date: Mon, 2 May 2022 17:27:25 +0200 Subject: [PATCH 1/5] 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 From a50ef874cd797e56b8b40fa0138142c4abad1e21 Mon Sep 17 00:00:00 2001 From: Daniele Scasciafratte Date: Mon, 2 May 2022 17:29:44 +0200 Subject: [PATCH 2/5] feat(rest): added documentation --- docs/api.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/api.rst b/docs/api.rst index 474bfe22..234d4a5b 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -46,6 +46,16 @@ Here is an example of a cURL request to create a ticket (using Basic authenticat --header 'Content-Type: application/json' \ --data-raw '{"queue": 1, "title": "Test Ticket API", "description": "Test create ticket from API", "submitter_email": "test@mail.com", "priority": 4}' +Accessing the endpoint ``/api/users/`` with a **POST** request will let you create a new user. + +You need to provide a JSON body with the following data : + +- **first_name**: first name +- **last_name**: last name +- **username**: username +- **email**: user email +- **password**: user password + PUT --- From 67949e83f9f6de745bff2a51ba8e6c0cae7b4ced Mon Sep 17 00:00:00 2001 From: Daniele Scasciafratte Date: Wed, 4 May 2022 18:51:02 +0200 Subject: [PATCH 3/5] added permission classes --- helpdesk/views/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/helpdesk/views/api.py b/helpdesk/views/api.py index b4ba189c..266f821f 100644 --- a/helpdesk/views/api.py +++ b/helpdesk/views/api.py @@ -31,3 +31,4 @@ class TicketViewSet(viewsets.ModelViewSet): class CreateUserView(CreateModelMixin, GenericViewSet): queryset = get_user_model().objects.all() serializer_class = UserSerializer + permission_classes = [IsAdminUser] From 8d3521764bcedd89d7205909292e22681cda797b Mon Sep 17 00:00:00 2001 From: Benbb96 Date: Fri, 13 May 2022 09:20:31 +0200 Subject: [PATCH 4/5] Update HTTPS link to demo --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index bc9df258..c592559f 100644 --- a/README.rst +++ b/README.rst @@ -18,7 +18,7 @@ contributors reaching far beyond Jutda. Complete documentation is available in the docs/ directory, or online at http://django-helpdesk.readthedocs.org/. -You can see a demo installation at http://django-helpdesk-demo.herokuapp.com/, +You can see a demo installation at https://django-helpdesk-demo.herokuapp.com/, or run a demo locally in just a couple steps! Demo Quickstart From 55eae0cb739e8b5273007a026ca6a0f76fee9017 Mon Sep 17 00:00:00 2001 From: Garret Wassermann Date: Sun, 12 Jun 2022 02:57:04 -0400 Subject: [PATCH 5/5] bump version to 0.3.5 --- demo/setup.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/setup.py b/demo/setup.py index 8a3604f9..35822723 100644 --- a/demo/setup.py +++ b/demo/setup.py @@ -13,7 +13,7 @@ project_root = os.path.dirname(here) NAME = 'django-helpdesk-demodesk' DESCRIPTION = 'A demo Django project using django-helpdesk' README = open(os.path.join(here, 'README.rst')).read() -VERSION = '0.3.4' +VERSION = '0.3.5' #VERSION = open(os.path.join(project_root, 'VERSION')).read().strip() AUTHOR = 'django-helpdesk team' URL = 'https://github.com/django-helpdesk/django-helpdesk' diff --git a/setup.py b/setup.py index 27890c57..91c864fc 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from distutils.util import convert_path from fnmatch import fnmatchcase from setuptools import setup, find_packages -version = '0.3.4' +version = '0.3.5' # Provided as an attribute, so you can append to these instead # of replicating them: