diff options
Diffstat (limited to 'src/main/java/com/mesasoft/cn/web/controller/UserController.java')
| -rw-r--r-- | src/main/java/com/mesasoft/cn/web/controller/UserController.java | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/src/main/java/com/mesasoft/cn/web/controller/UserController.java b/src/main/java/com/mesasoft/cn/web/controller/UserController.java new file mode 100644 index 0000000..a76aad9 --- /dev/null +++ b/src/main/java/com/mesasoft/cn/web/controller/UserController.java @@ -0,0 +1,281 @@ +package com.mesasoft.cn.web.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.mesasoft.cn.SketchApplication; +import com.mesasoft.cn.modules.constant.ConfigConsts; +import com.mesasoft.cn.modules.constant.DefaultValues; +import com.mesasoft.cn.annotation.AuthInterceptor; +import com.mesasoft.cn.config.TokenConfig; +import com.mesasoft.cn.entity.Result; +import com.mesasoft.cn.entity.ResultEntity; +import com.mesasoft.cn.entity.User; +import com.mesasoft.cn.enums.InterceptorLevel; +import com.mesasoft.cn.service.IUserService; +import com.mesasoft.cn.util.ControllerUtils; +import com.zhazhapan.modules.constant.ValueConsts; +import com.zhazhapan.util.Checker; +import com.zhazhapan.util.Formatter; +import com.zhazhapan.util.encryption.JavaEncrypt; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.security.NoSuchAlgorithmException; + +/** + * @author pantao + * @since 2018/1/22 + */ +@RestController +@RequestMapping("/user") +@Api(value = "/user", description = "用户相关操作") +public class UserController { + + private final IUserService userService; + + private final HttpServletRequest request; + + private final JSONObject jsonObject; + + @Autowired + public UserController(IUserService userService, HttpServletRequest request, JSONObject jsonObject) { + this.userService = userService; + this.request = request; + this.jsonObject = jsonObject; + } + + @ApiOperation(value = "更新用户权限(注:不是文件权限)") + @AuthInterceptor(InterceptorLevel.ADMIN) + @RequestMapping(value = "/{id}/{permission}", method = RequestMethod.PUT) + public String updatePermission(@PathVariable("id") int id, @PathVariable("permission") int permission) { + User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING); + if (user.getPermission() < ValueConsts.THREE_INT && permission > 1) { + jsonObject.put("message", "权限不够,设置失败"); + } else if (userService.updatePermission(id, permission)) { + jsonObject.put("message", "更新成功"); + } else { + jsonObject.put("message", "更新失败,请稍后重新尝试"); + } + return jsonObject.toJSONString(); + } + + @ApiOperation("重置用户密码(管理员接口)") + @AuthInterceptor(InterceptorLevel.ADMIN) + @RequestMapping(value = "/reset/{id}/{password}", method = RequestMethod.PUT) + public String resetPassword(@PathVariable("id") int id, @PathVariable("password") String password) { + return ControllerUtils.getResponse(userService.resetPassword(id, password)); + } + + @ApiOperation(value = "更新用户的默认文件权限") + @ApiImplicitParam(name = "auth", value = "权限", example = "1,1,1,1", required = true) + @AuthInterceptor(InterceptorLevel.ADMIN) + @RequestMapping(value = "/{id}/auth", method = RequestMethod.PUT) + public String updateFileAuth(@PathVariable("id") int id, String auth) { + return ControllerUtils.getResponse(userService.updateFileAuth(id, auth)); + } + + @ApiOperation(value = "获取所有用户") + @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "指定用户(默认所有用户)"), @ApiImplicitParam(name = "offset", + value = "偏移量", required = true)}) + @AuthInterceptor(InterceptorLevel.ADMIN) + @RequestMapping(value = "/all", method = RequestMethod.GET) + public String getUser(String user, int offset) { + User u = (User) request.getSession().getAttribute(ValueConsts.USER_STRING); + return Formatter.listToJson(userService.listUser(u.getPermission(), user, offset)); + } + + @ApiOperation(value = "更新我的基本信息") + @ApiImplicitParams({@ApiImplicitParam(name = "avatar", value = "头像(可空)"), @ApiImplicitParam(name = "realName", + value = "真实姓名(可空)"), @ApiImplicitParam(name = "email", value = "邮箱(可空)"), @ApiImplicitParam(name = + "code", value = "验证码(可空)")}) + @AuthInterceptor(InterceptorLevel.USER) + @RequestMapping(value = "/info", method = RequestMethod.PUT) + public String updateBasicInfo(String avatar, String realName, String email, String code) { + User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING); + jsonObject.put("message", "保存成功"); + boolean emilVerify = SketchApplication.settings.getBooleanUseEval(ConfigConsts.EMAIL_VERIFY_OF_SETTINGS); + if (Checker.isNotEmpty(email) && !email.equals(user.getEmail())) { + if (!emilVerify || isCodeValidate(code)) { + if (userService.emailExists(email)) { + jsonObject.put("message", "邮箱更新失败,该邮箱已经存在"); + } else { + user.setEmail(email); + } + } else { + jsonObject.put("message", "邮箱更新失败,验证码校验失败"); + } + } + if (userService.updateBasicInfoById(user.getId(), avatar, realName, user.getEmail())) { + user.setAvatar(avatar); + user.setRealName(realName); + jsonObject.put("status", "success"); + } else { + jsonObject.put("message", "服务器发生错误,请稍后重新尝试"); + } + jsonObject.put("email", user.getEmail()); + return jsonObject.toString(); + } + + @ApiOperation(value = "更新我的密码") + @ApiImplicitParams({@ApiImplicitParam(name = "oldPassword", value = "原密码", required = true), @ApiImplicitParam + (name = "newPassword", value = "新密码", required = true)}) + @AuthInterceptor(InterceptorLevel.USER) + @RequestMapping(value = "/password", method = RequestMethod.PUT) + public String updatePassword(String oldPassword, String newPassword) { + User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING); + jsonObject.put("status", "error"); + try { + if (user.getPassword().equals(JavaEncrypt.sha256(oldPassword))) { + if (userService.updatePasswordById(newPassword, user.getId())) { + jsonObject.put("status", "success"); + TokenConfig.removeTokenByValue(user.getId()); + } else { + jsonObject.put("message", "新密码格式不正确"); + } + } else { + jsonObject.put("message", "原密码不正确"); + } + } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { + jsonObject.put("message", "服务器内部错误,请稍后重新尝试"); + } + return jsonObject.toString(); + } + + @ApiOperation(value = "获取我的基本信息") + @AuthInterceptor(InterceptorLevel.USER) + @RequestMapping(value = "/info", method = RequestMethod.GET) + public String getInfo() { + User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING); + JSONObject object = JSON.parseObject(user.toString()); + object.remove(ValueConsts.ID_STRING); + object.remove(ValueConsts.PASSWORD_STRING); + return object.toString(); + } + + @ApiOperation(value = "登录(用户名密码和token必须有一个输入)") + @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名"), @ApiImplicitParam(name + = "password", value = "密码"), @ApiImplicitParam(name = "auto", value = "是否自动登录", dataType = "Boolean"), + @ApiImplicitParam(name = "token", value = "用于自动登录")}) + @AuthInterceptor(InterceptorLevel.NONE) + @RequestMapping(value = "/login", method = RequestMethod.PUT) + public String login(String username, String password, boolean auto, String token) { + //使用密码登录 + User user = userService.login(username, password, ValueConsts.NULL_STRING, ValueConsts.NULL_RESPONSE); + if (Checker.isNull(user) || user.getPermission() < 1) { + jsonObject.put("status", "failed"); + } else { + request.getSession().setAttribute(ValueConsts.USER_STRING, user); + jsonObject.put("status", "success"); + if (auto) { + jsonObject.put("token", TokenConfig.generateToken(token, user.getId())); + } else { + jsonObject.put("token", ""); + TokenConfig.removeTokenByValue(user.getId()); + } + } + return jsonObject.toString(); + } + + @ApiOperation(value = "用户注册(当不需要验证邮箱时,邮箱和验证码可空)") + @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", required = true), @ApiImplicitParam(name + = "email", value = "邮箱"), @ApiImplicitParam(name = "password", value = "密码", required = true), + @ApiImplicitParam(name = "code", value = "验证码")}) + @AuthInterceptor(InterceptorLevel.NONE) + @RequestMapping(value = "/register", method = RequestMethod.POST) + public String register(String username, String email, String password, String code) { + boolean emilVerify = SketchApplication.settings.getBooleanUseEval(ConfigConsts.EMAIL_VERIFY_OF_SETTINGS); + jsonObject.put("status", "error"); + if (!emilVerify || isCodeValidate(code)) { + if (userService.usernameExists(username)) { + jsonObject.put("message", "用户名已经存在"); + } else if (userService.emailExists(email)) { + jsonObject.put("message", "该邮箱已经被注册啦"); + } else if (userService.register(username, email, password)) { + jsonObject.put("status", "success"); + } else { + jsonObject.put("message", "数据格式不合法"); + } + } else { + jsonObject.put("message", "验证码校验失败"); + } + return jsonObject.toString(); + } + + @ApiOperation(value = "重置我的密码") + @ApiImplicitParams({@ApiImplicitParam(name = "email", value = "邮箱", required = true), @ApiImplicitParam(name = + "code", value = "验证码", required = true), @ApiImplicitParam(name = "password", value = "密码", required = + true)}) + @AuthInterceptor(InterceptorLevel.NONE) + @RequestMapping(value = "/password/reset", method = RequestMethod.PUT) + public String resetPassword(String email, String code, String password) { + jsonObject.put("status", "error"); + if (isCodeValidate(code)) { + if (userService.resetPasswordByEmail(email, password)) { + jsonObject.put("status", "success"); + } else { + jsonObject.put("message", "格式不合法"); + } + } else { + jsonObject.put("message", "验证码校验失败"); + } + return jsonObject.toString(); + } + + @ApiOperation(value = "检测用户名是否已经注册") + @ApiImplicitParam(name = "username", value = "用户名", required = true) + @AuthInterceptor(InterceptorLevel.NONE) + @RequestMapping(value = "/username/exists", method = RequestMethod.GET) + public String usernameExists(String username) { + jsonObject.put("exists", userService.usernameExists(username)); + return jsonObject.toString(); + } + + @ApiOperation(value = "检测邮箱是否已经注册") + @ApiImplicitParam(name = "email", value = "邮箱", required = true) + @AuthInterceptor(InterceptorLevel.NONE) + @RequestMapping(value = "/email/exists", method = RequestMethod.GET) + public String emailExists(String email) { + jsonObject.put("exists", userService.emailExists(email)); + return jsonObject.toString(); + } + + private boolean isCodeValidate(String code) { + return Checker.checkNull(code).equals(String.valueOf(request.getSession().getAttribute(DefaultValues + .CODE_STRING))); + } + + + @ApiOperation(value = "登录(用户名密码和token必须有一个输入)") + @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名"), @ApiImplicitParam(name + = "password", value = "密码"), @ApiImplicitParam(name = "auto", value = "是否自动登录", dataType = "Boolean"), + @ApiImplicitParam(name = "token", value = "用于自动登录")}) + @AuthInterceptor(InterceptorLevel.NONE) + @RequestMapping(value = "/login2", method = RequestMethod.PUT) + public ResultEntity login2(String username, String password, boolean auto, String token) { + + JSONObject resultObject = null; + //使用密码登录 + User user = userService.login(username, password, ValueConsts.NULL_STRING, ValueConsts.NULL_RESPONSE); + if (Checker.isNull(user) || user.getPermission() < 1) { + return Result.fail(); + } else { + request.getSession().setAttribute(ValueConsts.USER_STRING, user); + if (auto) { + resultObject.put("token", TokenConfig.generateToken(token, user.getId())); + } else { + resultObject.put("token", ""); + TokenConfig.removeTokenByValue(user.getId()); + } + } + return Result.success(resultObject); + } +} |
