1- import secrets
2- import string
3-
41from admin_api .serializers .user import (
52 OrganizationAdminSerializer ,
63 UserAdminPasswordChangeSerializer ,
74 UserAdminPasswordResetResponseSerializer ,
85 UserAdminSerializer ,
96 UserAdminSignInSerializer ,
107)
8+ from core .const .account import generate_random_password
119from core .const .tag import OpenAPITag
1210from core .permissions import IsSuperUser
1311from core .viewset .json_schema_viewset import JsonSchemaViewSet
@@ -34,6 +32,16 @@ class UserAdminViewSet(
3432 permission_classes = [IsSuperUser ]
3533 queryset = UserExt .objects .filter (is_active = True )
3634
35+ def create (self , request : request .Request , * args : tuple , ** kwargs : dict ) -> response .Response :
36+ serializer = self .get_serializer (data = request .data )
37+ serializer .is_valid (raise_exception = True )
38+ self .perform_create (serializer )
39+
40+ data = serializer .data
41+ data ["password" ] = serializer ._generated_password
42+ headers = self .get_success_headers (data )
43+ return response .Response (data = data , status = status .HTTP_201_CREATED , headers = headers )
44+
3745 @extend_schema (tags = [OpenAPITag .ADMIN_ACCOUNT ], responses = {status .HTTP_200_OK : UserAdminSerializer })
3846 @decorators .action (detail = False , methods = ["GET" ], permission_classes = [])
3947 def me (self , request : request .Request , * args : tuple , ** kwargs : dict ) -> response .Response :
@@ -67,8 +75,7 @@ def signout(self, request: request.Request, *args: tuple, **kwargs: dict) -> res
6775 )
6876 @decorators .action (detail = True , methods = ["DELETE" ], url_path = "password" )
6977 def reset_password (self , * args : tuple , ** kwargs : dict ) -> response .Response :
70- alphabet = string .ascii_letters + string .digits + string .punctuation
71- new_password = "" .join (secrets .choice (alphabet ) for _ in range (16 ))
78+ new_password = generate_random_password ()
7279
7380 user : UserExt = self .get_object ()
7481 user .set_password (new_password )
0 commit comments