Pre Merge pull request !438 from MichelleChung/dev

This commit is contained in:
MichelleChung 2023-11-01 13:20:26 +00:00 committed by Gitee
commit ba2f200d05
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
18 changed files with 141 additions and 129 deletions

View File

@ -28,14 +28,14 @@ public interface IAuthStrategy {
throw new ServiceException("授权类型不正确!"); throw new ServiceException("授权类型不正确!");
} }
IAuthStrategy instance = SpringUtils.getBean(beanName); IAuthStrategy instance = SpringUtils.getBean(beanName);
instance.validate(loginBody); instance.validate();
return instance.login(clientId, loginBody, client); return instance.login(clientId, loginBody, client);
} }
/** /**
* 参数校验 * 参数校验
*/ */
void validate(LoginBody loginBody); void validate();
/** /**
* 登录 * 登录

View File

@ -2,6 +2,7 @@ package org.dromara.web.service.impl;
import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -12,12 +13,12 @@ import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.AuthException;
import org.dromara.common.core.exception.user.CaptchaExpireException; import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.auth.EmailGroup;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
@ -44,15 +45,26 @@ public class EmailAuthStrategy implements IAuthStrategy {
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
@Override @Override
public void validate(LoginBody loginBody) { public void validate() {
ValidatorUtils.validate(loginBody, EmailGroup.class); String email = ServletUtils.getParamFromBody("email");
String emailCode = ServletUtils.getParamFromBody("emailCode");
if (StringUtils.isBlank(email)) {
throw new AuthException("user.email.not.blank");
}
if (StringUtils.isBlank(emailCode)) {
throw new AuthException("email.code.not.blank");
}
// 校验邮箱是否合法
if (!Validator.isEmail(email, true)) {
throw new AuthException("user.email.not.valid");
}
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody, SysClient client) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
String tenantId = loginBody.getTenantId(); String tenantId = loginBody.getTenantId();
String email = loginBody.getEmail(); String email = ServletUtils.getParamFromBody("email");
String emailCode = loginBody.getEmailCode(); String emailCode = ServletUtils.getParamFromBody("emailCode");
// 通过邮箱查找用户 // 通过邮箱查找用户
SysUserVo user = loadUserByEmail(tenantId, email); SysUserVo user = loadUserByEmail(tenantId, email);

View File

@ -3,23 +3,26 @@ package org.dromara.web.service.impl;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.AuthException;
import org.dromara.common.core.exception.user.CaptchaException; import org.dromara.common.core.exception.user.CaptchaException;
import org.dromara.common.core.exception.user.CaptchaExpireException; import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.auth.PasswordGroup;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
@ -48,8 +51,8 @@ public class PasswordAuthStrategy implements IAuthStrategy {
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
@Override @Override
public void validate(LoginBody loginBody) { public void validate() {
ValidatorUtils.validate(loginBody, PasswordGroup.class); ValidatorUtils.validate(ServletUtils.getParamBody());
} }
@Override @Override

View File

@ -12,12 +12,12 @@ import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.AuthException;
import org.dromara.common.core.exception.user.CaptchaExpireException; import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.auth.SmsGroup;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
@ -44,15 +44,22 @@ public class SmsAuthStrategy implements IAuthStrategy {
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
@Override @Override
public void validate(LoginBody loginBody) { public void validate() {
ValidatorUtils.validate(loginBody, SmsGroup.class); String phonenumber = ServletUtils.getParamFromBody("phonenumber");
String smsCode = ServletUtils.getParamFromBody("smsCode");
if (StringUtils.isBlank(phonenumber)) {
throw new AuthException("user.phonenumber.not.blank");
}
if (StringUtils.isBlank(smsCode)) {
throw new AuthException("sms.code.not.blank");
}
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody, SysClient client) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
String tenantId = loginBody.getTenantId(); String tenantId = loginBody.getTenantId();
String phonenumber = loginBody.getPhonenumber(); String phonenumber = ServletUtils.getParamFromBody("phonenumber");
String smsCode = loginBody.getSmsCode(); String smsCode = ServletUtils.getParamFromBody("smsCode");
// 通过手机号查找用户 // 通过手机号查找用户
SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber); SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber);

View File

@ -17,10 +17,11 @@ import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.exception.user.AuthException;
import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.validate.auth.SocialGroup; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.config.properties.SocialProperties;
import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.social.utils.SocialUtils;
@ -53,8 +54,19 @@ public class SocialAuthStrategy implements IAuthStrategy {
@Override @Override
public void validate(LoginBody loginBody) { public void validate() {
ValidatorUtils.validate(loginBody, SocialGroup.class); String source = ServletUtils.getParamFromBody("source");
String socialCode = ServletUtils.getParamFromBody("socialCode");
String socialState = ServletUtils.getParamFromBody("socialState");
if (StringUtils.isBlank(source)) {
throw new AuthException("social.source.not.blank");
}
if (StringUtils.isBlank(socialCode)) {
throw new AuthException("social.code.not.blank");
}
if (StringUtils.isBlank(socialState)) {
throw new AuthException("social.state.not.blank");
}
} }
/** /**

View File

@ -9,9 +9,10 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.XcxLoginUser; import org.dromara.common.core.domain.model.XcxLoginUser;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.AuthException;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.validate.auth.WechatGroup; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysClient; import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
@ -33,14 +34,17 @@ public class XcxAuthStrategy implements IAuthStrategy {
private final SysLoginService loginService; private final SysLoginService loginService;
@Override @Override
public void validate(LoginBody loginBody) { public void validate() {
ValidatorUtils.validate(loginBody, WechatGroup.class); String xcxCode = ServletUtils.getParamFromBody("xcxCode");
if (StringUtils.isBlank(xcxCode)) {
throw new AuthException("xcx.code.not.blank");
}
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody, SysClient client) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
// xcxCode 小程序调用 wx.login 授权后获取 // xcxCode 小程序调用 wx.login 授权后获取
String xcxCode = loginBody.getXcxCode(); String xcxCode = ServletUtils.getParamFromBody("xcxCode");
// todo 以下自行实现 // todo 以下自行实现
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key openid // 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key openid
String openid = ""; String openid = "";

View File

@ -51,6 +51,9 @@ email.code.not.blank=邮箱验证码不能为空
email.code.retry.limit.count=邮箱验证码输入错误{0}次 email.code.retry.limit.count=邮箱验证码输入错误{0}次
email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟 email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
xcx.code.not.blank=小程序code不能为空 xcx.code.not.blank=小程序code不能为空
social.source.not.blank=第三方登录平台不能为空
social.code.not.blank=第三方登录code不能为空
social.state.not.blank=第三方登录socialState不能为空
##租户 ##租户
tenant.number.not.blank=租户编号不能为空 tenant.number.not.blank=租户编号不能为空
tenant.not.exists=对不起, 您的租户不存在,请联系管理员 tenant.not.exists=对不起, 您的租户不存在,请联系管理员

View File

@ -51,6 +51,9 @@ email.code.not.blank=Email code cannot be blank
email.code.retry.limit.count=Email code input error {0} times email.code.retry.limit.count=Email code input error {0} times
email.code.retry.limit.exceed=Email code input error {0} times, account locked for {1} minutes email.code.retry.limit.exceed=Email code input error {0} times, account locked for {1} minutes
xcx.code.not.blank=Mini program code cannot be blank xcx.code.not.blank=Mini program code cannot be blank
social.source.not.blank=social source cannot be blank
social.code.not.blank=social code cannot be blank
social.state.not.blank=social state cannot be blank
##租户 ##租户
tenant.number.not.blank=Tenant number cannot be blank tenant.number.not.blank=Tenant number cannot be blank
tenant.not.exists=Sorry, your tenant does not exist. Please contact the administrator tenant.not.exists=Sorry, your tenant does not exist. Please contact the administrator

View File

@ -51,6 +51,9 @@ email.code.not.blank=邮箱验证码不能为空
email.code.retry.limit.count=邮箱验证码输入错误{0}次 email.code.retry.limit.count=邮箱验证码输入错误{0}次
email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟 email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
xcx.code.not.blank=小程序code不能为空 xcx.code.not.blank=小程序code不能为空
social.source.not.blank=第三方登录平台不能为空
social.code.not.blank=第三方登录code不能为空
social.state.not.blank=第三方登录socialState不能为空
##租户 ##租户
tenant.number.not.blank=租户编号不能为空 tenant.number.not.blank=租户编号不能为空
tenant.not.exists=对不起, 您的租户不存在,请联系管理员 tenant.not.exists=对不起, 您的租户不存在,请联系管理员

View File

@ -1,10 +1,8 @@
package org.dromara.common.core.domain.model; package org.dromara.common.core.domain.model;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.validate.auth.*;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
/** /**
@ -22,16 +20,6 @@ public class LoginBody {
@NotBlank(message = "{auth.clientid.not.blank}") @NotBlank(message = "{auth.clientid.not.blank}")
private String clientId; private String clientId;
/**
* 客户端key
*/
private String clientKey;
/**
* 客户端秘钥
*/
private String clientSecret;
/** /**
* 授权类型 * 授权类型
*/ */
@ -46,15 +34,15 @@ public class LoginBody {
/** /**
* 用户名 * 用户名
*/ */
@NotBlank(message = "{user.username.not.blank}", groups = {PasswordGroup.class}) @NotBlank(message = "{user.username.not.blank}")
@Length(min = UserConstants.USERNAME_MIN_LENGTH, max = UserConstants.USERNAME_MAX_LENGTH, message = "{user.username.length.valid}", groups = {PasswordGroup.class}) @Length(min = UserConstants.USERNAME_MIN_LENGTH, max = UserConstants.USERNAME_MAX_LENGTH, message = "{user.username.length.valid}")
private String username; private String username;
/** /**
* 用户密码 * 用户密码
*/ */
@NotBlank(message = "{user.password.not.blank}", groups = {PasswordGroup.class}) @NotBlank(message = "{user.password.not.blank}")
@Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}", groups = {PasswordGroup.class}) @Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
private String password; private String password;
/** /**
@ -67,52 +55,4 @@ public class LoginBody {
*/ */
private String uuid; private String uuid;
/**
* 手机号
*/
@NotBlank(message = "{user.phonenumber.not.blank}", groups = {SmsGroup.class})
private String phonenumber;
/**
* 短信code
*/
@NotBlank(message = "{sms.code.not.blank}", groups = {SmsGroup.class})
private String smsCode;
/**
* 邮箱
*/
@NotBlank(message = "{user.email.not.blank}", groups = {EmailGroup.class})
@Email(message = "{user.email.not.valid}")
private String email;
/**
* 邮箱code
*/
@NotBlank(message = "{email.code.not.blank}", groups = {EmailGroup.class})
private String emailCode;
/**
* 小程序code
*/
@NotBlank(message = "{xcx.code.not.blank}", groups = {WechatGroup.class})
private String xcxCode;
/**
* 第三方登录平台
*/
@NotBlank(message = "{social.source.not.blank}" , groups = {SocialGroup.class})
private String source;
/**
* 第三方登录code
*/
@NotBlank(message = "{social.code.not.blank}" , groups = {SocialGroup.class})
private String socialCode;
/**
* 第三方登录socialState
*/
@NotBlank(message = "{social.state.not.blank}" , groups = {SocialGroup.class})
private String socialState;
} }

