|
|
@@ -2,19 +2,23 @@ package cn.reghao.devops.manager.account.service.impl;
|
|
|
|
|
|
import cn.reghao.devops.manager.account.db.repository.RoleRepository;
|
|
|
import cn.reghao.devops.manager.account.db.repository.UserRepository;
|
|
|
-import cn.reghao.devops.manager.account.model.dto.UserCreateDto;
|
|
|
+import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
|
|
|
import cn.reghao.devops.manager.account.model.po.Role;
|
|
|
-import cn.reghao.devops.manager.account.service.UserService;
|
|
|
+import cn.reghao.devops.manager.account.service.AccountService;
|
|
|
import cn.reghao.jutil.jdk.security.Cryptor;
|
|
|
import cn.reghao.jutil.jdk.security.Md5Cryptor;
|
|
|
import cn.reghao.jutil.jdk.security.RandomString;
|
|
|
-import cn.reghao.devops.manager.account.model.dto.UserInfo;
|
|
|
-import cn.reghao.devops.manager.account.model.dto.UserRole;
|
|
|
+import cn.reghao.devops.manager.account.model.dto.AccountProfile;
|
|
|
+import cn.reghao.devops.manager.account.model.dto.AccountRole;
|
|
|
import cn.reghao.devops.manager.account.model.po.User;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.data.domain.PageRequest;
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Locale;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -24,43 +28,43 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
-public class UserServiceImpl implements UserService {
|
|
|
+public class AccountServiceImpl implements AccountService {
|
|
|
private final UserRepository userRepository;
|
|
|
- private RoleRepository roleRepository;
|
|
|
+ private final RoleRepository roleRepository;
|
|
|
private final Cryptor cryptor;
|
|
|
+ private final PasswordEncoder passwordEncoder;
|
|
|
|
|
|
- public UserServiceImpl(UserRepository userRepository, RoleRepository roleRepository) throws NoSuchAlgorithmException {
|
|
|
+ public AccountServiceImpl(UserRepository userRepository, RoleRepository roleRepository, PasswordEncoder passwordEncoder) throws NoSuchAlgorithmException {
|
|
|
this.userRepository = userRepository;
|
|
|
this.roleRepository = roleRepository;
|
|
|
this.cryptor = new Md5Cryptor();
|
|
|
+ this.passwordEncoder = passwordEncoder;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public User getUser(String username) {
|
|
|
- User user = userRepository.findByUsername(username);
|
|
|
- return user;
|
|
|
+ public void initAccount() {
|
|
|
+ List<User> list = userRepository.findAll(PageRequest.of(0, 1)).getContent();
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ String username = RandomString.getString(3).toLowerCase(Locale.ROOT);
|
|
|
+ String password = RandomString.getString(10);
|
|
|
+ CreateAccountDto createAccountDto = new CreateAccountDto(username, password);
|
|
|
+ createAccount(createAccountDto);
|
|
|
+ log.info("初始化完成, 帐号和密码分别是 {} 和 {}", username, password);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void createUser(UserCreateDto userCreateDto) {
|
|
|
- String username = userCreateDto.getUsername();
|
|
|
- User userEntity = userRepository.findByUsername(username);
|
|
|
- if (userEntity != null) {
|
|
|
- log.error("用户 {} 已存在", username);
|
|
|
- return;
|
|
|
- }
|
|
|
+ public void createAccount(CreateAccountDto createAccountDto) {
|
|
|
+ String username = createAccountDto.getUsername();
|
|
|
+ User user = userRepository.findByUsername(username);
|
|
|
+ if (user == null) {
|
|
|
+ String password = createAccountDto.getPassword();
|
|
|
+ String salt = RandomString.getSalt(64);
|
|
|
+ String encodedPasswd = passwordEncoder.encode(password + salt);
|
|
|
|
|
|
- int roleId = userCreateDto.getRoleId();
|
|
|
- Role role = roleRepository.findById(roleId).orElse(null);
|
|
|
- if (role == null) {
|
|
|
- log.error("角色 {} 不存在", roleId);
|
|
|
- return;
|
|
|
+ user = new User(username, encodedPasswd, salt);
|
|
|
+ userRepository.save(user);
|
|
|
}
|
|
|
-
|
|
|
- String password = userCreateDto.getPassword();
|
|
|
- User user = new User(username, password, Set.of(role.getTitle()));
|
|
|
- setEncryptPassword(user);
|
|
|
- userRepository.save(user);
|
|
|
}
|
|
|
|
|
|
private void setEncryptPassword(User user) {
|
|
|
@@ -73,7 +77,7 @@ public class UserServiceImpl implements UserService {
|
|
|
|
|
|
// TODO 密码修改后是否应该清除用户 session?
|
|
|
@Override
|
|
|
- public void modifyUserPassword(Integer userId, String newPassword) {
|
|
|
+ public void updateAccountPassword(Integer userId, String newPassword) {
|
|
|
User userEntity = userRepository.findById(userId).orElse(null);
|
|
|
if (userEntity == null) {
|
|
|
return;
|
|
|
@@ -85,33 +89,33 @@ public class UserServiceImpl implements UserService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void modifyUserInfo(UserInfo userInfo) {
|
|
|
- User userEntity = userRepository.findById(userInfo.getUserId()).orElse(null);
|
|
|
+ public void updateAccountProfile(AccountProfile accountProfile) {
|
|
|
+ User userEntity = userRepository.findById(accountProfile.getUserId()).orElse(null);
|
|
|
if (userEntity == null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- userEntity.setScreenName(userInfo.getScreenName());
|
|
|
- userEntity.setMobile(userInfo.getMobile());
|
|
|
- userEntity.setEmail(userInfo.getEmail());
|
|
|
+ userEntity.setScreenName(accountProfile.getScreenName());
|
|
|
+ userEntity.setMobile(accountProfile.getMobile());
|
|
|
+ userEntity.setEmail(accountProfile.getEmail());
|
|
|
userRepository.save(userEntity);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void setUserRoles(UserRole userRole) {
|
|
|
- int userId = userRole.getUserId();
|
|
|
+ public void updateAccountRole(AccountRole accountRole) {
|
|
|
+ int userId = accountRole.getUserId();
|
|
|
User userEntity = userRepository.findById(userId).orElse(null);
|
|
|
if (userEntity == null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- Set<String> roles = userRole.getRoles().stream().map(Role::getTitle).collect(Collectors.toSet());
|
|
|
+ Set<String> roles = accountRole.getRoles().stream().map(Role::getTitle).collect(Collectors.toSet());
|
|
|
userEntity.setRole(roles);
|
|
|
userRepository.save(userEntity);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void setUserStatus(Integer userId, Boolean enable) {
|
|
|
+ public void updateAccountStatus(Integer userId, Boolean enable) {
|
|
|
User userEntity = userRepository.findById(userId).orElse(null);
|
|
|
if (userEntity == null) {
|
|
|
return;
|
|
|
@@ -121,9 +125,8 @@ public class UserServiceImpl implements UserService {
|
|
|
userRepository.save(userEntity);
|
|
|
}
|
|
|
|
|
|
- // TODO 删除用户后还需清除用户 session
|
|
|
@Override
|
|
|
- public void deleteUser(Integer userId) {
|
|
|
+ public void deleteAccount(Integer userId) {
|
|
|
User userEntity = userRepository.findById(userId).orElse(null);
|
|
|
if (userEntity == null) {
|
|
|
return;
|