fix: [auth] Bugs in user login module

This commit is contained in:
tjq 2024-02-13 20:34:45 +08:00
parent 6539c66226
commit 9419340829
7 changed files with 69 additions and 18 deletions

View File

@ -94,6 +94,7 @@ public class PowerJobLoginServiceImpl implements PowerJobLoginService {
newUser.setUsername(dbUserName);
// 写入账号体系类型
newUser.setAccountType(loginType);
newUser.setOriginUsername(bizUser.getUsername());
// 同步素材
newUser.setEmail(bizUser.getEmail());

View File

@ -55,10 +55,16 @@ public class UserInfoDO {
*/
private String webHook;
/**
* 扩展字段
* 扩展字段 for 第三方
* PowerJob 内部不允许使用该字段
*/
private String extra;
/**
* 原始账号 username
*/
private String originUsername;
private Date gmtCreate;
private Date gmtModified;

View File

@ -56,7 +56,7 @@ public class PwjbUserInfoController {
pwjbUserInfoDO.setGmtModified(new Date());
// 二次加密密码
final String password = pwjbUserInfoDO.getPassword();
final String password = request.getPassword();
if (StringUtils.isNotEmpty(password)) {
pwjbUserInfoDO.setPassword(DigestUtils.rePassword(password, pwjbUserInfoDO.getUsername()));
}
@ -76,9 +76,10 @@ public class PwjbUserInfoController {
throw new IllegalArgumentException("Inconsistent passwords");
}
Optional<PwjbUserInfoDO> userOpt = pwjbUserInfoRepository.findById(changePasswordRequest.getUserId());
String username = changePasswordRequest.getUsername();
Optional<PwjbUserInfoDO> userOpt = pwjbUserInfoRepository.findByUsername(username);
if (!userOpt.isPresent()) {
throw new IllegalArgumentException("can't find user by userId: " + changePasswordRequest.getUserId());
throw new IllegalArgumentException("can't find user by username: " + username);
}
PwjbUserInfoDO dbUser = userOpt.get();

View File

@ -3,13 +3,11 @@ package tech.powerjob.server.web.controller;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.auth.PowerJobUser;
@ -19,7 +17,6 @@ import tech.powerjob.server.auth.common.AuthErrorCode;
import tech.powerjob.server.auth.common.PowerJobAuthException;
import tech.powerjob.server.auth.service.WebAuthService;
import tech.powerjob.server.auth.service.login.PowerJobLoginService;
import tech.powerjob.server.core.service.UserService;
import tech.powerjob.server.persistence.remote.model.AppInfoDO;
import tech.powerjob.server.persistence.remote.model.NamespaceDO;
import tech.powerjob.server.persistence.remote.model.UserInfoDO;
@ -28,6 +25,7 @@ import tech.powerjob.server.persistence.remote.repository.NamespaceRepository;
import tech.powerjob.server.persistence.remote.repository.UserInfoRepository;
import tech.powerjob.server.web.converter.NamespaceConverter;
import tech.powerjob.server.web.converter.UserConverter;
import tech.powerjob.server.web.request.ModifyUserInfoRequest;
import tech.powerjob.server.web.response.AppBaseVO;
import tech.powerjob.server.web.response.NamespaceBaseVO;
import tech.powerjob.server.web.response.UserBaseVO;
@ -35,10 +33,7 @@ import tech.powerjob.server.web.response.UserDetailVO;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -50,8 +45,6 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("/user")
public class UserInfoController {
@Resource
private UserService userService;
@Resource
private UserInfoRepository userInfoRepository;
@Resource
@ -63,6 +56,50 @@ public class UserInfoController {
@Resource
private AppInfoRepository appInfoRepository;
@SneakyThrows
@PostMapping("/modify")
public ResultDTO<Void> modifyUser(@RequestBody ModifyUserInfoRequest modifyUserInfoRequest, HttpServletRequest httpServletRequest) {
Optional<PowerJobUser> powerJobUserOpt = powerJobLoginService.ifLogin(httpServletRequest);
if (!powerJobUserOpt.isPresent()) {
throw new PowerJobAuthException(AuthErrorCode.USER_NOT_LOGIN);
}
Long userId = modifyUserInfoRequest.getId();
Optional<UserInfoDO> userOpt = userInfoRepository.findById(userId);
if (!userOpt.isPresent()) {
throw new IllegalArgumentException("can't find user by userId:" + userId);
}
if (!Objects.equals(powerJobUserOpt.get().getId(), userId)) {
throw new IllegalAccessException("no permission to change others user info");
}
UserInfoDO dbUser = userOpt.get();
// 拷入允许修改的内容
if (StringUtils.isNotEmpty(modifyUserInfoRequest.getNick())) {
dbUser.setNick(modifyUserInfoRequest.getNick());
}
if (StringUtils.isNotEmpty(modifyUserInfoRequest.getPhone())) {
dbUser.setPhone(modifyUserInfoRequest.getPhone());
}
if (StringUtils.isNotEmpty(modifyUserInfoRequest.getEmail())) {
dbUser.setEmail(modifyUserInfoRequest.getEmail());
}
if (StringUtils.isNotEmpty(modifyUserInfoRequest.getWebHook())) {
dbUser.setWebHook(modifyUserInfoRequest.getWebHook());
}
if (StringUtils.isNotEmpty(modifyUserInfoRequest.getExtra())) {
dbUser.setExtra(modifyUserInfoRequest.getExtra());
}
dbUser.setGmtModified(new Date());
userInfoRepository.saveAndFlush(dbUser);
return ResultDTO.success(null);
}
@GetMapping("/list")
public ResultDTO<List<UserBaseVO>> list(@RequestParam(required = false) String name) {
@ -106,8 +143,10 @@ public class UserInfoController {
return;
}
NamespaceBaseVO namespaceBaseVO = JsonUtils.parseObjectIgnoreException(JsonUtils.toJSONString(NamespaceConverter.do2BaseVo(namespaceDO)), NamespaceBaseVO.class);
namespaceBaseVO.genFrontName();
namespaceBaseVOS.add(namespaceBaseVO);
if (namespaceBaseVO != null) {
namespaceBaseVO.genFrontName();
namespaceBaseVOS.add(namespaceBaseVO);
}
});
});
userDetailVO.setRole2NamespaceList(role2NamespaceBaseVo);

View File

@ -13,7 +13,7 @@ import java.io.Serializable;
@Data
public class ChangePasswordRequest implements Serializable {
private Long userId;
private String username;
private String oldPassword;

View File

@ -26,4 +26,6 @@ public class ModifyUserInfoRequest {
* 邮箱地址
*/
private String email;
private String extra;
}

View File

@ -39,6 +39,8 @@ public class UserDetailVO extends UserBaseVO {
* webHook
*/
private String webHook;
private String originUsername;
/**
* 扩展字段
*/