package com.xiaopeng.account.controller; import com.xiaopeng.account.constant.I18nKeyConstant; import com.xiaopeng.account.service.ISysGroupService; import com.xiaopeng.account.service.ISysUserService; import com.xiaopeng.account.service.IXpOperationsUserService; import com.xiaopeng.account.service.impl.SysLoginService; import com.xiaopeng.account.vo.LoginBody; import com.xiaopeng.account.vo.RegisterBody; import com.xiaopeng.api.dto.operation.*; import com.xiaopeng.api.feignClient.operation.SmsClient; import com.xiaopeng.api.model.account.SysRole; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.vo.account.LoginOfficialPartnerUser; import com.xiaopeng.api.vo.account.LoginOperationUser; import com.xiaopeng.api.vo.account.LoginUser; import com.xiaopeng.api.vo.operation.SmsVo; import com.xiaopeng.common.core.constant.VerificationCodeConstants; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.JwtUtils; import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.common.security.auth.AuthUtil; import com.xiaopeng.common.security.service.TokenService; import com.xiaopeng.common.security.utils.SecurityUtils; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; /** * token 控制 * * @author xiaopeng */ @Slf4j @RestController public class TokenController { @Autowired private TokenService tokenService; @Autowired private SysLoginService sysLoginService; @Resource private ISysUserService sysUserService; @Resource private IXpOperationsUserService xpOperationsUserService; @Autowired private ISysGroupService sysGroupService; @Autowired private RedisService redisService; @Resource private SmsClient smsClient; @Value("${sms.appid}") private String sms_appid; // @Autowired // private EncryptionDecryptionUtil encryptionDecryptionUtil; // @ApiOperation(value = "用户登录", tags = "管理后台-用户登录") // @PostMapping("/base/v1/login") // public R login(@RequestBody LoginBody form, HttpServletRequest request) { // // 用户登录 // LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request); // boolean phoneDesensitization = sysGroupService.getPhoneDesensitization(); // userInfo.setPhoneDesensitizationExempt(phoneDesensitization); // HashMap map = new HashMap<>(); // map.put("token", tokenService.createToken(userInfo)); // List roles = userInfo.getSysUser().getRoles(); // // if (CollectionUtils.isEmpty(roles)) { // // throw new ServiceException("请关联角色!", I18nKeyConstant.LOGIN_ROLE_NOT_BIND); // // } // // map.put("roleName",roles.get(0).getRoleName()); // map.put("info", userInfo); // // 修改用户最后登录时间 // return R.ok(map); // } /* @ApiOperation(value = "解密测试", tags = "管理后台-用户登录") @PostMapping("/base/v1/decrypted") public R decrypted(@RequestBody LoginBody form, HttpServletRequest request) { String decrypt = encryptionDecryptionUtil.decrypt(form.getUsername(), request); return R.ok(decrypt); } @ApiOperation(value = "加密测试", tags = "管理后台-用户登录") @GetMapping("/base/v1/encrypted") public R encrypted(HttpServletRequest request, HttpServletResponse response) { String content = "Hello, World!"; String sessionId = request.getSession(true).getId(); if(StringUtils.isEmpty(sessionId)){ throw new ServiceException("请求失败,请稍后重试", I18nKeyConstant.REQUEST_FAILED); } Object cacheObject = redisService.getCacheObject("session:id:" + sessionId); if (null != cacheObject) { JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString()); return R.ok(jsonObject.getString("publicKey")); } KeyPair keyPair = RSAUtil.generateKeyPair(); String publicKey = RSAUtil.getPublicKey(keyPair); String privateKey = RSAUtil.getPrivateKey(keyPair); JSONObject jsonObject = new JSONObject(); jsonObject.put("publicKey", publicKey); jsonObject.put("privateKey", privateKey); redisService.setCacheObject("session:id:" + sessionId, jsonObject.toJSONString(), 1L, TimeUnit.MINUTES); JSONObject encrypt = EncryptionDecryptionUtil.encrypt(content, privateKey); response.setHeader("xps", encrypt.getString("aes_key")); return R.ok(encrypt.getString("content")); }*/ // @ApiOperation(value = "账号密码登录", tags = {"运维APP登录"}) // @PostMapping("/maintenance-app/base/v1/operationPasswordLogin") // public R operationPasswordLogin(@RequestBody AppLoginPasswordDTO appLoginPasswordDTO, HttpServletRequest request) { // // 用户登录 // LoginOperationUser userInfo = sysLoginService.operationPasswordLogin(appLoginPasswordDTO.getPhoneNumber(), appLoginPasswordDTO.getPassword(), appLoginPasswordDTO.getDeviceType(), request); // HashMap map = new HashMap<>(); // map.put("token", tokenService.createOperationUserToken(userInfo)); //// List roles = userInfo.getXpOperationsUser().getRoles(); //// if (CollectionUtils.isEmpty(roles)) { //// return R.fail("请关联角色!"); //// } //// map.put("roleName", roles.get(0).getRoleName()); // map.put("info", userInfo); // return R.ok(map); // } // @ApiOperation(value = "手机验证码登录", tags = {"运维APP登录"}) // @PostMapping("/maintenance-app/base/v1/verificationCodeLogin") // public R verificationCodeLogin(@RequestBody AppLoginCodeDTO appLoginCodeDTO, HttpServletRequest request) { // // 用户登录 // LoginOperationUser userInfo = sysLoginService.verificationCodeLogin(appLoginCodeDTO.getPhoneNumber(), appLoginCodeDTO.getVerificationCode(),appLoginCodeDTO.getDeviceType(), request); // HashMap map = new HashMap<>(); // map.put("token", tokenService.createOperationUserToken(userInfo)); //// List roles = userInfo.getXpOperationsUser().getRoles(); //// if (CollectionUtils.isEmpty(roles)) { //// return R.fail("请关联角色!"); //// } //// map.put("roleName", roles.get(0).getRoleName()); // map.put("info", userInfo); // return R.ok(map); // } // @ApiOperation(value = "获取手机验证码", tags = {"运维APP登录"}) // @PostMapping("/maintenance-app/base/v1/getVerificationCode") // public R verificationCodeLogin(@RequestBody AppLoginGetCodeDTO appLoginPasswordDTO) { // if (StringUtils.isBlank(appLoginPasswordDTO.getPhoneNumber())) { // return R.fail("手机号不能为空!"); // } // XpOperationsUser xpOperationsUser = xpOperationsUserService.lambdaQuery() // .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(appLoginPasswordDTO.getPhoneNumber())) // .last("limit 1").one(); // if (xpOperationsUser == null) { // return R.fail("账号不存在!"); // } // if (!xpOperationsUser.getStatus()) { // return R.fail("账号已禁用!"); // } // // 生成6位数短信验证码 // String code = String.valueOf((int) (Math.random() * 1000000)); // String codeType = ""; // switch (appLoginPasswordDTO.getCodeType()) { // case 1: // codeType = VerificationCodeConstants.LOGIN_CODE; // break; // case 2: // codeType = VerificationCodeConstants.FORGET_PASSWORD_CODE; // // break; // case 3: // codeType = VerificationCodeConstants.UPDATE_PASSWORD_CODE; // break; // } // SmsVo vo = new SmsVo(); // vo.setAppId(sms_appid); // vo.setPushType(1); // vo.setReceivers(appLoginPasswordDTO.getPhoneNumber()); // vo.setTemplateCode("RobotaxiVerifyCodeSmsTpl"); // vo.setAppPushConfigCode("RobotaxiVerifyCodeSms"); // vo.setParams(new HashMap<>()); // vo.getParams().put("code", code); // SmsDto smsDto = smsClient.pushSms(vo); // if(null == smsDto || smsDto.getCode() != 200){ // throw new ServiceException("短信发送失败", I18nKeyConstant.SMS_PUSH_FAILED); // } // redisService.setCacheObject(codeType+appLoginPasswordDTO.getPhoneNumber(), code, 60L, TimeUnit.SECONDS); // return R.ok(); // } // @ApiOperation(value = "修改密码", tags = {"运维APP登录"}) // @PostMapping("/maintenance-app/base/v1/updatePassword") // public R updatePassword(@RequestBody UpdatePasswordDTO updatePasswordDTO, HttpServletRequest request) { // // 用户登录 // if (sysLoginService.verificationCodeUpdate(updatePasswordDTO, request)){ // return R.ok("修改成功,请重新登录"); // }else{ // return R.fail("修改失败"); // } // } @DeleteMapping("/api/v1/logout") public R logout(HttpServletRequest request) { String token = SecurityUtils.getToken(request); if (StringUtils.isNotEmpty(token)) { String username = JwtUtils.getUserName(token); // 删除用户缓存记录 AuthUtil.logoutByToken(token); // 记录用户退出日志 sysLoginService.logout(username, request); } return R.ok(); } @PostMapping("refresh") public R refresh(HttpServletRequest request) { LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { // 刷新令牌有效期 tokenService.refreshToken(loginUser); return R.ok(); } return R.ok(); } @PostMapping("register") public R register(@RequestBody RegisterBody registerBody, HttpServletRequest request) { // 用户注册 sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(), request); return R.ok(); } }