View File

@ -0,0 +1,21 @@
package org.dromara.common.core.exception.user;
import org.dromara.common.core.exception.base.BaseException;
import java.io.Serial;
/**
* 认证异常类
*
* @author Michelle.Chung
*/
public class AuthException extends BaseException {
@Serial
private static final long serialVersionUID = 1L;
public AuthException(String code, Object... args) {
super("auth", code, args, null);
}
}

View File

@ -3,6 +3,8 @@ package org.dromara.common.core.utils;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.extra.servlet.JakartaServletUtil; import cn.hutool.extra.servlet.JakartaServletUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -19,10 +21,7 @@ import java.io.IOException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collections; import java.util.*;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/** /**
* 客户端工具类 * 客户端工具类
@ -99,6 +98,39 @@ public class ServletUtils extends JakartaServletUtil {
return params; return params;
} }
/**
* 获取请求体
*
* @return json
*/
public static JSONObject getParamBody() {
String body = ServletUtils.getBody(Objects.requireNonNull(ServletUtils.getRequest()));
return StringUtils.isBlank(body) ? new JSONObject() : new JSONObject(body);
}
/**
* 获取请求体 json 参数值
*
* @param key json key
* @return 参数值
*/
public static String getParamFromBody(String key) {
return getParamFromBody(key, String.class);
}
/**
* 获取请求体 json 参数值
*
* @param key json key
* @param clazz 参数类
* @param <T> 参数类型
* @return 参数值
*/
public static <T> T getParamFromBody(String key, Class<T> clazz) {
JSONObject body = getParamBody();
return !JSONUtil.isNull(body) ? body.get(key, clazz) : null;
}
/** /**
* 获取request * 获取request
*/ */

