package com.nova.sankuai.controller.v1;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.nova.sankuai.domain.dto.LoginUserDto;
|
import com.nova.sankuai.domain.enums.SourceTypeEnum;
|
import com.nova.sankuai.domain.vo.common.MessageCode;
|
import com.nova.sankuai.infra.config.CommonException;
|
import com.nova.sankuai.infra.constants.ResultCode;
|
import com.nova.sankuai.infra.utils.IpUtil;
|
import com.nova.sankuai.infra.utils.MessageCodeUtil;
|
import com.nova.sankuai.infra.utils.ResultJson;
|
import com.nova.sankuai.infra.utils.UserUtil;
|
import com.nova.sankuai.service.IChannelInfoService;
|
import com.nova.sankuai.service.ISysUserService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.AllArgsConstructor;
|
import org.apache.commons.lang.StringUtils;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.IOException;
|
import java.util.Map;
|
|
/**
|
* @author weikangdi
|
*/
|
@Api(tags = "登录授权")
|
@RestController
|
@RequestMapping(value = "/api/v1/auth")
|
@AllArgsConstructor
|
public class AuthController {
|
|
private final ISysUserService sysUserService;
|
|
private final IChannelInfoService channelInfoService;
|
|
@PostMapping(value = "/smsLogin")
|
@ApiOperation(value = "手机验证码登录")
|
public ResultJson smsLogin(@RequestBody LoginUserDto userDto) {
|
if (!SourceTypeEnum.ADMIN.getCode().equals(userDto.getSource())) {
|
ResultJson checkResult = channelInfoService.checkChannel(userDto.getAppId(), null);
|
if (checkResult != null) {
|
return checkResult;
|
}
|
}
|
JSONObject token = sysUserService.smsLogin(userDto);
|
return ResultJson.ok(token);
|
}
|
|
@GetMapping("/generate-verify-code")
|
@ApiOperation("生成图形验证码")
|
public ResponseEntity<ResultJson<Map<String, String>>> generateVerifyCode(String phone) throws IOException {
|
if (!MessageCodeUtil.verifyPhone(phone)) {
|
throw new CommonException("手机号不符合规范");
|
}
|
ResponseEntity responseEntity = MessageCodeUtil.getGenerateImgCode(phone);
|
return responseEntity;
|
}
|
|
@GetMapping("/code")
|
@ApiOperation(value = "获取手机验证码")
|
public ResultJson<Object> getCode(@RequestParam(value = "phone", required = false) String phone,
|
@RequestParam(value = "source", required = false) Integer source,
|
HttpServletRequest request,
|
@RequestHeader(value = "verify-code", required = false) String verifyCode,
|
@RequestParam(value = "inputVerifyCode", required = false) String inputVerifyCode) {
|
if (StringUtils.isBlank(phone)) return ResultJson.failure(ResultCode.BAD_REQUEST, "phone 不能为空");
|
if (StringUtils.isBlank(verifyCode)) return ResultJson.failure(ResultCode.BAD_REQUEST, "请求头校验失败");
|
if (inputVerifyCode == null) return ResultJson.failure(ResultCode.BAD_REQUEST, "请求头校验失败");
|
if (source == null) return ResultJson.failure(ResultCode.BAD_REQUEST, "source 不能为空");
|
|
if (!MessageCodeUtil.verifyPhone(phone)) {
|
throw new CommonException("手机号不符合规范");
|
}
|
MessageCode code = MessageCodeUtil.getCode(phone);
|
if (code != null) {
|
boolean verifyImage = MessageCodeUtil.verifyImageCode(phone, verifyCode, inputVerifyCode);
|
if (!verifyImage) {
|
throw new CommonException("图片验证码错误");
|
}
|
}
|
String ip = IpUtil.getIpAddr(request);
|
sysUserService.getCode(phone, source, ip);
|
return ResultJson.success();
|
}
|
|
@GetMapping(value = "/logout")
|
@ApiOperation(value = "退出登录")
|
@PreAuthorize("hasAuthority('auth.logout')")
|
public ResultJson<Void> logout(HttpServletRequest request) {
|
String token = request.getHeader("Authorization");
|
UserUtil.removeUserByToken(token);
|
return ResultJson.success();
|
}
|
|
}
|