Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: fix existing unidir link & APITable support to reset password & timezone adjust #382

Merged
merged 11 commits into from
Feb 15, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,12 @@

package com.apitable.auth.controller;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

import com.apitable.auth.dto.UserLoginDTO;
import com.apitable.auth.enums.LoginType;
import com.apitable.auth.ro.LoginRo;
import com.apitable.auth.service.IAuthService;
import com.apitable.auth.vo.LogoutVO;
import com.apitable.core.support.ResponseData;
import com.apitable.interfaces.auth.facade.AuthServiceFacade;
import com.apitable.interfaces.auth.model.AuthParam;
import com.apitable.interfaces.auth.model.UserAuth;
Expand All @@ -51,22 +39,33 @@
import com.apitable.shared.context.SessionContext;
import com.apitable.shared.util.information.ClientOriginInfo;
import com.apitable.shared.util.information.InformationUtil;
import com.apitable.core.support.ResponseData;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
* Authorization interface
* Authorization interface.
*/
@RestController
@Api(tags = "Authorization related interface")
@ApiResource(path = "/")
@Slf4j
public class AuthController {

private static final String AUTH_DESC =
"description:verifyType,available values:\npassword\nsms_code\nemail_code";

@Resource
private IAuthService iAuthService;

Expand All @@ -79,43 +78,55 @@ public class AuthController {
@Resource
private HumanVerificationServiceFacade humanVerificationServiceFacade;

@Resource
private AuthServiceFacade authServiceFacade;

@Resource
private EventBusFacade eventBusFacade;

private static final String AUTH_DESC = "description:\n" +
"verifyType,available values:\n" +
"password\n" +
"sms_code\n" +
"email_code";
@Resource
private AuthServiceFacade authServiceFacade;

/**
* login router.
*
* @param data login data
* @param request request info
* @return {@link ResponseData}
*/
@PostResource(name = "Login", path = "/signIn", requiredLogin = false)
@ApiOperation(value = "login", notes = AUTH_DESC, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseData<Void> login(@RequestBody @Valid LoginRo data, HttpServletRequest request) {
ClientOriginInfo origin = InformationUtil.getClientOriginInfo(request, false, true);
@ApiOperation(value = "login",
notes = AUTH_DESC, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseData<Void> login(@RequestBody @Valid final LoginRo data,
final HttpServletRequest request) {
ClientOriginInfo origin = InformationUtil.getClientOriginInfo(request,
false, true);
// Login Type Routing
Map<LoginType, Function<LoginRo, Long>> loginActionFunc = new HashMap<>();
Map<LoginType, Function<LoginRo, Long>> loginActionFunc =
new HashMap<>();
// password login
loginActionFunc.put(LoginType.PASSWORD, loginRo -> {
// Password login requires human-machine authentication
humanVerificationServiceFacade.verifyNonRobot(new NonRobotMetadata(loginRo.getData()));
humanVerificationServiceFacade.verifyNonRobot(
new NonRobotMetadata(loginRo.getData()));
// Login processing
Long userId = iAuthService.loginUsingPassword(loginRo);
// sensors point - password login
eventBusFacade.onEvent(new UserLoginEvent(userId, LoginType.PASSWORD, false, origin));
// event point - password login
eventBusFacade.onEvent(
new UserLoginEvent(userId, LoginType.PASSWORD, false,
origin));
return userId;
});
// SMS verification code login
loginActionFunc.put(LoginType.SMS_CODE, loginRo -> {
UserLoginDTO result = iAuthService.loginUsingSmsCode(loginRo);
// sensors point - Login or Register
if (Boolean.TRUE.equals(result.getIsSignUp())) {
eventBusFacade.onEvent(new UserLoginEvent(result.getUserId(), LoginType.SMS_CODE, true, origin));
}
else {
eventBusFacade.onEvent(new UserLoginEvent(result.getUserId(), LoginType.SMS_CODE, false, origin));
eventBusFacade.onEvent(
new UserLoginEvent(result.getUserId(), LoginType.SMS_CODE,
true, origin));
} else {
eventBusFacade.onEvent(
new UserLoginEvent(result.getUserId(), LoginType.SMS_CODE,
false, origin));
}
return result.getUserId();
});
Expand All @@ -124,16 +135,20 @@ public ResponseData<Void> login(@RequestBody @Valid LoginRo data, HttpServletReq
UserLoginDTO result = iAuthService.loginUsingEmailCode(loginRo);
// sensors point - Login or Register
if (Boolean.TRUE.equals(result.getIsSignUp())) {
eventBusFacade.onEvent(new UserLoginEvent(result.getUserId(), LoginType.EMAIL_CODE, true, origin));
}
else {
eventBusFacade.onEvent(new UserLoginEvent(result.getUserId(), LoginType.EMAIL_CODE, false, origin));
eventBusFacade.onEvent(
new UserLoginEvent(result.getUserId(), LoginType.EMAIL_CODE,
true, origin));
} else {
eventBusFacade.onEvent(
new UserLoginEvent(result.getUserId(), LoginType.EMAIL_CODE,
false, origin));
}
return result.getUserId();
});
// SSO login (private user use)
loginActionFunc.put(LoginType.SSO_AUTH, loginRo -> {
UserAuth userAuth = authServiceFacade.ssoLogin(new AuthParam(data.getUsername(), data.getCredential()));
UserAuth userAuth = authServiceFacade.ssoLogin(
new AuthParam(data.getUsername(), data.getCredential()));
return userAuth != null ? userAuth.getUserId() : null;
});
// Handling login logic
Expand All @@ -145,17 +160,47 @@ public ResponseData<Void> login(@RequestBody @Valid LoginRo data, HttpServletReq
return ResponseData.success();
}

@PostResource(name = "sign out", path = "/signOut", requiredPermission = false, method = { RequestMethod.GET, RequestMethod.POST })
/**
* logout router.
*
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return {@link LogoutVO}
*/
@PostResource(name = "sign out", path = "/signOut", requiredPermission = false, method = {
RequestMethod.GET,
RequestMethod.POST})
@ApiOperation(value = "sign out", notes = "log out of current user")
public ResponseData<LogoutVO> logout(HttpServletRequest request, HttpServletResponse response) {
public ResponseData<LogoutVO> logout(final HttpServletRequest request,
final HttpServletResponse response) {
LogoutVO logoutVO = new LogoutVO();
UserLogout userLogout = authServiceFacade.logout(new UserAuth(SessionContext.getUserId()));
UserLogout userLogout = authServiceFacade.logout(
new UserAuth(SessionContext.getUserId()));
if (userLogout != null) {
logoutVO.setNeedRedirect(userLogout.isRedirect());
logoutVO.setRedirectUri(userLogout.getRedirectUri());
}
SessionContext.cleanContext(request);
SessionContext.removeCookie(response, cookieProperties.getI18nCookieName(), cookieProperties.getDomainName());
SessionContext.removeCookie(response,
cookieProperties.getI18nCookieName(),
cookieProperties.getDomainName());
return ResponseData.success(logoutVO);
}


/**
* reset password router.
*
* @return {@link ResponseData}
*/
@PostResource(path = "/resetPassword")
@ApiOperation(value = "reset password router", hidden = true)
public ResponseData<Void> resetPassword() {
Long userId = SessionContext.getUserId();
boolean result = authServiceFacade.resetPassword(new UserAuth(userId));
if (result) {
return ResponseData.success();
}
return ResponseData.error();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,32 @@
import com.apitable.interfaces.auth.model.UserAuth;
import com.apitable.interfaces.auth.model.UserLogout;

/**
* Auth Service Facade.
*/
public interface AuthServiceFacade {

/**
* user login.
*
* @param param login param
* @return {@link UserAuth}
*/
UserAuth ssoLogin(AuthParam param);

/**
* user logs out.
*
* @param userAuth {@link UserAuth}
* @return {@link UserLogout}
*/
UserLogout logout(UserAuth userAuth);

/**
* user reset password.
*
* @param userAuth {@link UserAuth}
* @return boolean
*/
boolean resetPassword(UserAuth userAuth);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,41 @@
import com.apitable.interfaces.auth.model.UserAuth;
import com.apitable.interfaces.auth.model.UserLogout;

/**
* default auth service implement.
*/
public class DefaultAuthServiceFacadeImpl implements AuthServiceFacade {

/**
* user login.
*
* @param param login param
* @return {@link UserAuth}
*/
@Override
public UserAuth ssoLogin(AuthParam param) {
public UserAuth ssoLogin(final AuthParam param) {
return null;
}

/**
* user logs out.
*
* @param userAuth {@link UserAuth}
* @return {@link UserLogout}
*/
@Override
public UserLogout logout(UserAuth userAuth) {
public UserLogout logout(final UserAuth userAuth) {
return null;
}

/**
* user reset password.
*
* @param userAuth {@link UserAuth}
* @return boolean
*/
@Override
public boolean resetPassword(final UserAuth userAuth) {
return false;
}
}
Loading