This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-webui.git


The following commit(s) were added to refs/heads/main by this push:
     new cf0a23a  [Feature] Add the user password change api (#204)
cf0a23a is described below

commit cf0a23a840b2f2e298a9113fce383e5d2e94201a
Author: s7monk <[email protected]>
AuthorDate: Wed May 1 07:51:35 2024 +0800

    [Feature] Add the user password change api (#204)
---
 .../web/server/controller/UserController.java      | 15 +++++++++++++++
 .../paimon/web/server/service/UserService.java     |  8 ++++++++
 .../web/server/service/impl/UserServiceImpl.java   |  7 +++++++
 .../web/server/controller/UserControllerTest.java  | 22 ++++++++++++++++++++++
 4 files changed, 52 insertions(+)

diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/UserController.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/UserController.java
index 30158f8..25de1f5 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/UserController.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/UserController.java
@@ -125,4 +125,19 @@ public class UserController {
     public R<Void> delete(@PathVariable Integer[] userIds) {
         return userService.deleteUserByIds(userIds) > 0 ? R.succeed() : 
R.failed();
     }
+
+    /**
+     * Changes a user's password.
+     *
+     * @param user the user object containing the new password
+     * @return a response entity indicating success or failure
+     */
+    @SaCheckPermission("system:user:change:password")
+    @PostMapping("/change/password")
+    public R<Void> changePassword(@Validated @RequestBody User user) {
+        if (userService.getUserById(user.getId()) == null) {
+            return R.failed(USER_NOT_EXIST);
+        }
+        return userService.changePassword(user) ? R.succeed() : R.failed();
+    }
 }
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java
index 774d3a8..3bcc4b8 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/UserService.java
@@ -107,4 +107,12 @@ public interface UserService extends IService<User> {
      * @return the number of rows affected
      */
     int deleteUserByIds(Integer[] userIds);
+
+    /**
+     * Changes the user's password.
+     *
+     * @param user The user object containing the necessary password 
information.
+     * @return true if the password was successfully changed, false otherwise.
+     */
+    boolean changePassword(User user);
 }
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java
index 99f77be..d754828 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/UserServiceImpl.java
@@ -52,6 +52,7 @@ import 
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.DigestUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -250,6 +251,12 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
         return userMapper.deleteBatchIds(Arrays.asList(userIds));
     }
 
+    @Override
+    public boolean changePassword(User user) {
+        
user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
+        return this.updateById(user);
+    }
+
     private int insertUserRole(User user) {
         int rows = 1;
         if (user.getRoleIds() != null && user.getRoleIds().length > 0) {
diff --git 
a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/UserControllerTest.java
 
b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/UserControllerTest.java
index eebeb95..37ca6aa 100644
--- 
a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/UserControllerTest.java
+++ 
b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/UserControllerTest.java
@@ -22,6 +22,7 @@ import org.apache.paimon.web.server.data.model.User;
 import org.apache.paimon.web.server.data.result.PageR;
 import org.apache.paimon.web.server.data.result.R;
 import org.apache.paimon.web.server.data.vo.UserVO;
+import org.apache.paimon.web.server.mapper.UserMapper;
 import org.apache.paimon.web.server.util.ObjectMapperUtils;
 
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -29,6 +30,7 @@ import org.junit.jupiter.api.MethodOrderer;
 import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestMethodOrder;
+import org.springframework.beans.factory.annotation.Autowired;
 import 
org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.http.MediaType;
@@ -51,6 +53,8 @@ public class UserControllerTest extends ControllerTestBase {
     private static final int userId = 3;
     private static final String username = "test";
 
+    @Autowired private UserMapper userMapper;
+
     @Test
     @Order(1)
     public void testAddUser() throws Exception {
@@ -187,4 +191,22 @@ public class UserControllerTest extends ControllerTestBase 
{
         R<?> result = ObjectMapperUtils.fromJSON(delResponseString, R.class);
         assertEquals(200, result.getCode());
     }
+
+    @Test
+    public void testChangePassword() throws Exception {
+        User user = new User();
+        user.setId(2);
+        user.setPassword("common");
+        mockMvc.perform(
+                        MockMvcRequestBuilders.post(userPath + 
"/change/password")
+                                .cookie(cookie)
+                                .content(ObjectMapperUtils.toJSON(user))
+                                .contentType(MediaType.APPLICATION_JSON_VALUE)
+                                .accept(MediaType.APPLICATION_JSON_VALUE))
+                .andExpect(MockMvcResultMatchers.status().isOk())
+                .andDo(MockMvcResultHandlers.print());
+
+        User newUser = userMapper.selectById(2);
+        assertEquals("9efab2399c7c560b34de477b9aa0a465", 
newUser.getPassword());
+    }
 }

Reply via email to