|
@@ -5,6 +5,8 @@ import cn.kdan.cloud.pdf.office.api.account.feign.OauthClientDetailsApi;
|
|
|
import cn.kdan.cloud.pdf.office.api.account.feign.UserApi;
|
|
|
import cn.kdan.cloud.pdf.office.api.account.vo.LoginDevice;
|
|
|
import cn.kdan.cloud.pdf.office.api.account.vo.OauthClientDetails;
|
|
|
+import cn.kdan.cloud.pdf.office.api.email.bo.EmailSendBO;
|
|
|
+import cn.kdan.cloud.pdf.office.api.email.feign.EmailApi;
|
|
|
import cn.kdan.cloud.pdf.office.common.constant.CommonConstant;
|
|
|
import cn.kdan.cloud.pdf.office.common.dto.UserRegisterDTO;
|
|
|
import cn.kdan.cloud.pdf.office.common.enums.EmailCodeTypeEnum;
|
|
@@ -16,6 +18,7 @@ import cn.kdan.cloud.pdf.office.common.utils.RedisUtils;
|
|
|
import cn.kdan.cloud.pdf.office.common.vo.TokenVO;
|
|
|
import cn.kdan.cloud.pdf.office.common.vo.UserInfoVO;
|
|
|
import cn.kdan.cloud.pdf.office.sso.constant.AuthConstant;
|
|
|
+import cn.kdan.cloud.pdf.office.sso.enums.VerifyTypeEnum;
|
|
|
import cn.kdan.cloud.pdf.office.sso.service.AuthService;
|
|
|
import cn.kdan.cloud.pdf.office.sso.utils.TokenUtils;
|
|
|
import com.alibaba.nacos.common.utils.CollectionUtils;
|
|
@@ -26,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
|
@@ -73,6 +77,8 @@ public class AuthServiceImpl implements AuthService {
|
|
|
|
|
|
@Autowired
|
|
|
private TokenEndpoint tokenEndpoint;
|
|
|
+ @Autowired
|
|
|
+ private EmailApi emailApi;
|
|
|
|
|
|
|
|
|
@Value("${security.oauth2.client.user-authorization-uri}")
|
|
@@ -124,16 +130,16 @@ public class AuthServiceImpl implements AuthService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public TokenVO emailLogin(String email, String code, String appId, String platformType, String deviceSign,HttpServletRequest request) {
|
|
|
+ public TokenVO emailLogin(String email, String password, String appId, String platformType, String deviceSign,HttpServletRequest request) {
|
|
|
//如果是管理平台就去查管理平台的用户表
|
|
|
UserInfoVO userInfoVO = userApi.getByAppAccount(email,appId,platformType).getResult();
|
|
|
//检查用户存在
|
|
|
checkUser(userInfoVO);
|
|
|
//检查邮件验证码
|
|
|
- checkEmailCodeValid(EmailCodeTypeEnum.LOGIN,email,code);
|
|
|
+ //checkEmailCodeValid(EmailCodeTypeEnum.LOGIN,email,code);
|
|
|
// 检查设备是否达到上限
|
|
|
checkLoginDeviceNum(userInfoVO.getId(), deviceSign);
|
|
|
- TokenVO vo = getTokenByUser(code, userInfoVO);
|
|
|
+ TokenVO vo = getTokenByUser(password, userInfoVO);
|
|
|
//关联设备登录
|
|
|
relateTokenAndDevice(vo.getAccess_token(), userInfoVO.getId(), deviceSign, appId);
|
|
|
return vo;
|
|
@@ -156,6 +162,56 @@ public class AuthServiceImpl implements AuthService {
|
|
|
throw new BackendRuntimeException(AuthConstant.EMAIL_REGISTER_ERROR);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public boolean getVerifyCode(EmailCodeTypeEnum action, VerifyTypeEnum type, String receiver, String appId) {
|
|
|
+ boolean flag = false;
|
|
|
+ if (redisUtils.hexists(AuthConstant.VERIFY_CODE_TIME_OUT + action.value() + CommonConstant.STRIKE_THROUGH + appId, receiver)) {
|
|
|
+ throw new BackendRuntimeException(AuthConstant.VERIFY_CODE_SEND_TOO_QUICKLY);
|
|
|
+ }
|
|
|
+ String code = CommonUtils.generateVerifyCode();
|
|
|
+ switch (type) {
|
|
|
+ //发送手机验证码
|
|
|
+ case PHONE:
|
|
|
+ //忘记密码时手机验证 发送手机短信
|
|
|
+ break;
|
|
|
+ //发送邮件
|
|
|
+ case EMAIL:
|
|
|
+ //创建账号
|
|
|
+ EmailSendBO bo = new EmailSendBO();
|
|
|
+ bo.setToEmail(receiver);
|
|
|
+ handleEmailSendBO(action,bo,code);
|
|
|
+ if(emailApi.sendEmail(bo).getCode() == HttpStatus.OK.value()){
|
|
|
+ flag = true;
|
|
|
+ };
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //存入缓存
|
|
|
+ if (flag) {
|
|
|
+ redisUtils.hset(AuthConstant.VERIFY_CODE_KEY + action.value() + CommonConstant.STRIKE_THROUGH + appId, receiver, code, AuthConstant.VERIFY_CODE_KEY_EXPIRE_TIME);
|
|
|
+ //再次发送计时
|
|
|
+ redisUtils.hset(AuthConstant.VERIFY_CODE_TIME_OUT + action.value() + CommonConstant.STRIKE_THROUGH + appId , receiver, "1", AuthConstant.VERIFY_CODE_KEY_RESEND_TIME);
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ void handleEmailSendBO (EmailCodeTypeEnum action,EmailSendBO bo,String code) {
|
|
|
+ //设置事件
|
|
|
+ bo.setUseEvent(action.value());
|
|
|
+ //设置title
|
|
|
+ Map<String,String> titleMap = new HashMap<>();
|
|
|
+ //设置内容
|
|
|
+ Map<String,String> contentMap = new HashMap<>();
|
|
|
+ //注册
|
|
|
+ if(action.value().equals(EmailCodeTypeEnum.USER_REGISTER.value())){
|
|
|
+ contentMap.put("@code@",code);
|
|
|
+ }
|
|
|
+ bo.setSendTitleContent(titleMap);
|
|
|
+ //设置内容
|
|
|
+ bo.setSendContent(contentMap);
|
|
|
+ }
|
|
|
+
|
|
|
@Resource
|
|
|
@Lazy
|
|
|
private TokenStore tokenStore;
|