Skip to content

Commit

Permalink
Merge pull request #154 from janash/user-groups
Browse files Browse the repository at this point in the history
Update logic for adding/editing users
  • Loading branch information
paulsaxe authored Jun 2, 2024
2 parents 3b77fdf + 7003d79 commit dafd1c1
Showing 1 changed file with 24 additions and 33 deletions.
57 changes: 24 additions & 33 deletions seamm_dashboard/routes/api/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,24 @@ def _process_user_body(request_data, original_user_data=None):
"Both username and password must be supplied to create new user",
status=400,
)
# Check if username exists.
if User.query.filter_by(username=username).first() is not None:
return Response(
f"User with username '{username}'' already exists", status=400
)

# Create starting user object with the appropriate information
user_info = {
"username": username,
"password": password,
"roles": [],
"groups": [],
"groups": request_data.get("groups", []),
"first_name": request_data.get("first_name", None),
"last_name": request_data.get("last_name", None),
"email": request_data.get("email", None),
}
user = User(**user_info)

# Check if username exists.
if User.query.filter_by(username=username).first() is not None:
return Response(
f"User with username '{username}'' already exists", status=400
)
user = User.create(**user_info)

else:
user = original_user_data
Expand All @@ -70,35 +74,22 @@ def _process_user_body(request_data, original_user_data=None):
if password:
user.password = password

possible_keys = ["roles", "groups", "first_name", "last_name", "email"]

map_values = {
"roles": Role,
"roles_values": [],
"groups": Group,
"group_values": [],
}

for key in possible_keys:
try:
if key == "roles" or key == "groups":
model = map_values[key]
for listed_value in request_data[key]:
is_model = model.query.filter_by(name=listed_value).first()
if not is_model:
model_map = {"roles": Role, "groups": Group}
keys = ["roles", "groups", "first_name", "last_name", "email"]

for key in keys:
if key in model_map:
model = model_map[key]
values = request_data.get(key, [])
for value in values:
item = model.query.filter_by(name=value).first()
if not item:
return Response(
f"{listed_value} is not an available value for {key}.",
status=400,
f"{value} is not an available value for {key}.", status=400
)
else:
if getattr(user, key) is None:
setattr(user, key, [])
getattr(user, key).append(is_model)
getattr(user, key).append(item)
else:
setattr(user, key, request_data[key])
except KeyError:
# Not a key in the body. Pass.
pass
setattr(user, key, request_data.get(key))

return user

Expand Down

0 comments on commit dafd1c1

Please sign in to comment.