From 21941a1ec828efeb60408d80584d2c7d9c2060b8 Mon Sep 17 00:00:00 2001 From: Thomasr Date: Tue, 15 Apr 2025 19:20:45 -0400 Subject: [PATCH] Add group mapping for oauth provider --- .../lowcoder/domain/user/model/AuthUser.java | 3 +++ .../service/AuthenticationApiServiceImpl.java | 17 ++++++++++++++--- .../util/AuthenticationUtils.java | 3 +++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java index 5dcb1b19e..8f474da11 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java @@ -25,6 +25,9 @@ public class AuthUser { private String orgId; + // Add groupId for group mapping + private String groupId; + private AuthRequestContext authContext; /** 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 3dfb040e3..2eadd4d7e 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 @@ -23,6 +23,9 @@ import org.lowcoder.domain.authentication.FindAuthConfig; import org.lowcoder.domain.authentication.context.AuthRequestContext; import org.lowcoder.domain.authentication.context.FormAuthRequestContext; +import org.lowcoder.domain.group.model.GroupMember; +import org.lowcoder.domain.group.service.GroupMemberService; +import org.lowcoder.domain.organization.model.MemberRole; import org.lowcoder.domain.organization.model.OrgMember; import org.lowcoder.domain.organization.model.Organization; import org.lowcoder.domain.organization.model.OrganizationDomain; @@ -73,6 +76,7 @@ public class AuthenticationApiServiceImpl implements AuthenticationApiService { private final JWTUtils jwtUtils; private final AuthProperties authProperties; private final CommonConfig commonConfig; + private final GroupMemberService groupMemberService; @Override public Mono authenticateByForm(String loginId, String password, String source, boolean register, String authId, String orgId) { @@ -143,7 +147,7 @@ public Mono loginOrRegister(AuthUser authUser, ServerWebExchange exchange, return Mono.empty(); }) // after login - .delayUntil(user -> onUserLogin(authUser.getOrgId(), user, authUser.getSource())) + .delayUntil(user -> onUserLogin(authUser.getOrgId(), user, authUser.getSource(), authUser.getGroupId())) // process invite .delayUntil(__ -> { if (StringUtils.isBlank(invitationId)) { @@ -241,7 +245,7 @@ public Mono onUserRegister(User user, boolean isSuperAdmin) { return organizationService.createDefault(user, isSuperAdmin).then(); } - protected Mono onUserLogin(String orgId, User user, String source) { + protected Mono onUserLogin(String orgId, User user, String source, String groupId) { Mono orgMono; if(commonConfig.getWorkspace().getMode() == WorkspaceMode.ENTERPRISE) { orgMono = organizationService.getOrganizationInEnterpriseMode().map(HasIdAndAuditing::getId); @@ -251,7 +255,14 @@ protected Mono onUserLogin(String orgId, User user, String source) { } orgMono = Mono.just(orgId); } - return orgMono.flatMap(orgId2 -> orgApiService.tryAddUserToOrgAndSwitchOrg(orgId2, user.getId())).then(); + Mono groupMember = groupMemberService.getGroupMember(groupId, user.getId()).switchIfEmpty(Mono.defer(() -> { + GroupMember groupMember1 = GroupMember.builder() + .groupId(groupId) + .userId(user.getId()) + .build(); + return groupMemberService.addMember(orgId, groupId, user.getId(), MemberRole.MEMBER).thenReturn(groupMember1); + })); + return orgMono.flatMap(orgId2 -> orgApiService.tryAddUserToOrgAndSwitchOrg(orgId2, user.getId())).then(groupMember).then(); } @Override diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java index ce8d27274..e18ee59a3 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java @@ -93,11 +93,14 @@ public static AuthUser mapToAuthUser(Map map, HashMap