feat: update UserMutationInput

This commit is contained in:
dettlaff 2024-11-15 04:19:24 +04:00
parent d3f24d958d
commit 36ddf2b111
4 changed files with 59 additions and 23 deletions

View file

@ -25,7 +25,14 @@ def get_users(
)
def create_user(username: str, password: str) -> None:
def create_user(
username: str,
password: Optional[str] = None,
displayname: Optional[str] = None,
email: Optional[str] = None,
directmemberof: Optional[list[str]] = None,
memberof: Optional[list[str]] = None,
) -> None:
if password == "":
raise PasswordIsEmpty("Password is empty")
@ -51,7 +58,14 @@ def delete_user(username: str) -> None:
return ACTIVE_USERS_PROVIDER.delete_user(username=username)
def update_user(username: str, password: str) -> None:
def update_user(
username: str,
password: Optional[str] = None,
displayname: Optional[str] = None,
email: Optional[str] = None,
directmemberof: Optional[list[str]] = None,
memberof: Optional[list[str]] = None,
) -> None:
if password == "":
raise PasswordIsEmpty("Password is empty")

View file

@ -1,4 +1,4 @@
import typing
from typing import Optional
from enum import Enum
import strawberry
@ -22,16 +22,14 @@ class UserType(Enum):
@strawberry.type
class User:
displayname: str
username: str
user_type: UserType
ssh_keys: typing.List[str] = strawberry.field(default_factory=list)
uuid: typing.Optional[str] = None
email: typing.Optional[str] = None
directmemberof: typing.Optional[typing.List[str]] = strawberry.field(
default_factory=list
)
memberof: typing.Optional[typing.List[str]] = strawberry.field(default_factory=list)
displayname: Optional[str] = None
ssh_keys: list[str] = strawberry.field(default_factory=list)
uuid: Optional[str] = None
email: Optional[str] = None
directmemberof: Optional[list[str]] = strawberry.field(default_factory=list)
memberof: Optional[list[str]] = strawberry.field(default_factory=list)
# userHomeFolderspace: UserHomeFolderUsage
@ -39,7 +37,7 @@ class User:
class UserMutationReturn(MutationReturnInterface):
"""Return type for user mutation"""
user: typing.Optional[User] = None
user: Optional[User] = None
def get_user_by_username(username: str) -> typing.Optional[User]:

View file

@ -1,6 +1,7 @@
#!/usr/bin/env python3
"""Users management module"""
# pylint: disable=too-few-public-methods
from typing import Optional
import strawberry
from selfprivacy_api.graphql import IsAuthenticated
@ -12,13 +13,17 @@ from selfprivacy_api.actions.ssh import (
InvalidPublicKey,
KeyAlreadyExists,
KeyNotFound,
create_ssh_key,
remove_ssh_key,
create_ssh_key as create_ssh_key_action,
remove_ssh_key as remove_ssh_key_action,
)
from selfprivacy_api.graphql.mutations.mutation_interface import (
GenericMutationReturn,
)
from selfprivacy_api.actions.users import create_user, delete_user, update_user
from selfprivacy_api.actions.users import (
create_user as create_user_action,
delete_user as delete_user_action,
update_user as update_user_action,
)
from selfprivacy_api.repositories.users.exceptions import (
PasswordIsEmpty,
UsernameForbidden,
@ -36,7 +41,12 @@ class UserMutationInput:
"""Input type for user mutation"""
username: str
password: str
password: Optional[str] = None
displayname: Optional[str] = None
email: Optional[str] = None
uuid: Optional[str] = None
directmemberof: Optional[list[str]] = strawberry.field(default_factory=list)
memberof: Optional[list[str]] = strawberry.field(default_factory=list)
@strawberry.input
@ -54,7 +64,14 @@ class UsersMutations:
@strawberry.mutation(permission_classes=[IsAuthenticated])
def create_user(self, user: UserMutationInput) -> UserMutationReturn:
try:
create_user(user.username, user.password)
create_user_action(
username=user.username,
password=user.password,
displayname=user.displayname,
email=user.email,
directmemberof=user.directmemberof,
memberof=user.memberof,
)
except PasswordIsEmpty as e:
return UserMutationReturn(
success=False,
@ -103,7 +120,7 @@ class UsersMutations:
@strawberry.mutation(permission_classes=[IsAuthenticated])
def delete_user(self, username: str) -> GenericMutationReturn:
try:
delete_user(username)
delete_user_action(username)
except UserNotFound as e:
return GenericMutationReturn(
success=False,
@ -127,7 +144,14 @@ class UsersMutations:
def update_user(self, user: UserMutationInput) -> UserMutationReturn:
"""Update user mutation"""
try:
update_user(user.username, user.password)
update_user_action(
username=user.username,
password=user.password,
displayname=user.displayname,
email=user.email,
directmemberof=user.directmemberof,
memberof=user.memberof,
)
except PasswordIsEmpty as e:
return UserMutationReturn(
success=False,
@ -153,7 +177,7 @@ class UsersMutations:
"""Add a new ssh key"""
try:
create_ssh_key(ssh_input.username, ssh_input.ssh_key)
create_ssh_key_action(ssh_input.username, ssh_input.ssh_key)
except KeyAlreadyExists:
return UserMutationReturn(
success=False,
@ -191,7 +215,7 @@ class UsersMutations:
"""Remove ssh key from user"""
try:
remove_ssh_key(ssh_input.username, ssh_input.ssh_key)
remove_ssh_key_action(ssh_input.username, ssh_input.ssh_key)
except KeyNotFound:
return UserMutationReturn(
success=False,

View file

@ -15,11 +15,11 @@ class UserDataUser(BaseModel):
"""The user model from the userdata file"""
username: str
origin: UserDataUserOrigin
displayname: Optional[
str
] # in logic graphql will return "username" if "displayname" None
origin: UserDataUserOrigin
uuid: Optional[str]
email: Optional[str]
ssh_keys: Optional[list[str]]