Search in sources :

Example 6 with User

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, "账号或密码错误");
    }
}
Also used : HttpServletRequest(javax.servlet.http.HttpServletRequest) User(com.moxi.mogublog.commons.entity.User) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) Date(java.util.Date) ApiOperation(io.swagger.annotations.ApiOperation)

Example 7 with User

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);
}
Also used : User(com.moxi.mogublog.commons.entity.User) ApiOperation(io.swagger.annotations.ApiOperation)

Example 8 with User

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);
}
Also used : AuthRequest(me.zhyd.oauth.request.AuthRequest) User(com.moxi.mogublog.commons.entity.User) JSONObject(com.alibaba.fastjson.JSONObject) AuthResponse(me.zhyd.oauth.model.AuthResponse)

Example 9 with User

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);
}
Also used : SystemConfig(com.moxi.mogublog.commons.entity.SystemConfig) User(com.moxi.mogublog.commons.entity.User) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) Link(com.moxi.mogublog.commons.entity.Link) ApiOperation(io.swagger.annotations.ApiOperation)

Example 10 with User

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);
}
Also used : SystemConfig(com.moxi.mogublog.commons.entity.SystemConfig) User(com.moxi.mogublog.commons.entity.User) Feedback(com.moxi.mogublog.commons.entity.Feedback) ApiOperation(io.swagger.annotations.ApiOperation)

Aggregations

User (com.moxi.mogublog.commons.entity.User)18 ApiOperation (io.swagger.annotations.ApiOperation)10 QueryWrapper (com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)6 SystemConfig (com.moxi.mogublog.commons.entity.SystemConfig)3 JSONObject (com.alibaba.fastjson.JSONObject)2 IPage (com.baomidou.mybatisplus.core.metadata.IPage)2 Page (com.baomidou.mybatisplus.extension.plugins.pagination.Page)2 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 Blog (com.moxi.mogublog.commons.entity.Blog)1 Comment (com.moxi.mogublog.commons.entity.Comment)1 Feedback (com.moxi.mogublog.commons.entity.Feedback)1 Link (com.moxi.mogublog.commons.entity.Link)1 ECommentSource (com.moxi.mougblog.base.enums.ECommentSource)1 DeleteException (com.moxi.mougblog.base.exception.exceptionType.DeleteException)1 InsertException (com.moxi.mougblog.base.exception.exceptionType.InsertException)1 List (java.util.List)1 Map (java.util.Map)1 AuthResponse (me.zhyd.oauth.model.AuthResponse)1