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.setUsername(dbUserName);
// 写入账号体系类型 // 写入账号体系类型
newUser.setAccountType(loginType); newUser.setAccountType(loginType);
newUser.setOriginUsername(bizUser.getUsername());
// 同步素材 // 同步素材
newUser.setEmail(bizUser.getEmail()); newUser.setEmail(bizUser.getEmail());

View File

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

View File

@ -56,7 +56,7 @@ public class PwjbUserInfoController {
pwjbUserInfoDO.setGmtModified(new Date()); pwjbUserInfoDO.setGmtModified(new Date());
// 二次加密密码 // 二次加密密码
final String password = pwjbUserInfoDO.getPassword(); final String password = request.getPassword();
if (StringUtils.isNotEmpty(password)) { if (StringUtils.isNotEmpty(password)) {
pwjbUserInfoDO.setPassword(DigestUtils.rePassword(password, pwjbUserInfoDO.getUsername())); pwjbUserInfoDO.setPassword(DigestUtils.rePassword(password, pwjbUserInfoDO.getUsername()));
} }
@ -76,9 +76,10 @@ public class PwjbUserInfoController {
throw new IllegalArgumentException("Inconsistent passwords"); 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()) { 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(); 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.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import tech.powerjob.common.response.ResultDTO; import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.common.serialize.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.auth.PowerJobUser; 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.common.PowerJobAuthException;
import tech.powerjob.server.auth.service.WebAuthService; import tech.powerjob.server.auth.service.WebAuthService;
import tech.powerjob.server.auth.service.login.PowerJobLoginService; 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.AppInfoDO;
import tech.powerjob.server.persistence.remote.model.NamespaceDO; import tech.powerjob.server.persistence.remote.model.NamespaceDO;
import tech.powerjob.server.persistence.remote.model.UserInfoDO; 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.persistence.remote.repository.UserInfoRepository;
import tech.powerjob.server.web.converter.NamespaceConverter; import tech.powerjob.server.web.converter.NamespaceConverter;
import tech.powerjob.server.web.converter.UserConverter; 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.AppBaseVO;
import tech.powerjob.server.web.response.NamespaceBaseVO; import tech.powerjob.server.web.response.NamespaceBaseVO;
import tech.powerjob.server.web.response.UserBaseVO; import tech.powerjob.server.web.response.UserBaseVO;
@ -35,10 +33,7 @@ import tech.powerjob.server.web.response.UserDetailVO;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -50,8 +45,6 @@ import java.util.stream.Collectors;
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
public class UserInfoController { public class UserInfoController {
@Resource
private UserService userService;
@Resource @Resource
private UserInfoRepository userInfoRepository; private UserInfoRepository userInfoRepository;
@Resource @Resource
@ -63,6 +56,50 @@ public class UserInfoController {
@Resource @Resource
private AppInfoRepository appInfoRepository; 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") @GetMapping("/list")
public ResultDTO<List<UserBaseVO>> list(@RequestParam(required = false) String name) { public ResultDTO<List<UserBaseVO>> list(@RequestParam(required = false) String name) {
@ -106,8 +143,10 @@ public class UserInfoController {
return; return;
} }
NamespaceBaseVO namespaceBaseVO = JsonUtils.parseObjectIgnoreException(JsonUtils.toJSONString(NamespaceConverter.do2BaseVo(namespaceDO)), NamespaceBaseVO.class); NamespaceBaseVO namespaceBaseVO = JsonUtils.parseObjectIgnoreException(JsonUtils.toJSONString(NamespaceConverter.do2BaseVo(namespaceDO)), NamespaceBaseVO.class);
namespaceBaseVO.genFrontName(); if (namespaceBaseVO != null) {
namespaceBaseVOS.add(namespaceBaseVO); namespaceBaseVO.genFrontName();
namespaceBaseVOS.add(namespaceBaseVO);
}
}); });
}); });
userDetailVO.setRole2NamespaceList(role2NamespaceBaseVo); userDetailVO.setRole2NamespaceList(role2NamespaceBaseVo);

View File

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

View File

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

View File

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