View File

@ -1,7 +0,0 @@
package org.dromara.common.core.validate.auth;
/**
* @author Michelle.Chung
*/
public interface EmailGroup {
}

View File

@ -1,7 +0,0 @@
package org.dromara.common.core.validate.auth;
/**
* @author Michelle.Chung
*/
public interface PasswordGroup {
}

View File

@ -1,7 +0,0 @@
package org.dromara.common.core.validate.auth;
/**
* @author Michelle.Chung
*/
public interface SmsGroup {
}

View File

@ -1,4 +0,0 @@
package org.dromara.common.core.validate.auth;
public interface SocialGroup {
}

View File

@ -1,7 +0,0 @@
package org.dromara.common.core.validate.auth;
/**
* @author Michelle.Chung
*/
public interface WechatGroup {
}

View File

@ -8,6 +8,7 @@ import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.*; import me.zhyd.oauth.request.*;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.social.config.properties.SocialLoginConfigProperties; import org.dromara.common.social.config.properties.SocialLoginConfigProperties;
import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.config.properties.SocialProperties;
@ -24,10 +25,13 @@ public class SocialUtils {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static AuthResponse<AuthUser> loginAuth(LoginBody loginBody, SocialProperties socialProperties) throws AuthException { public static AuthResponse<AuthUser> loginAuth(LoginBody loginBody, SocialProperties socialProperties) throws AuthException {
AuthRequest authRequest = getAuthRequest(loginBody.getSource(), socialProperties); String source = ServletUtils.getParamFromBody("source");
String socialCode = ServletUtils.getParamFromBody("socialCode");
String socialState = ServletUtils.getParamFromBody("socialState");
AuthRequest authRequest = getAuthRequest(source, socialProperties);
AuthCallback callback = new AuthCallback(); AuthCallback callback = new AuthCallback();
callback.setCode(loginBody.getSocialCode()); callback.setCode(socialCode);
callback.setState(loginBody.getSocialState()); callback.setState(socialState);
return authRequest.login(callback); return authRequest.login(callback);
} }