This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
web-sketch-webskt-query-agent/src/main/java/com/mesasoft/cn/service/impl/UserServiceImpl.java
2023-01-10 15:51:02 +08:00

164 lines
6.0 KiB
Java

package com.mesasoft.cn.service.impl;
import com.mesasoft.cn.WebSketchApplication;
import com.mesasoft.cn.config.SettingConfig;
import com.mesasoft.cn.config.TokenConfig;
import com.mesasoft.cn.dao.UserDAO;
import com.mesasoft.cn.entity.User;
import com.mesasoft.cn.modules.constant.ConfigConsts;
import com.mesasoft.cn.service.IUserService;
import com.mesasoft.cn.util.BeanUtils;
import com.zhazhapan.modules.constant.ValueConsts;
import com.zhazhapan.util.Checker;
import com.zhazhapan.util.DateUtils;
import com.zhazhapan.util.MailSender;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.regex.Pattern;
/**
* @author pantao
* @since 2018/1/22
*/
@Service
public class UserServiceImpl implements IUserService {
private final UserDAO userDAO;
private Logger logger = Logger.getLogger(UserServiceImpl.class);
@Autowired
public UserServiceImpl(UserDAO userDAO) {this.userDAO = userDAO;}
@Override
public boolean updatePermission(int id, int permission) {
return userDAO.updatePermission(id, permission > 2 ? 2 : permission);
}
@Override
public boolean resetPassword(int id, String password) {
boolean result = Checker.isNotEmpty(password) && userDAO.updatePasswordById(id, password);
if (result) {
TokenConfig.removeTokenByValue(id);
try {
MailSender.sendMail(getUserById(id).getEmail(), "密码重置通知", "您的密码已被管理员重置为:" + password);
} catch (Exception e) {
logger.error(e.getMessage());
}
}
return result;
}
@Override
public boolean updateFileAuth(int id, String auths) {
int[] auth = BeanUtils.getAuth(auths);
return userDAO.updateAuthById(id, auth[0], auth[1], auth[2], auth[3], auth[4]);
}
@Override
public List<User> listUser(int permission, String condition, int offset) {
return userDAO.listUserBy(permission, condition, offset);
}
@Override
public User login(String loginName, String password, String token, HttpServletResponse response) {
boolean allowLogin = WebSketchApplication.settings.getBooleanUseEval(ConfigConsts.ALLOW_LOGIN_OF_SETTINGS);
User user = null;
if (allowLogin) {
if (Checker.isNotEmpty(token) && WebSketchApplication.tokens.containsKey(token)) {
user = userDAO.getUserById(WebSketchApplication.tokens.get(token));
if (Checker.isNotNull(response)) {
Cookie cookie = new Cookie(ValueConsts.TOKEN_STRING, TokenConfig.generateToken(token, user.getId
()));
cookie.setMaxAge(30 * 24 * 60 * 60);
response.addCookie(cookie);
}
}
if (Checker.isNull(user) && Checker.isNotEmpty(loginName) && Checker.isNotEmpty(password)) {
user = userDAO.login(loginName, password);
if (Checker.isNotNull(user)) {
TokenConfig.removeTokenByValue(user.getId());
}
}
updateUserLoginTime(user);
}
return user;
}
@Override
public boolean register(String username, String email, String password) {
boolean allowRegister = WebSketchApplication.settings.getBooleanUseEval(ConfigConsts.ALLOW_REGISTER_OF_SETTINGS);
if (allowRegister) {
boolean isValid = Checker.isEmail(email) && checkPassword(password) && Pattern.compile(WebSketchApplication.settings
.getStringUseEval(ConfigConsts.USERNAME_PATTERN_OF_SETTINGS)).matcher(username).matches();
if (isValid) {
User user = new User(username, ValueConsts.EMPTY_STRING, email, password);
int[] auth = SettingConfig.getAuth(ConfigConsts.USER_DEFAULT_AUTH_OF_SETTING);
user.setAuth(auth[0], auth[1], auth[2], auth[3], auth[4]);
return userDAO.insertUser(user);
}
}
return false;
}
@Override
public boolean resetPasswordByEmail(String email, String password) {
return Checker.isEmail(email) && checkPassword(password) && userDAO.updatePasswordByEmail(password, email);
}
@Override
public boolean checkPassword(String password) {
int min = WebSketchApplication.settings.getIntegerUseEval(ConfigConsts.PASSWORD_MIN_LENGTH_OF_SETTINGS);
int max = WebSketchApplication.settings.getIntegerUseEval(ConfigConsts.PASSWORD_MAX_LENGTH_OF_SETTINGS);
return Checker.isLimited(password, min, max);
}
@Override
public boolean emailExists(String email) {
return Checker.isEmail(email) && userDAO.checkEmail(email) > 0;
}
@Override
public boolean updateBasicInfoById(int id, String avatar, String realName, String email) {
return Checker.isEmail(email) && userDAO.updateBasicInfo(id, Checker.checkNull(avatar), Checker.checkNull
(realName), email);
}
@Override
public int getUserId(String usernameOrEmail) {
try {
return userDAO.getUserId(Checker.checkNull(usernameOrEmail));
} catch (Exception e) {
return Integer.MAX_VALUE;
}
}
@Override
public boolean usernameExists(String username) {
return Checker.isNotEmpty(username) && userDAO.checkUsername(username) > 0;
}
@Override
public User getUserById(int id) {
return userDAO.getUserById(id);
}
@Override
public void updateUserLoginTime(User user) {
if (Checker.isNotNull(user)) {
user.setLastLoginTime(DateUtils.getCurrentTimestamp());
userDAO.updateUserLoginTime(user.getId());
}
}
@Override
public boolean updatePasswordById(String password, int id) {
return checkPassword(password) && userDAO.updatePasswordById(id, password);
}
}