use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.
the class LoginRestApi method login.
@ApiOperation(value = "用户登录", notes = "用户登录")
@PostMapping("/login")
public String login(@Validated({ GetOne.class }) @RequestBody UserVO userVO, BindingResult result) {
ThrowableUtils.checkParamArgument(result);
Boolean isOpenLoginType = webConfigService.isOpenLoginType(RedisConf.PASSWORD);
if (!isOpenLoginType) {
return ResultUtil.result(SysConf.ERROR, "后台未开启该登录方式!");
}
String userName = userVO.getUserName();
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.and(wrapper -> wrapper.eq(SQLConf.USER_NAME, userName).or().eq(SQLConf.EMAIL, userName));
queryWrapper.last(SysConf.LIMIT_ONE);
User user = userService.getOne(queryWrapper);
if (user == null || EStatus.DISABLED == user.getStatus()) {
return ResultUtil.result(SysConf.ERROR, "用户不存在");
}
if (EStatus.FREEZE == user.getStatus()) {
return ResultUtil.result(SysConf.ERROR, "用户账号未激活");
}
if (StringUtils.isNotEmpty(user.getPassWord()) && user.getPassWord().equals(MD5Utils.string2MD5(userVO.getPassWord()))) {
// 更新登录信息
HttpServletRequest request = RequestHolder.getRequest();
String ip = IpUtils.getIpAddr(request);
Map<String, String> userMap = IpUtils.getOsAndBrowserInfo(request);
user.setBrowser(userMap.get(SysConf.BROWSER));
user.setOs(userMap.get(SysConf.OS));
user.setLastLoginIp(ip);
user.setLastLoginTime(new Date());
user.updateById();
// 获取用户头像
if (!StringUtils.isEmpty(user.getAvatar())) {
String avatarResult = pictureFeignClient.getPicture(user.getAvatar(), ",");
List<String> picList = webUtil.getPicture(avatarResult);
if (picList != null && picList.size() > 0) {
user.setPhotoUrl(webUtil.getPicture(avatarResult).get(0));
}
}
// 生成token
String token = StringUtils.getUUID();
// 过滤密码
user.setPassWord("");
// 将从数据库查询的数据缓存到redis中
redisUtil.setEx(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + token, JsonUtils.objectToJson(user), userTokenSurvivalTime, TimeUnit.HOURS);
log.info("登录成功,返回token: ", token);
return ResultUtil.result(SysConf.SUCCESS, token);
} else {
return ResultUtil.result(SysConf.ERROR, "账号或密码错误");
}
}
use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.
the class AuthRestApi method updateUserPwd.
@ApiOperation(value = "更新用户密码", notes = "更新用户密码")
@PostMapping("/updateUserPwd")
public String updateUserPwd(HttpServletRequest request, @RequestParam(value = "oldPwd") String oldPwd, @RequestParam("newPwd") String newPwd) {
if (StringUtils.isEmpty(oldPwd)) {
return ResultUtil.result(SysConf.ERROR, MessageConf.PARAM_INCORRECT);
}
if (request.getAttribute(SysConf.USER_UID) == null || request.getAttribute(SysConf.TOKEN) == null) {
return ResultUtil.result(SysConf.ERROR, MessageConf.INVALID_TOKEN);
}
String userUid = request.getAttribute(SysConf.USER_UID).toString();
User user = userService.getById(userUid);
// 判断是否是第三方登录的账号
if (!user.getSource().equals(SysConf.MOGU)) {
return ResultUtil.result(SysConf.ERROR, MessageConf.CANNOT_CHANGE_THE_PASSWORD_BY_USER);
}
// 判断旧密码是否一致
if (user.getPassWord().equals(MD5Utils.string2MD5(oldPwd))) {
user.setPassWord(MD5Utils.string2MD5(newPwd));
user.updateById();
return ResultUtil.result(SysConf.SUCCESS, MessageConf.OPERATION_SUCCESS);
}
return ResultUtil.result(SysConf.ERROR, MessageConf.PASSWORD_IS_ERROR);
}
use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.
the class AuthRestApi method login.
/**
* oauth平台中配置的授权回调地址,以本项目为例,在创建gitee授权应用时的回调地址应为:http://127.0.0.1:8603/oauth/callback/gitee
*/
@RequestMapping("/callback/{source}")
public void login(@PathVariable("source") String source, AuthCallback callback, HttpServletResponse httpServletResponse) throws IOException {
log.info("进入callback:" + source + " callback params:" + JSONObject.toJSONString(callback));
AuthRequest authRequest = getAuthRequest(source);
AuthResponse response = authRequest.login(callback);
if (response.getCode() == Constants.NUM_5000) {
// 跳转到500错误页面
httpServletResponse.sendRedirect(webSiteUrl + Constants.STR_500);
return;
}
String result = JSONObject.toJSONString(response);
Map<String, Object> map = JsonUtils.jsonToMap(result);
Map<String, Object> data = JsonUtils.jsonToMap(JsonUtils.objectToJson(map.get(SysConf.DATA)));
Map<String, Object> token = new HashMap<>();
String accessToken = "";
if (data == null || data.get(SysConf.TOKEN) == null) {
// 跳转到500错误页面
httpServletResponse.sendRedirect(webSiteUrl + Constants.STR_500);
return;
} else {
token = JsonUtils.jsonToMap(JsonUtils.objectToJson(data.get(SysConf.TOKEN)));
accessToken = token.get(SysConf.ACCESS_TOKEN).toString();
}
Boolean exist = false;
User user;
// 判断user是否存在
if (data.get(SysConf.UUID) != null && data.get(SysConf.SOURCE) != null) {
user = userService.getUserBySourceAnduuid(data.get(SysConf.SOURCE).toString(), data.get(SysConf.UUID).toString());
if (user != null) {
exist = true;
} else {
user = new User();
}
} else {
return;
}
// 判断邮箱是否存在
if (data.get(SysConf.EMAIL) != null) {
String email = data.get(SysConf.EMAIL).toString();
user.setEmail(email);
}
// 判断用户性别
if (data.get(SysConf.GENDER) != null && !exist) {
String gender = data.get(SysConf.GENDER).toString();
if (SysConf.MALE.equals(gender)) {
user.setGender(EGender.MALE);
} else if (SysConf.FEMALE.equals(gender)) {
user.setGender(EGender.FEMALE);
} else {
user.setGender(EGender.UNKNOWN);
}
}
// 通过头像uid获取图片
String pictureList = this.pictureFeignClient.getPicture(user.getAvatar(), SysConf.FILE_SEGMENTATION);
List<String> photoList = webUtil.getPicture(pictureList);
Map<String, Object> picMap = (Map<String, Object>) JsonUtils.jsonToObject(pictureList, Map.class);
// 判断该用户是否含有头像信息
if (SysConf.SUCCESS.equals(picMap.get(SysConf.CODE)) && photoList.size() > 0) {
List<Map<String, Object>> picData = (List<Map<String, Object>>) picMap.get(SysConf.DATA);
String fileOldName = picData.get(0).get(SysConf.FILE_OLD_NAME).toString();
// 如果旧名称为blob表示是用户自定义的,代表用户在本网站使用了自定义头像,那么就再也不同步更新网站上的了
if (fileOldName.equals(data.get(SysConf.AVATAR)) || SysConf.BLOB.equals(fileOldName)) {
user.setPhotoUrl(photoList.get(0));
} else {
updateUserPhoto(data, user);
}
} else {
// 当获取头像失败时,需要从网站上进行获取
updateUserPhoto(data, user);
}
if (data.get(SysConf.NICKNAME) != null) {
user.setNickName(data.get(SysConf.NICKNAME).toString());
}
if (user.getLoginCount() == null) {
user.setLoginCount(0);
} else {
user.setLoginCount(user.getLoginCount() + 1);
}
// 获取浏览器,IP来源,以及操作系统
user = userService.serRequestInfo(user);
// 暂时将token也存入到user表中,为了以后方便更新redis中的内容
user.setValidCode(accessToken);
if (exist) {
user.updateById();
} else {
user.setUuid(data.get(SysConf.UUID).toString());
user.setSource(data.get(SysConf.SOURCE).toString());
String userName = PROJECT_NAME_EN.concat(Constants.SYMBOL_UNDERLINE).concat(user.getSource()).concat(Constants.SYMBOL_UNDERLINE).concat(user.getUuid());
user.setUserName(userName);
// 如果昵称为空,那么直接设置用户名
if (StringUtils.isEmpty(user.getNickName())) {
user.setNickName(userName);
}
// 默认密码
user.setPassWord(MD5Utils.string2MD5(DEFAULE_PWD));
// 设置是否开启评论邮件通知【关闭】
user.setStartEmailNotification(EOpenStatus.CLOSE_STATUS);
user.insert();
}
// 过滤密码
user.setPassWord("");
if (user != null) {
// 将从数据库查询的数据缓存到redis中
stringRedisTemplate.opsForValue().set(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + accessToken, JsonUtils.objectToJson(user), userTokenSurvivalTime, TimeUnit.HOURS);
}
httpServletResponse.sendRedirect(webSiteUrl + "?token=" + accessToken);
}
use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.
the class AuthRestApi method replyBlogLink.
@ApiOperation(value = "申请友链", notes = "申请友链")
@PostMapping("/replyBlogLink")
public String replyBlogLink(HttpServletRequest request, @RequestBody LinkVO linkVO) {
if (request.getAttribute(SysConf.USER_UID) == null) {
return ResultUtil.result(SysConf.ERROR, MessageConf.INVALID_TOKEN);
}
String userUid = request.getAttribute(SysConf.USER_UID).toString();
User user = userService.getById(userUid);
// 判断该用户是否被禁言,被禁言的用户,也无法进行友链申请操作
if (user != null && user.getCommentStatus() == SysConf.ZERO) {
return ResultUtil.result(SysConf.ERROR, MessageConf.YOU_DONT_HAVE_PERMISSION_TO_REPLY);
}
// 判断是否开启邮件通知
SystemConfig systemConfig = systemConfigService.getConfig();
if (systemConfig != null && EOpenStatus.OPEN.equals(systemConfig.getStartEmailNotification())) {
if (StringUtils.isNotEmpty(systemConfig.getEmail())) {
log.info("发送友链申请邮件通知");
String feedback = "收到新的友链申请: " + "<br />" + "名称:" + linkVO.getTitle() + "<br />" + "简介:" + linkVO.getSummary() + "<br />" + "地址:" + linkVO.getUrl();
rabbitMqUtil.sendSimpleEmail(systemConfig.getEmail(), feedback);
} else {
log.error("网站没有配置通知接收的邮箱地址!");
}
}
QueryWrapper<Link> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(SQLConf.USER_UID, userUid);
queryWrapper.eq(SQLConf.STATUS, EStatus.ENABLE);
queryWrapper.eq(SQLConf.TITLE, linkVO.getTitle());
queryWrapper.last(SysConf.LIMIT_ONE);
Link existLink = linkService.getOne(queryWrapper);
if (existLink != null) {
Integer linkStatus = existLink.getLinkStatus();
String message = "";
switch(linkStatus) {
case 0:
{
message = MessageConf.BLOG_LINK_IS_EXIST;
}
break;
case 1:
{
message = MessageConf.BLOG_LINK_IS_PUBLISH;
}
break;
case 2:
{
message = MessageConf.BLOG_LINK_IS_NO_PUBLISH;
}
break;
}
return ResultUtil.result(SysConf.ERROR, message);
}
Link link = new Link();
link.setLinkStatus(ELinkStatus.APPLY);
link.setTitle(linkVO.getTitle());
link.setSummary(linkVO.getSummary());
link.setUrl(linkVO.getUrl());
link.setClickCount(0);
link.setSort(0);
link.setFileUid(linkVO.getFileUid());
link.setEmail(linkVO.getEmail());
link.setStatus(EStatus.ENABLE);
link.setUserUid(userUid);
link.insert();
return ResultUtil.result(SysConf.SUCCESS, MessageConf.OPERATION_SUCCESS);
}
use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.
the class AuthRestApi method edit.
@ApiOperation(value = "提交反馈", notes = "提交反馈", response = String.class)
@PostMapping("/addFeedback")
public String edit(HttpServletRequest request, @Validated({ Insert.class }) @RequestBody FeedbackVO feedbackVO, BindingResult result) {
// 参数校验
ThrowableUtils.checkParamArgument(result);
if (request.getAttribute(SysConf.USER_UID) == null) {
return ResultUtil.result(SysConf.ERROR, MessageConf.INVALID_TOKEN);
}
String userUid = request.getAttribute(SysConf.USER_UID).toString();
User user = userService.getById(userUid);
// 判断该用户是否被禁言,被禁言的用户,也无法进行反馈操作
if (user != null && user.getCommentStatus() == SysConf.ZERO) {
return ResultUtil.result(SysConf.ERROR, MessageConf.YOU_DONT_HAVE_PERMISSION_TO_FEEDBACK);
}
// 判断是否开启邮件通知
SystemConfig systemConfig = systemConfigService.getConfig();
if (systemConfig != null && EOpenStatus.OPEN.equals(systemConfig.getStartEmailNotification())) {
if (StringUtils.isNotEmpty(systemConfig.getEmail())) {
log.info("发送反馈邮件通知");
String feedback = "网站收到新的反馈: " + "<br />" + "标题:" + feedbackVO.getTitle() + "<br />" + "<br />" + "内容" + feedbackVO.getContent();
rabbitMqUtil.sendSimpleEmail(systemConfig.getEmail(), feedback);
} else {
log.error("网站没有配置通知接收的邮箱地址!");
}
}
Feedback feedback = new Feedback();
feedback.setUserUid(userUid);
feedback.setTitle(feedbackVO.getTitle());
feedback.setContent(feedbackVO.getContent());
// 设置反馈已开启
feedback.setFeedbackStatus(0);
feedback.setReply(feedbackVO.getReply());
feedback.setUpdateTime(new Date());
feedback.insert();
return ResultUtil.result(SysConf.SUCCESS, MessageConf.INSERT_SUCCESS);
}
Aggregations