From d987235f17295d9fa9846cfd5caf034781968437 Mon Sep 17 00:00:00 2001 From: Abdul Qadir Date: Thu, 23 Nov 2023 21:12:20 +0500 Subject: [PATCH] Allow email/form login to bind user to org on login/signup --- .../context/FormAuthRequestContext.java | 3 ++- .../api/authentication/AuthenticationController.java | 7 ++++--- .../api/authentication/AuthenticationEndpoints.java | 1 + .../service/AuthenticationApiService.java | 2 +- .../service/AuthenticationApiServiceImpl.java | 12 +++++++++--- .../authentication/AuthenticationControllerTest.java | 12 ++++++------ .../api/authentication/GoogleAuthenticateTest.java | 2 +- 7 files changed, 24 insertions(+), 15 deletions(-) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/context/FormAuthRequestContext.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/context/FormAuthRequestContext.java index c4d51866e..eecc1fe99 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/context/FormAuthRequestContext.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/context/FormAuthRequestContext.java @@ -12,9 +12,10 @@ public class FormAuthRequestContext extends AuthRequestContext { private final String password; private final boolean register; - public FormAuthRequestContext(String loginId, String password, boolean register) { + public FormAuthRequestContext(String loginId, String password, boolean register, String orgId) { this.loginId = loginId; this.password = password; this.register = register; + this.setOrgId(orgId); } } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java index f6a58a3c5..c80d7536d 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java @@ -41,10 +41,11 @@ public class AuthenticationController implements AuthenticationEndpoints */ @Override public Mono> formLogin(@RequestBody FormLoginRequest formLoginRequest, - @RequestParam(required = false) String invitationId, - ServerWebExchange exchange) { + @RequestParam(required = false) String invitationId, + @RequestParam(required = false) String orgId, + ServerWebExchange exchange) { return authenticationApiService.authenticateByForm(formLoginRequest.loginId(), formLoginRequest.password(), - formLoginRequest.source(), formLoginRequest.register(), formLoginRequest.authId()) + formLoginRequest.source(), formLoginRequest.register(), formLoginRequest.authId(), orgId) .flatMap(user -> authenticationApiService.loginOrRegister(user, exchange, invitationId)) .thenReturn(ResponseView.success(true)); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java index 096713728..2645c1035 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java @@ -47,6 +47,7 @@ public interface AuthenticationEndpoints @PostMapping("/form/login") public Mono> formLogin(@RequestBody FormLoginRequest formLoginRequest, @RequestParam(required = false) String invitationId, + @RequestParam(required = false) String orgId, ServerWebExchange exchange); /** diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiService.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiService.java index e6ae37bd9..d47748662 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiService.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiService.java @@ -12,7 +12,7 @@ public interface AuthenticationApiService { - Mono authenticateByForm(String loginId, String password, String source, boolean register, String authId); + Mono authenticateByForm(String loginId, String password, String source, boolean register, String authId, String orgId); Mono authenticateByOauth2(String authId, String source, String code, String redirectUrl, String orgId); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java index 20b833415..d4b934b7a 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java @@ -86,8 +86,8 @@ public class AuthenticationApiServiceImpl implements AuthenticationApiService { private JWTUtils jwtUtils; @Override - public Mono authenticateByForm(String loginId, String password, String source, boolean register, String authId) { - return authenticate(authId, source, new FormAuthRequestContext(loginId, password, register)); + public Mono authenticateByForm(String loginId, String password, String source, boolean register, String authId, String orgId) { + return authenticate(authId, source, new FormAuthRequestContext(loginId, password, register, orgId)); } @Override @@ -105,7 +105,13 @@ protected Mono authenticate(String authId, @Deprecated String source, }) .doOnNext(findAuthConfig -> { context.setAuthConfig(findAuthConfig.authConfig()); - context.setOrgId(Optional.ofNullable(findAuthConfig.organization()).map(Organization::getId).orElse(null)); + if (findAuthConfig.authConfig().getSource().equals("EMAIL")) { + if(StringUtils.isBlank(context.getOrgId())) { + context.setOrgId(Optional.ofNullable(findAuthConfig.organization()).map(Organization::getId).orElse(null)); + } + } else { + context.setOrgId(Optional.ofNullable(findAuthConfig.organization()).map(Organization::getId).orElse(null)); + } }) .then(authRequestFactory.build(context)) .flatMap(authRequest -> authRequest.auth(context)) diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/AuthenticationControllerTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/AuthenticationControllerTest.java index 1930454af..8c53978d0 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/AuthenticationControllerTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/AuthenticationControllerTest.java @@ -64,7 +64,7 @@ public void testFormRegisterSuccess() { MockServerHttpRequest request = MockServerHttpRequest.post("").build(); MockServerWebExchange exchange = MockServerWebExchange.builder(request).build(); - Mono userMono = authenticationController.formLogin(formLoginRequest, null, exchange) + Mono userMono = authenticationController.formLogin(formLoginRequest, null, null, exchange) .then(userRepository.findByConnections_SourceAndConnections_RawId(source, email)); StepVerifier.create(userMono) @@ -115,8 +115,8 @@ public void testFormLoginSuccess() { MockServerHttpRequest loginRequest = MockServerHttpRequest.post("").build(); MockServerWebExchange loginExchange = MockServerWebExchange.builder(loginRequest).build(); - Mono userMono = authenticationController.formLogin(formRegisterRequest, null, registerExchange) - .then(authenticationController.formLogin(formLoginRequest, null, loginExchange)) + Mono userMono = authenticationController.formLogin(formRegisterRequest, null,null, registerExchange) + .then(authenticationController.formLogin(formLoginRequest, null, null,loginExchange)) .then(userRepository.findByConnections_SourceAndConnections_RawId(source, email)); StepVerifier.create(userMono) @@ -163,8 +163,8 @@ public void testRegisterFailByLoginIdExist() { MockServerHttpRequest request = MockServerHttpRequest.post("").build(); MockServerWebExchange exchange = MockServerWebExchange.builder(request).build(); - Mono> loginMono = authenticationController.formLogin(formLoginRequest, null, exchange) - .then(authenticationController.formLogin(formLoginRequest, null, exchange)); + Mono> loginMono = authenticationController.formLogin(formLoginRequest, null, null,exchange) + .then(authenticationController.formLogin(formLoginRequest, null,null, exchange)); StepVerifier.create(loginMono) .verifyErrorMatches(throwable -> { BizException bizException = (BizException) throwable; @@ -184,7 +184,7 @@ public void testLoginFailByLoginIdNotExist() { MockServerHttpRequest request = MockServerHttpRequest.post("").build(); MockServerWebExchange exchange = MockServerWebExchange.builder(request).build(); - Mono> loginMono = authenticationController.formLogin(formLoginRequest, null, exchange); + Mono> loginMono = authenticationController.formLogin(formLoginRequest, null, null, exchange); StepVerifier.create(loginMono) .verifyErrorMatches(throwable -> { BizException bizException = (BizException) throwable; diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GoogleAuthenticateTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GoogleAuthenticateTest.java index 2bc973614..c194e10c4 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GoogleAuthenticateTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GoogleAuthenticateTest.java @@ -60,7 +60,7 @@ public void testGoogleRegisterSuccess() { MockServerHttpRequest request = MockServerHttpRequest.post("").build(); MockServerWebExchange exchange = MockServerWebExchange.builder(request).build(); - Mono userMono = authenticationController.formLogin(formLoginRequest, null, exchange) + Mono userMono = authenticationController.formLogin(formLoginRequest, null,null, exchange) .then(userRepository.findByConnections_SourceAndConnections_RawId(source, email)); StepVerifier.create(userMono)