From ead341a7e1ad0bf80cc08ce2a69310dac8a73021 Mon Sep 17 00:00:00 2001 From: datatab Date: Tue, 25 Apr 2023 19:34:57 +0200 Subject: [PATCH] Admin interface: Change display name (#2849) --- backend/oasst_backend/api/v1/users.py | 3 ++- backend/oasst_backend/user_repository.py | 5 ++++- website/src/lib/oasst_api_client.ts | 5 +++-- website/src/pages/admin/manage_user/[id].tsx | 2 +- website/src/pages/api/admin/update_user.ts | 4 ++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/backend/oasst_backend/api/v1/users.py b/backend/oasst_backend/api/v1/users.py index 6cfc12a5e1..d49739c0ef 100644 --- a/backend/oasst_backend/api/v1/users.py +++ b/backend/oasst_backend/api/v1/users.py @@ -188,6 +188,7 @@ def get_user( @router.put("/{user_id}", status_code=HTTP_204_NO_CONTENT) def update_user( user_id: UUID, + display_name: Optional[str] = None, enabled: Optional[bool] = None, notes: Optional[str] = None, show_on_leaderboard: Optional[bool] = None, @@ -199,7 +200,7 @@ def update_user( Update a user by global user ID. Only trusted clients can update users. """ ur = UserRepository(db, api_client) - ur.update_user(user_id, enabled, notes, show_on_leaderboard, tos_acceptance) + ur.update_user(user_id, display_name, enabled, notes, show_on_leaderboard, tos_acceptance) @router.delete("/{user_id}", status_code=HTTP_204_NO_CONTENT) diff --git a/backend/oasst_backend/user_repository.py b/backend/oasst_backend/user_repository.py index 1f87d85567..13c84074a9 100644 --- a/backend/oasst_backend/user_repository.py +++ b/backend/oasst_backend/user_repository.py @@ -71,6 +71,7 @@ def query_frontend_user( def update_user( self, id: UUID, + display_name: Optional[str] = None, enabled: Optional[bool] = None, notes: Optional[str] = None, show_on_leaderboard: Optional[bool] = None, @@ -86,7 +87,6 @@ def update_user( raise OasstError("Forbidden", OasstErrorCode.API_CLIENT_NOT_AUTHORIZED, HTTP_403_FORBIDDEN) user: User = self.db.query(User).filter(User.id == id).first() - if user is None: raise OasstError("User not found", OasstErrorCode.USER_NOT_FOUND, HTTP_404_NOT_FOUND) @@ -98,8 +98,11 @@ def update_user( user.show_on_leaderboard = show_on_leaderboard if tos_acceptance: user.tos_acceptance_date = utcnow() + if display_name is not None: + user.display_name = display_name self.db.add(user) + return user @managed_tx_method(CommitMode.COMMIT) diff --git a/website/src/lib/oasst_api_client.ts b/website/src/lib/oasst_api_client.ts index c9064c4c04..ec614b2341 100644 --- a/website/src/lib/oasst_api_client.ts +++ b/website/src/lib/oasst_api_client.ts @@ -319,10 +319,11 @@ export class OasstApiClient { user_id: string, is_enabled: boolean, notes: string, - show_on_leaderboard: boolean + show_on_leaderboard: boolean, + display_name: string ): Promise { await this.put( - `/api/v1/users/${user_id}?enabled=${is_enabled}¬es=${notes}&show_on_leaderboard=${show_on_leaderboard}` + `/api/v1/users/${user_id}?enabled=${is_enabled}¬es=${notes}&show_on_leaderboard=${show_on_leaderboard}&display_name=${display_name}` ); } diff --git a/website/src/pages/admin/manage_user/[id].tsx b/website/src/pages/admin/manage_user/[id].tsx index ec3840b684..f1a1c2103c 100644 --- a/website/src/pages/admin/manage_user/[id].tsx +++ b/website/src/pages/admin/manage_user/[id].tsx @@ -103,7 +103,7 @@ const ManageUser = ({ user }: InferGetServerSidePropsType Display Name - + Role diff --git a/website/src/pages/api/admin/update_user.ts b/website/src/pages/api/admin/update_user.ts index 2b2af5e2a1..b2b2cb7bd8 100644 --- a/website/src/pages/api/admin/update_user.ts +++ b/website/src/pages/api/admin/update_user.ts @@ -9,7 +9,7 @@ import { getFrontendUserIdForUser } from "src/lib/users"; */ const handler = withAnyRole(["admin", "moderator"], async (req, res, token) => { // id is the 'username' from python backend, user_id is 'id' from the backend - const { id, user_id, notes, role, show_on_leaderboard, auth_method } = req.body; + const { id, user_id, notes, role, show_on_leaderboard, display_name, auth_method } = req.body; // mod can't update user role to mod or admin if (token.role === ROLES.MODERATOR && (role === ROLES.MODERATOR || role === ROLES.ADMIN)) { @@ -28,7 +28,7 @@ const handler = withAnyRole(["admin", "moderator"], async (req, res, token) => { }); // Tell the backend the user's enabled or not enabled status. - await oasstApiClient.set_user_status(user_id, role !== "banned", notes, show_on_leaderboard); + await oasstApiClient.set_user_status(user_id, role !== "banned", notes, show_on_leaderboard, display_name); res.status(200).json({}); });