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 7017da2fc..8f6a2cfcd 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 @@ -90,8 +90,8 @@ public Mono> enableAuthConfig(@RequestBody AuthConfigRequest } @DeleteMapping("/config/{id}") - public Mono> disableAuthConfig(@PathVariable("id") String id) { - return authenticationApiService.disableAuthConfig(id) + public Mono> disableAuthConfig(@PathVariable("id") String id, @RequestParam(required = false) boolean delete) { + return authenticationApiService.disableAuthConfig(id, delete) .thenReturn(ResponseView.success(null)); } 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 c3db123f0..68ac9f691 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 @@ -17,7 +17,7 @@ public interface AuthenticationApiService { Mono enableAuthConfig(AuthConfigRequest authConfigRequest); - Mono disableAuthConfig(String authId); + Mono disableAuthConfig(String authId, boolean delete); Flux findAuthConfigs(boolean enableOnly); } 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 da0d58aff..2851e1070 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 @@ -41,6 +41,7 @@ import javax.annotation.Nullable; import java.util.*; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import static org.lowcoder.sdk.exception.BizError.*; @@ -239,12 +240,12 @@ public Mono enableAuthConfig(AuthConfigRequest authConfigRequest) { } @Override - public Mono disableAuthConfig(String authId) { + public Mono disableAuthConfig(String authId, boolean delete) { return checkIfAdmin() .then(checkIfOnlyEffectiveCurrentUserConnections(authId)) .then(sessionUserService.getVisitorOrgMemberCache()) .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId())) - .doOnNext(organization -> disableAuthConfig(organization, authId)) + .doOnNext(organization -> disableAuthConfig(organization, authId, delete)) .flatMap(organization -> organizationService.update(organization.getId(), organization)) .delayUntil(result -> { if (result) { @@ -309,13 +310,28 @@ private Mono checkIfOnlyEffectiveCurrentUserConnections(String authId) { .then(); } - private void disableAuthConfig(Organization organization, String authId) { - Optional.of(organization) - .map(Organization::getAuthConfigs) - .orElse(Collections.emptyList()) - .stream() - .filter(abstractAuthConfig -> Objects.equals(abstractAuthConfig.getId(), authId)) - .forEach(abstractAuthConfig -> abstractAuthConfig.setEnable(false)); + private void disableAuthConfig(Organization organization, String authId, boolean delete) { + + Predicate authConfigPredicate = abstractAuthConfig -> Objects.equals(abstractAuthConfig.getId(), authId); + + if(delete) { + List abstractAuthConfigs = Optional.of(organization) + .map(Organization::getAuthConfigs) + .orElse(Collections.emptyList()); + + abstractAuthConfigs.removeIf(authConfigPredicate); + + organization.getOrganizationDomain().setConfigs(abstractAuthConfigs); + + } else { + Optional.of(organization) + .map(Organization::getAuthConfigs) + .orElse(Collections.emptyList()).stream() + .filter(authConfigPredicate) + .forEach(abstractAuthConfig -> { + abstractAuthConfig.setEnable(false); + }); + } } /**