Skip to content

Commit b7106e2

Browse files
committed
feat: 계정 생성 시 랜덤한 비밀번호를 사용하도록 수정
1 parent 5bdc34c commit b7106e2

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

app/admin_api/serializers/user.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import functools
22
import typing
33

4-
from core.const.account import INITIAL_ADMIN_PASSWORD
4+
from core.const.account import generate_random_password
55
from core.const.serializer import COMMON_ADMIN_FIELDS
66
from core.serializer.base_abstract_serializer import BaseAbstractSerializer
77
from core.serializer.json_schema_serializer import JsonSchemaSerializer
@@ -36,7 +36,9 @@ class Meta:
3636
}
3737

3838
def create(self, validated_data: dict[str, typing.Any]) -> UserExt:
39-
return UserExt.objects.create_user(**validated_data, password=INITIAL_ADMIN_PASSWORD)
39+
password = generate_random_password()
40+
self._generated_password = password
41+
return UserExt.objects.create_user(**validated_data, password=password)
4042

4143

4244
class UserAdminSignInSerializerData(typing.TypedDict):

app/admin_api/views/user.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
import secrets
2-
import string
3-
41
from 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
119
from core.const.tag import OpenAPITag
1210
from core.permissions import IsSuperUser
1311
from 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)

app/core/const/account.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1-
INITIAL_ADMIN_PASSWORD = "pyconkradmin12!@" # nosec: B105
1+
import secrets
2+
import string
3+
4+
5+
def generate_random_password(length: int = 16) -> str:
6+
alphabet = string.ascii_letters + string.digits + string.punctuation
7+
return "".join(secrets.choice(alphabet) for _ in range(length))

0 commit comments

Comments
 (0)