diff --git a/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-common/src/main/java/io/gravitee/am/gateway/handler/common/flow/impl/FlowManagerImpl.java b/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-common/src/main/java/io/gravitee/am/gateway/handler/common/flow/impl/FlowManagerImpl.java index ade8604daf7..c53a2404599 100644 --- a/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-common/src/main/java/io/gravitee/am/gateway/handler/common/flow/impl/FlowManagerImpl.java +++ b/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-common/src/main/java/io/gravitee/am/gateway/handler/common/flow/impl/FlowManagerImpl.java @@ -99,6 +99,9 @@ protected void doStop() throws Exception { logger.info("Dispose event listener for flow events for domain {}", domain.getName()); eventManager.unsubscribeForEvents(this, FlowEvent.class, domain.getId()); + + Set flowIds = new HashSet(flows.keySet()); + flowIds.forEach(id -> removeFlow(id)); } @Override diff --git a/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/manager/botdetection/impl/BotDetectionManagerImpl.java b/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/manager/botdetection/impl/BotDetectionManagerImpl.java index e19470a597c..3ab1f0527ce 100644 --- a/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/manager/botdetection/impl/BotDetectionManagerImpl.java +++ b/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/manager/botdetection/impl/BotDetectionManagerImpl.java @@ -40,10 +40,7 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -107,6 +104,9 @@ protected void doStop() throws Exception { LOGGER.info("Dispose event listener for bot detection events for domain {}", domain.getName()); eventManager.unsubscribeForEvents(this, BotDetectionEvent.class, domain.getId()); + + Set botIds = new HashSet<>(this.botDetections.keySet()); + botIds.forEach(this::removeBotDetection); } @Override diff --git a/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/vertx/VertxSecurityDomainHandler.java b/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/vertx/VertxSecurityDomainHandler.java index 8606ab85a71..376a50f7f48 100644 --- a/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/vertx/VertxSecurityDomainHandler.java +++ b/gravitee-am-gateway/gravitee-am-gateway-handler/gravitee-am-gateway-handler-core/src/main/java/io/gravitee/am/gateway/handler/vertx/VertxSecurityDomainHandler.java @@ -163,6 +163,7 @@ private void stopComponents() { components.add(CrossDomainManager.class); components.add(ClientManager.class); components.add(CertificateManager.class); + components.add(FlowManager.class); components.forEach(componentClass -> { LifecycleComponent lifecyclecomponent = applicationContext.getBean(componentClass); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AccessPolicyRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AccessPolicyRepository.java index 4a432af6dad..fb543eeaf5b 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AccessPolicyRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AccessPolicyRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.common.Page; import io.gravitee.am.model.uma.policy.AccessPolicy; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Single; @@ -30,6 +31,7 @@ public interface AccessPolicyRepository extends CrudRepository { Single> findByDomain(String domain, int page, int size); + Completable deleteByDomain(String domain); Flowable findByDomainAndResource(String domain, String resource); Flowable findByResources(List resources); Single countByResource(String resource); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertNotifierRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertNotifierRepository.java index 01afe4a8afb..a44d2a0d4fd 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertNotifierRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertNotifierRepository.java @@ -49,6 +49,8 @@ public interface AlertNotifierRepository extends CrudRepository findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + /** * Find all the alert notifier attached to the specified reference and matching the specified criteria. * diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertTriggerRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertTriggerRepository.java index ed716b1b67d..f69bce1b866 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertTriggerRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/AlertTriggerRepository.java @@ -19,6 +19,7 @@ import io.gravitee.am.model.alert.AlertTrigger; import io.gravitee.am.repository.common.CrudRepository; import io.gravitee.am.repository.management.api.search.AlertTriggerCriteria; +import io.reactivex.Completable; import io.reactivex.Flowable; /** @@ -36,6 +37,8 @@ public interface AlertTriggerRepository extends CrudRepository findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + /** * Find all alert triggers for a given reference type and id and matching specified criteria. * diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/BotDetectionRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/BotDetectionRepository.java index 88595b9fd69..738f050fa6b 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/BotDetectionRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/BotDetectionRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.BotDetection; import io.gravitee.am.model.ReferenceType; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Single; @@ -33,4 +34,6 @@ public interface BotDetectionRepository extends CrudRepository findByReference(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CertificateRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CertificateRepository.java index 2596981bd14..f3db9731799 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CertificateRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CertificateRepository.java @@ -17,6 +17,7 @@ import io.gravitee.am.model.Certificate; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Single; @@ -31,4 +32,6 @@ public interface CertificateRepository extends CrudRepository findAll(); Flowable findByDomain(String domain); + + Completable deleteByDomain(String domain); } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CommonUserRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CommonUserRepository.java index 64f7a9a5800..6eaea0f9fb5 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CommonUserRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/CommonUserRepository.java @@ -20,6 +20,7 @@ import io.gravitee.am.model.common.Page; import io.gravitee.am.repository.common.CrudRepository; import io.gravitee.am.repository.management.api.search.FilterCriteria; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -48,4 +49,5 @@ public interface CommonUserRepository extends CrudRepository { Maybe findById(ReferenceType referenceType, String referenceId, String userId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); } \ No newline at end of file diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/EmailRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/EmailRepository.java index 10ce683454f..2e5f5a363b8 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/EmailRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/EmailRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.Email; import io.gravitee.am.model.ReferenceType; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -45,4 +46,6 @@ public interface EmailRepository extends CrudRepository { Maybe findByDomainAndClientAndTemplate(String domain, String client, String template); Maybe findById(ReferenceType referenceType, String referenceId, String id); + + Completable deleteByReference(ReferenceType referenceType, String referenceId); } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ExtensionGrantRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ExtensionGrantRepository.java index 5e0a3753f29..87bf4e17bb0 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ExtensionGrantRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ExtensionGrantRepository.java @@ -17,6 +17,7 @@ import io.gravitee.am.model.ExtensionGrant; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -31,5 +32,7 @@ public interface ExtensionGrantRepository extends CrudRepository findByDomain(String domain); + Completable deleteByDomain(String domain); + Maybe findByDomainAndName(String domain, String name); } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FactorRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FactorRepository.java index 51813e119a6..5606311973f 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FactorRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FactorRepository.java @@ -17,6 +17,7 @@ import io.gravitee.am.model.Factor; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Single; @@ -32,4 +33,6 @@ public interface FactorRepository extends CrudRepository { Flowable findByDomain(String domain); + Completable deleteByDomain(String domain); + } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FlowRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FlowRepository.java index 611c3611e37..3e9aef33ada 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FlowRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FlowRepository.java @@ -19,6 +19,7 @@ import io.gravitee.am.model.flow.Flow; import io.gravitee.am.model.flow.Type; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -35,5 +36,7 @@ public interface FlowRepository extends CrudRepository { Flowable findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Flowable findByApplication(ReferenceType referenceType, String referenceId, String application); } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FormRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FormRepository.java index 9230f63c560..84555a76bcf 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FormRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/FormRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.Form; import io.gravitee.am.model.ReferenceType; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -32,6 +33,8 @@ public interface FormRepository extends CrudRepository { Flowable
findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Flowable findAll(ReferenceType referenceType); Flowable findByClient(ReferenceType referenceType, String referenceId, String client); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/GroupRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/GroupRepository.java index 93d907bcdca..869e7e33a7f 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/GroupRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/GroupRepository.java @@ -19,6 +19,7 @@ import io.gravitee.am.model.ReferenceType; import io.gravitee.am.model.common.Page; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -35,6 +36,8 @@ public interface GroupRepository extends CrudRepository { Flowable findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Single> findAll(ReferenceType referenceType, String referenceId, int page, int size); Flowable findByIdIn(List ids); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/IdentityProviderRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/IdentityProviderRepository.java index a36f4c112c2..c8797bbcfc4 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/IdentityProviderRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/IdentityProviderRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.IdentityProvider; import io.gravitee.am.model.ReferenceType; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -32,6 +33,8 @@ public interface IdentityProviderRepository extends CrudRepository findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Flowable findAll(ReferenceType referenceType); Flowable findAll(); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/MembershipRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/MembershipRepository.java index 163e864a38a..d6c28cc44ad 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/MembershipRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/MembershipRepository.java @@ -20,6 +20,7 @@ import io.gravitee.am.model.membership.MemberType; import io.gravitee.am.repository.common.CrudRepository; import io.gravitee.am.repository.management.api.search.MembershipCriteria; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -34,6 +35,8 @@ public interface MembershipRepository extends CrudRepository Flowable findByReference(String referenceId, ReferenceType referenceType); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Flowable findByMember(String memberId, MemberType memberType); Flowable findByCriteria(ReferenceType referenceType, String referenceId, MembershipCriteria criteria); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ReporterRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ReporterRepository.java index c98d794ba0e..f9944e81924 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ReporterRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ReporterRepository.java @@ -15,12 +15,11 @@ */ package io.gravitee.am.repository.management.api; +import io.gravitee.am.model.ReferenceType; import io.gravitee.am.model.Reporter; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; -import io.reactivex.Single; - -import java.util.List; /** * @author Titouan COMPIEGNE (titouan.compiegne at graviteesource.com) @@ -31,4 +30,6 @@ public interface ReporterRepository extends CrudRepository { Flowable findAll(); Flowable findByDomain(String domain); + + Completable deleteByDomain(String domain); } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/RoleRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/RoleRepository.java index 0a5e9348349..0796a9cec0d 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/RoleRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/RoleRepository.java @@ -19,6 +19,7 @@ import io.gravitee.am.model.Role; import io.gravitee.am.model.common.Page; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -34,6 +35,8 @@ public interface RoleRepository extends CrudRepository { Flowable findAll(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Single> findAll(ReferenceType referenceType, String referenceId, int page, int size); Single> search(ReferenceType referenceType, String referenceId, String query, int page, int size); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ScopeRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ScopeRepository.java index 752306b9b53..01ea9cc9912 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ScopeRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ScopeRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.common.Page; import io.gravitee.am.model.oauth2.Scope; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -33,6 +34,8 @@ public interface ScopeRepository extends CrudRepository { Single> findByDomain(String domain, int page, int size); + Completable deleteByDomain(String domain); + Single> search(String domain, String query, int page, int size); Maybe findByDomainAndKey(String domain, String key); diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ServiceResourceRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ServiceResourceRepository.java index 13c1109a343..d7df53ffbc4 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ServiceResourceRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/ServiceResourceRepository.java @@ -18,6 +18,7 @@ import io.gravitee.am.model.ReferenceType; import io.gravitee.am.model.resource.ServiceResource; import io.gravitee.am.repository.common.CrudRepository; +import io.reactivex.Completable; import io.reactivex.Flowable; /** @@ -28,4 +29,6 @@ public interface ServiceResourceRepository extends CrudRepository findByReference(ReferenceType referenceType, String referenceId); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/UserRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/UserRepository.java index 171ba9491be..25ea11ecb1e 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/UserRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/management/api/UserRepository.java @@ -21,6 +21,7 @@ import io.gravitee.am.model.common.Page; import io.gravitee.am.repository.common.CrudRepository; import io.gravitee.am.repository.management.api.search.FilterCriteria; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -60,4 +61,5 @@ public interface UserRepository extends CommonUserRepository { Single countByApplication(String domain, String application); Single> statistics(AnalyticsQuery query); + } diff --git a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepository.java b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepository.java index 520c70687e5..b90592ac4d2 100644 --- a/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-api/src/main/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepository.java @@ -42,6 +42,8 @@ public interface ScopeApprovalRepository extends CrudRepository findAll(ReferenceType referenceType, String referenceId) { return findByCriteria(referenceType, referenceId, new AlertNotifierCriteria()); diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcAlertTriggerRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcAlertTriggerRepository.java index 68572b15b15..0a2f1d183e6 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcAlertTriggerRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcAlertTriggerRepository.java @@ -129,7 +129,7 @@ public Single update(AlertTrigger alertTrigger) { @Override public Completable delete(String id) { LOGGER.debug("delete({})", id); - return this.alertTriggerRepository.deleteById(id); + return monoToCompletable(deleteAlertNotifiers(id)).andThen(this.alertTriggerRepository.deleteById(id)); } @Override @@ -219,4 +219,12 @@ private Mono deleteAlertNotifiers(String alertTriggerId) { return dbClient.delete().from(JdbcAlertTrigger.AlertNotifier.class).matching(from(where("alert_trigger_id").is(alertTriggerId))).then(); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + TransactionalOperator trx = TransactionalOperator.create(tm); + Mono deleteScopes = dbClient.execute("DELETE FROM alert_triggers_alert_notifiers WHERE alert_trigger_id IN (SELECT id FROM alert_triggers r WHERE r.reference_type = :refType AND r.reference_id = :refId)").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + Mono delete = dbClient.execute("DELETE FROM alert_triggers WHERE reference_type = :refType AND reference_id = :refId").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + return monoToCompletable(deleteScopes.then(delete).as(trx::transactional)); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcBotDetectionRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcBotDetectionRepository.java index 23b00417dc1..3d0c311b19c 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcBotDetectionRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcBotDetectionRepository.java @@ -114,4 +114,13 @@ public Completable delete(String id) { .matching(from(where(ID_FIELD).is(id))) .fetch().rowsUpdated()); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + return monoToCompletable(dbClient.delete() + .from(JdbcBotDetection.class) + .matching(from(where(REFERENCE_ID_FIELD).is(referenceId).and(where(REF_TYPE_FIELD).is(referenceType.name())))) + .fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcCertificateRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcCertificateRepository.java index 344535cbd2b..e657db4b789 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcCertificateRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcCertificateRepository.java @@ -39,6 +39,7 @@ import static org.springframework.data.relational.core.query.Criteria.where; import static org.springframework.data.relational.core.query.CriteriaDefinition.from; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -141,4 +142,10 @@ public Completable delete(String id) { return this.certificateRepository.deleteById(id) .doOnError(error -> LOGGER.error("Unable to delete Certificate with id {}", id, error)); } + + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("deleteByDomain({})", domain); + return monoToCompletable(this.dbClient.delete().from(JdbcCertificate.class).matching(where("domain").is(domain)).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcEmailRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcEmailRepository.java index 04fcdc710e2..1bcdcf6d3b6 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcEmailRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcEmailRepository.java @@ -40,6 +40,7 @@ import static org.springframework.data.relational.core.query.Criteria.where; import static org.springframework.data.relational.core.query.CriteriaDefinition.from; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -178,4 +179,12 @@ public Completable delete(String id) { LOGGER.debug("delete({})", id); return emailRepository.deleteById(id); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + return monoToCompletable(dbClient.delete().from(JdbcEmail.class) + .matching(from(where("reference_type").is(referenceType.name()) + .and(where("reference_id").is(referenceId)))).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcExtensionGrantRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcExtensionGrantRepository.java index 131a2589fe0..0c4f956471f 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcExtensionGrantRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcExtensionGrantRepository.java @@ -29,6 +29,9 @@ import org.springframework.stereotype.Repository; import reactor.core.publisher.Mono; +import static org.springframework.data.relational.core.query.Criteria.from; +import static org.springframework.data.relational.core.query.Criteria.where; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -95,4 +98,10 @@ public Completable delete(String id) { LOGGER.debug("delete({})", id); return extensionGrantRepository.deleteById(id); } + + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("deleteByDomain({})", domain); + return monoToCompletable(dbClient.delete().from(JdbcExtensionGrant.class).matching(from(where("domain").is(domain))).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFactorRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFactorRepository.java index 68b341e8a50..72c723c3cf3 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFactorRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFactorRepository.java @@ -26,9 +26,11 @@ import io.reactivex.Maybe; import io.reactivex.Single; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.relational.core.query.Criteria; import org.springframework.stereotype.Repository; import reactor.core.publisher.Mono; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -95,4 +97,10 @@ public Completable delete(String id) { LOGGER.debug("delete({})", id); return factorRepository.deleteById(id); } + + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("deleteByDomain({})", domain); + return monoToCompletable(dbClient.delete().from(JdbcFactor.class).matching(Criteria.where("domain").is(domain)).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFlowRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFlowRepository.java index 6c1f1361d1f..0ef65736af7 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFlowRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFlowRepository.java @@ -20,6 +20,7 @@ import io.gravitee.am.model.flow.Flow; import io.gravitee.am.model.flow.Step; import io.gravitee.am.repository.jdbc.management.AbstractJdbcRepository; +import io.gravitee.am.repository.jdbc.management.api.model.JdbcExtensionGrant; import io.gravitee.am.repository.jdbc.management.api.model.JdbcFlow; import io.gravitee.am.repository.jdbc.management.api.spring.SpringFlowRepository; import io.gravitee.am.repository.management.api.FlowRepository; @@ -30,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.r2dbc.core.DatabaseClient; +import org.springframework.data.relational.core.query.Criteria; import org.springframework.data.relational.core.query.Update; import org.springframework.data.relational.core.sql.SqlIdentifier; import org.springframework.stereotype.Repository; @@ -214,6 +216,14 @@ public Flowable findAll(ReferenceType referenceType, String referenceId) { .flatMap(flow -> completeFlow(flow).toFlowable()); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + return monoToCompletable(dbClient.delete().from(JdbcFlow.class) + .matching(from(where("reference_id").is(referenceId) + .and(where("reference_type").is(referenceType.name())))).fetch().rowsUpdated()); + } + @Override public Flowable findByApplication(ReferenceType referenceType, String referenceId, String application) { LOGGER.debug("findByApplication({}, {}, {})", referenceType, referenceId, application); diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFormRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFormRepository.java index 13752f34f5c..91eae195b3d 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFormRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcFormRepository.java @@ -30,6 +30,9 @@ import org.springframework.stereotype.Repository; import reactor.core.publisher.Mono; +import static org.springframework.data.relational.core.query.Criteria.where; +import static org.springframework.data.relational.core.query.CriteriaDefinition.from; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -123,4 +126,12 @@ public Completable delete(String id) { LOGGER.debug("delete({})", id); return formRepository.deleteById(id); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({})", referenceType, referenceId); + return monoToCompletable(dbClient.delete().from(JdbcForm.class) + .matching(from(where("reference_id").is(referenceId) + .and(where("reference_type").is(referenceType.name())))).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcGroupRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcGroupRepository.java index 0f3f0fed889..bb8491c6bee 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcGroupRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcGroupRepository.java @@ -302,4 +302,20 @@ public Completable delete(String id) { Mono delete = dbClient.delete().from(databaseDialectHelper.toSql(quoted("groups"))).matching(from(where("id").is(id))).fetch().rowsUpdated(); return monoToCompletable(delete.then(deleteChildEntities(id)).as(trx::transactional)); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("delete Group with referenceId {}/{}", referenceId, referenceType); + TransactionalOperator trx = TransactionalOperator.create(tm); + + Mono delete = dbClient.delete().from(databaseDialectHelper.toSql(quoted("groups"))).matching(from(where("reference_type").is(referenceType.name()).and(where("reference_id").is(referenceId)))).fetch().rowsUpdated(); + return monoToCompletable(deleteChildEntitiesByRef(referenceType, referenceId).then(delete).as(trx::transactional)); + } + + private Mono deleteChildEntitiesByRef(ReferenceType referenceType, String referenceId) { + Mono deleteRoles = dbClient.execute("DELETE FROM group_roles WHERE group_id IN (SELECT id FROM groups u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + Mono deleteMembers = dbClient.execute("DELETE FROM group_members WHERE group_id IN (SELECT id FROM groups u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + return deleteRoles.then(deleteMembers); + } + } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcIdentityProviderRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcIdentityProviderRepository.java index 8bff069e0cd..a4885e35740 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcIdentityProviderRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcIdentityProviderRepository.java @@ -39,6 +39,7 @@ import static org.springframework.data.relational.core.query.Criteria.where; import static org.springframework.data.relational.core.query.CriteriaDefinition.from; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -155,4 +156,12 @@ public Completable delete(String id) { LOGGER.debug("delete({})", id); return this.identityProviderRepository.deleteById(id); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType.name(), referenceId); + return monoToCompletable(dbClient.delete().from(JdbcIdentityProvider.class) + .matching(from(where("reference_id").is(referenceId) + .and(where("reference_type").is(referenceType.name())))).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcMembershipRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcMembershipRepository.java index 0408a63c13a..34936850b49 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcMembershipRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcMembershipRepository.java @@ -33,12 +33,9 @@ import org.springframework.stereotype.Repository; import reactor.core.publisher.Mono; -import java.util.List; - import static org.springframework.data.relational.core.query.Criteria.where; import static org.springframework.data.relational.core.query.CriteriaDefinition.from; -import static reactor.adapter.rxjava.RxJava2Adapter.fluxToFlowable; -import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; +import static reactor.adapter.rxjava.RxJava2Adapter.*; /** * @author Eric LELEU (eric.leleu at graviteesource.com) @@ -141,4 +138,12 @@ public Completable delete(String id) { LOGGER.debug("delete({})", id); return membershipRepository.deleteById(id); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + return monoToCompletable(dbClient.delete().from(JdbcMembership.class) + .matching(from(where("reference_id").is(referenceId) + .and(where("reference_type").is(referenceType.name())))).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcOrganizationUserRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcOrganizationUserRepository.java index a2eb9d5595c..841c63d8a5d 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcOrganizationUserRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcOrganizationUserRepository.java @@ -439,4 +439,20 @@ private Single completeUser(User userToComplete) { ); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + TransactionalOperator trx = TransactionalOperator.create(tm); + Mono delete = dbClient.execute("DELETE FROM organization_users WHERE reference_type = :refType AND reference_id = :refId").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + return monoToCompletable(deleteChildEntitiesByRef(referenceType.name(), referenceId).then(delete).as(trx::transactional)); + } + + + private Mono deleteChildEntitiesByRef(String refType, String refId) { + Mono deleteRoles = dbClient.execute("DELETE FROM organization_user_roles WHERE user_id IN (SELECT id FROM organization_users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + Mono deleteAddresses = dbClient.execute("DELETE FROM organization_user_addresses WHERE user_id IN (SELECT id FROM organization_users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + Mono deleteAttributes = dbClient.execute("DELETE FROM organization_user_attributes WHERE user_id IN (SELECT id FROM organization_users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + Mono deleteEntitlements = dbClient.execute("DELETE FROM organization_user_entitlements WHERE user_id IN (SELECT id FROM organization_users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + return deleteRoles.then(deleteAddresses).then(deleteAttributes).then(deleteEntitlements); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcReporterRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcReporterRepository.java index 9539b07f171..736619fbe10 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcReporterRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcReporterRepository.java @@ -29,6 +29,9 @@ import org.springframework.stereotype.Repository; import reactor.core.publisher.Mono; +import static org.springframework.data.relational.core.query.Criteria.where; +import static org.springframework.data.relational.core.query.CriteriaDefinition.from; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -96,4 +99,10 @@ public Completable delete(String id) { return reporterRepository.deleteById(id); } + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("deleteByDomain({})", domain); + return monoToCompletable(dbClient.delete().from(JdbcReporter.class) + .matching(from(where("domain").is(domain))).fetch().rowsUpdated()); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcRoleRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcRoleRepository.java index 73dd2056590..4daabf3e745 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcRoleRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcRoleRepository.java @@ -253,6 +253,15 @@ public Completable delete(String id) { return monoToCompletable(delete.then(deleteScopes.as(trx::transactional))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + TransactionalOperator trx = TransactionalOperator.create(tm); + Mono deleteScopes = dbClient.execute("DELETE FROM role_oauth_scopes WHERE role_id IN (SELECT id FROM roles r WHERE r.reference_type = :refType AND r.reference_id = :refId)").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + Mono delete = dbClient.execute("DELETE FROM roles WHERE reference_type = :refType AND reference_id = :refId").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + return monoToCompletable(deleteScopes.then(delete).as(trx::transactional)); + } + private Maybe completeWithScopes(Maybe maybeRole, String id) { Maybe> scopes = oauthScopeRepository.findAllByRole(id) .map(JdbcRole.OAuthScope::getScope) diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcScopeRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcScopeRepository.java index 528e8f0bd6a..467674464db 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcScopeRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcScopeRepository.java @@ -252,4 +252,12 @@ public Completable delete(String id) { return monoToCompletable(deleteClaim.then(delete).as(trx::transactional)); } + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("deleteByDomain({})", domain); + TransactionalOperator trx = TransactionalOperator.create(tm); + Mono deleteClaims = dbClient.execute("DELETE FROM scope_claims WHERE scope_id IN (SELECT id FROM scopes s WHERE s.domain = :domain)").bind("domain", domain).fetch().rowsUpdated(); + Mono delete = dbClient.delete().from(JdbcScope.class).matching(where("domain").is(domain)).fetch().rowsUpdated(); + return monoToCompletable(deleteClaims.then(delete).as(trx::transactional)); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcServiceResourceRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcServiceResourceRepository.java index 1cfd2102921..21ae10d2f5f 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcServiceResourceRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcServiceResourceRepository.java @@ -30,6 +30,9 @@ import org.springframework.stereotype.Repository; import reactor.core.publisher.Mono; +import static org.springframework.data.relational.core.query.Criteria.where; +import static org.springframework.data.relational.core.query.CriteriaDefinition.from; +import static reactor.adapter.rxjava.RxJava2Adapter.monoToCompletable; import static reactor.adapter.rxjava.RxJava2Adapter.monoToSingle; /** @@ -83,6 +86,13 @@ public Completable delete(String id) { return serviceResourceRepository.deleteById(id); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return monoToCompletable(dbClient.delete().from(JdbcServiceResource.class) + .matching(from(where("reference_id").is(referenceId) + .and(where("reference_type").is(referenceType.name())))).fetch().rowsUpdated()); + } + @Override public Flowable findByReference(ReferenceType referenceType, String referenceId) { LOGGER.debug("findByReference({}, {})", referenceType, referenceId); diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcUserRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcUserRepository.java index ad61672fc87..5bc8f5fcbd3 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcUserRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/JdbcUserRepository.java @@ -538,4 +538,20 @@ private Single completeUser(User userToComplete) { ); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("deleteByReference({}, {})", referenceType, referenceId); + TransactionalOperator trx = TransactionalOperator.create(tm); + Mono delete = dbClient.execute("DELETE FROM users WHERE reference_type = :refType AND reference_id = :refId").bind("refType", referenceType.name()).bind("refId", referenceId).fetch().rowsUpdated(); + return monoToCompletable(deleteChildEntitiesByRef(referenceType.name(), referenceId).then(delete).as(trx::transactional)); + } + + + private Mono deleteChildEntitiesByRef(String refType, String refId) { + Mono deleteRoles = dbClient.execute("DELETE FROM user_roles WHERE user_id IN (SELECT id FROM users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + Mono deleteAddresses = dbClient.execute("DELETE FROM user_addresses WHERE user_id IN (SELECT id FROM users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + Mono deleteAttributes = dbClient.execute("DELETE FROM user_attributes WHERE user_id IN (SELECT id FROM users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + Mono deleteEntitlements = dbClient.execute("DELETE FROM user_entitlements WHERE user_id IN (SELECT id FROM users u WHERE u.reference_type = :refType AND u.reference_id = :refId)").bind("refType", refType).bind("refId", refId).fetch().rowsUpdated(); + return deleteRoles.then(deleteAddresses).then(deleteAttributes).then(deleteEntitlements); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringEmailRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringEmailRepository.java index f23a0ac190e..e3959744b17 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringEmailRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringEmailRepository.java @@ -48,4 +48,5 @@ Maybe findByClientAndTemplate(@Param("refId")String refId, @Param("re @Query("select * from emails e where e.reference_id = :refId and e.reference_type = :refType and e.template = :tpl and e.client IS NULL") Maybe findByTemplate(@Param("refId")String refId, @Param("refType") String refType, @Param("tpl") String template); + } diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringFactorRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringFactorRepository.java index b39e240809d..d5cbb04297a 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringFactorRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/management/api/spring/SpringFactorRepository.java @@ -17,7 +17,6 @@ import io.gravitee.am.repository.jdbc.management.api.model.JdbcFactor; import io.reactivex.Flowable; -import io.reactivex.Maybe; import org.springframework.data.r2dbc.repository.Query; import org.springframework.data.repository.reactive.RxJava2CrudRepository; import org.springframework.stereotype.Repository; diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/oauth2/api/JdbcScopeApprovalRepository.java b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/oauth2/api/JdbcScopeApprovalRepository.java index 96de68a4030..f7372edfa01 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/oauth2/api/JdbcScopeApprovalRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/java/io/gravitee/am/repository/jdbc/oauth2/api/JdbcScopeApprovalRepository.java @@ -130,6 +130,15 @@ public Completable deleteByDomainAndUser(String domain, String user) { .fetch().rowsUpdated()); } + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("deleteByDomain({})", domain); + return monoToCompletable(dbClient.delete() + .from(JdbcScopeApproval.class) + .matching(from(where("domain").is(domain))) + .fetch().rowsUpdated()); + } + @Override public Maybe findById(String id) { LOGGER.debug("findById({})", id); diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/test/resources/logback.xml b/gravitee-am-repository/gravitee-am-repository-jdbc/src/test/resources/logback.xml new file mode 100644 index 00000000000..e3a8481469b --- /dev/null +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/test/resources/logback.xml @@ -0,0 +1,35 @@ + + + + + + + + %d{HH:mm:ss.SSS} [%thread] [%X{domain}] %-5level %logger{36} - %msg%n + + + + + + + + + + diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/AbstractUserRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/AbstractUserRepository.java index 0ca20735a92..6f021c96d87 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/AbstractUserRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/AbstractUserRepository.java @@ -406,4 +406,9 @@ private List toMongoCertificates(List modelCertif return mongoCertificate; }).collect(Collectors.toList()); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(usersCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAccessPolicyRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAccessPolicyRepository.java index 041e60cb353..fa501909707 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAccessPolicyRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAccessPolicyRepository.java @@ -98,6 +98,11 @@ public Completable delete(String id) { return Completable.fromPublisher(accessPoliciesCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByDomain(String domain) { + return Completable.fromPublisher(accessPoliciesCollection.deleteMany(eq(FIELD_DOMAIN, domain))); + } + private AccessPolicy convert(AccessPolicyMongo accessPolicyMongo) { if (accessPolicyMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertNotifierRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertNotifierRepository.java index 3e5feaa6929..71d517432a5 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertNotifierRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertNotifierRepository.java @@ -100,6 +100,11 @@ public Completable delete(String id) { return Completable.fromPublisher(collection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(collection.deleteMany(and(eq(FIELD_REFERENCE_ID, referenceId), eq(FIELD_REFERENCE_TYPE, referenceType.name())))); + } + private AlertNotifier convert(AlertNotifierMongo alertNotifierMongo) { AlertNotifier alertNotifier = new AlertNotifier(); diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertTriggerRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertTriggerRepository.java index 0bf616fbef7..2c91be69baa 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertTriggerRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoAlertTriggerRepository.java @@ -106,6 +106,11 @@ public Completable delete(String id) { return Completable.fromPublisher(collection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(collection.deleteMany(and(eq(FIELD_REFERENCE_ID, referenceId), eq(FIELD_REFERENCE_TYPE, referenceType.name())))); + } + private AlertTrigger convert(AlertTriggerMongo alertTriggerMongo) { AlertTrigger alertTrigger = new AlertTrigger(); diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoBotDetectionRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoBotDetectionRepository.java index ddfd4c1fe0c..3946e2c1624 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoBotDetectionRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoBotDetectionRepository.java @@ -80,6 +80,11 @@ public Completable delete(String id) { return Completable.fromPublisher(botDetectionMongoCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(botDetectionMongoCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + private BotDetection convert(BotDetectionMongo entity) { if (entity == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoCertificateRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoCertificateRepository.java index e7d9aaa7980..d54e355541e 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoCertificateRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoCertificateRepository.java @@ -79,6 +79,12 @@ public Single update(Certificate item) { public Completable delete(String id) { return Completable.fromPublisher(certificatesCollection.deleteOne(eq(FIELD_ID, id))); } + + @Override + public Completable deleteByDomain(String domain) { + return Completable.fromPublisher(certificatesCollection.deleteMany(eq(FIELD_DOMAIN, domain))); + } + private Certificate convert(CertificateMongo certificateMongo) { if (certificateMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoEmailRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoEmailRepository.java index 85845bfc2bb..70961073761 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoEmailRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoEmailRepository.java @@ -134,6 +134,11 @@ public Completable delete(String id) { return Completable.fromPublisher(emailsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(emailsCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + private Email convert(EmailMongo emailMongo) { if (emailMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoExtensionGrantRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoExtensionGrantRepository.java index 27338515ae9..d65dedeb92d 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoExtensionGrantRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoExtensionGrantRepository.java @@ -81,6 +81,11 @@ public Completable delete(String id) { return Completable.fromPublisher(extensionGrantsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByDomain(String domain) { + return Completable.fromPublisher(extensionGrantsCollection.deleteMany(eq(FIELD_DOMAIN, domain))); + } + private ExtensionGrant convert(ExtensionGrantMongo extensionGrantMongo) { if (extensionGrantMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFactorRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFactorRepository.java index 9dcc90acdd6..c6244f5434e 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFactorRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFactorRepository.java @@ -79,6 +79,11 @@ public Completable delete(String id) { return Completable.fromPublisher(factorsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByDomain(String domain) { + return Completable.fromPublisher(factorsCollection.deleteMany(eq(FIELD_DOMAIN, domain))); + } + private Factor convert(FactorMongo factorMongo) { if (factorMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFlowRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFlowRepository.java index 07624874e65..3a3e2455eb0 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFlowRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFlowRepository.java @@ -112,6 +112,11 @@ public Completable delete(String id) { return Completable.fromPublisher(flowsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(flowsCollection.deleteMany(and(eq(FIELD_REFERENCE_ID,referenceId), eq(FIELD_REFERENCE_TYPE, referenceType.name())))); + } + private FlowMongo convert(Flow flow) { if (flow == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFormRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFormRepository.java index 1a28fb3f1cb..aee6965cb4b 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFormRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoFormRepository.java @@ -117,6 +117,11 @@ public Completable delete(String id) { return Completable.fromPublisher(formsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(formsCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + private Form convert(FormMongo pageMongo) { if (pageMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoGroupRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoGroupRepository.java index 13f695bd4e6..137f02e2ad7 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoGroupRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoGroupRepository.java @@ -32,7 +32,6 @@ import java.util.List; import static com.mongodb.client.model.Filters.*; -import static io.gravitee.am.model.ReferenceType.DOMAIN; /** * @author Titouan COMPIEGNE (david.brassely at graviteesource.com) @@ -113,6 +112,11 @@ public Completable delete(String id) { return Completable.fromPublisher(groupsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(groupsCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + private Group convert(GroupMongo groupMongo) { if (groupMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoIdentityProviderRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoIdentityProviderRepository.java index b6b266903c1..64b32dc8b1c 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoIdentityProviderRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoIdentityProviderRepository.java @@ -96,6 +96,11 @@ public Completable delete(String id) { return Completable.fromPublisher(identitiesCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(identitiesCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + private IdentityProvider convert(IdentityProviderMongo identityProviderMongo) { if (identityProviderMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoMembershipRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoMembershipRepository.java index e7faf1cbfd8..31d14eaf701 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoMembershipRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoMembershipRepository.java @@ -121,6 +121,11 @@ public Completable delete(String id) { return Completable.fromPublisher(membershipsCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(membershipsCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + private Membership convert(MembershipMongo membershipMongo) { Membership membership = new Membership(); membership.setId(membershipMongo.getId()); diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoReporterRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoReporterRepository.java index 1e25295b314..fc62d0061a7 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoReporterRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoReporterRepository.java @@ -79,6 +79,11 @@ public Completable delete(String id) { return Completable.fromPublisher(reportersCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByDomain(String id) { + return Completable.fromPublisher(reportersCollection.deleteMany(eq(FIELD_DOMAIN, id))); + } + private ReporterMongo convert(Reporter reporter) { if (reporter == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoRoleRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoRoleRepository.java index 6675f5e7fa4..0121022dca5 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoRoleRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoRoleRepository.java @@ -124,6 +124,11 @@ public Completable delete(String id) { return Completable.fromPublisher(rolesCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(rolesCollection.deleteMany(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId)))); + } + @Override public Maybe findByNameAndAssignableType(ReferenceType referenceType, String referenceId, String name, ReferenceType assignableType) { return Observable.fromPublisher(rolesCollection.find(and(eq(FIELD_REFERENCE_TYPE, referenceType.name()), eq(FIELD_REFERENCE_ID, referenceId), eq(FIELD_NAME, name), eq(FIELD_ASSIGNABLE_TYPE, assignableType.name()))).first()).firstElement().map(this::convert); diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoScopeRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoScopeRepository.java index 004a7ddb69c..54e0de639e7 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoScopeRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoScopeRepository.java @@ -75,6 +75,11 @@ public Completable delete(String id) { return Completable.fromPublisher(scopesCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByDomain(String domain) { + return Completable.fromPublisher(scopesCollection.deleteMany(eq(FIELD_DOMAIN, domain))); + } + @Override public Single> findByDomain(String domain, int page, int size) { Bson mongoQuery = eq(FIELD_DOMAIN, domain); diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoServiceResourceRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoServiceResourceRepository.java index a1eba3df078..05690c7984e 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoServiceResourceRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoServiceResourceRepository.java @@ -74,6 +74,11 @@ public Completable delete(String id) { return Completable.fromPublisher(resourceCollection.deleteOne(eq(FIELD_ID, id))); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return Completable.fromPublisher(resourceCollection.deleteMany(and(eq(FIELD_REFERENCE_ID, referenceId),eq(FIELD_REFERENCE_TYPE, referenceType.name())))); + } + private ServiceResource convert(ServiceResourceMongo resMongo) { if (resMongo == null) { return null; diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoUserRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoUserRepository.java index 4b73772b0b7..430d2481634 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoUserRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/management/MongoUserRepository.java @@ -24,10 +24,8 @@ import io.gravitee.am.model.analytics.AnalyticsQuery; import io.gravitee.am.repository.management.api.UserRepository; import io.gravitee.am.repository.mongodb.management.internal.model.UserMongo; -import io.reactivex.Flowable; -import io.reactivex.Maybe; import io.reactivex.Observable; -import io.reactivex.Single; +import io.reactivex.*; import org.bson.Document; import org.bson.conversions.Bson; import org.springframework.stereotype.Component; @@ -160,4 +158,5 @@ private Single> registrationsStatusRepartition(AnalyticsQuer protected UserMongo convert(User user) { return convert(user, new UserMongo()); } + } diff --git a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/oauth2/MongoScopeApprovalRepository.java b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/oauth2/MongoScopeApprovalRepository.java index 6f6a5d50ef4..57fd181a2e1 100644 --- a/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/oauth2/MongoScopeApprovalRepository.java +++ b/gravitee-am-repository/gravitee-am-repository-mongodb/src/main/java/io/gravitee/am/repository/mongodb/oauth2/MongoScopeApprovalRepository.java @@ -124,6 +124,11 @@ public Completable deleteByDomainAndScopeKey(String domain, String scope) { and(eq(FIELD_DOMAIN, domain), eq(FIELD_SCOPE, scope)))); } + @Override + public Completable deleteByDomain(String domain) { + return Completable.fromPublisher(scopeApprovalsCollection.deleteMany(eq(FIELD_DOMAIN, domain))); + } + @Override public Completable delete(String id) { return Completable.fromPublisher(scopeApprovalsCollection.deleteOne(eq(FIELD_ID, id))); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AccessPolicyRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AccessPolicyRepositoryTest.java index b818345abc5..bcfbb7f903e 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AccessPolicyRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AccessPolicyRepositoryTest.java @@ -124,6 +124,36 @@ public void findByDomain() throws TechnicalException { testObserver.assertValue(p -> p.getTotalCount() == 1); } + @Test + public void deleteByDomain() throws TechnicalException { + AccessPolicy accessPolicy = new AccessPolicy(); + accessPolicy.setName("accessPolicyName"); + final String DOMAIN_SINGLE = DOMAIN_ID + "single"; + accessPolicy.setDomain(DOMAIN_SINGLE); + repository.create(accessPolicy).blockingGet(); + + AccessPolicy accessPolicyOtherDomain = new AccessPolicy(); + accessPolicyOtherDomain.setName("accessPolicyName"); + accessPolicyOtherDomain.setDomain(DOMAIN_ID+"-other"); + repository.create(accessPolicyOtherDomain).blockingGet(); + + TestObserver> testObserver = repository.findByDomain(DOMAIN_SINGLE, 0, 20).test(); + testObserver.awaitTerminalEvent(); + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(p -> p.getTotalCount() == 1); + + final TestObserver test = repository.deleteByDomain(DOMAIN_SINGLE).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + testObserver = repository.findByDomain(DOMAIN_SINGLE, 0, 20).test(); + testObserver.awaitTerminalEvent(); + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(p -> p.getTotalCount() == 0); + } + @Test public void findByDomain_Paging() throws Exception { final int totalCount = 10; diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertNotifierRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertNotifierRepositoryTest.java index 1c96c4bcd66..2f3dbaccd83 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertNotifierRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertNotifierRepositoryTest.java @@ -148,6 +148,36 @@ public void findAll() { testObserver1.assertValue(alertNotifier -> alertNotifier.getId().equals(alertNotifierCreated1.getId())); } + @Test + public void deleteByReference() { + TestSubscriber testObserver1 = alertNotifierRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); + + testObserver1.awaitTerminalEvent(); + testObserver1.assertComplete(); + testObserver1.assertNoErrors(); + testObserver1.assertNoValues(); + AlertNotifier alertNotifierToCreate1 = buildAlertNotifier(); + AlertNotifier alertNotifierToCreate2 = buildAlertNotifier(); + alertNotifierToCreate2.setReferenceId("domain#2"); + + alertNotifierRepository.create(alertNotifierToCreate1).blockingGet(); + alertNotifierRepository.create(alertNotifierToCreate2).blockingGet(); + + testObserver1 = alertNotifierRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); + testObserver1.awaitTerminalEvent(); + testObserver1.assertComplete(); + testObserver1.assertValueCount(1); + + final TestObserver test = alertNotifierRepository.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + testObserver1 = alertNotifierRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); + testObserver1.awaitTerminalEvent(); + testObserver1.assertComplete(); + testObserver1.assertValueCount(0); + } + @Test public void findByCriteriaWithEmptyNotifierIdList() { TestSubscriber testObserver1 = alertNotifierRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertTriggerRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertTriggerRepositoryTest.java index 65e4038188e..0fe5dd8610e 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertTriggerRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/AlertTriggerRepositoryTest.java @@ -173,6 +173,36 @@ public void findAll() { testObserver1.assertValue(alertTrigger -> alertTrigger.getId().equals(alertTriggerCreated1.getId())); } + @Test + public void deleteByReference() { + TestSubscriber testObserver1 = alertTriggerRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); + + testObserver1.awaitTerminalEvent(); + testObserver1.assertComplete(); + testObserver1.assertNoErrors(); + testObserver1.assertNoValues(); + AlertTrigger alertTriggerToCreate1 = buildAlertTrigger(); + AlertTrigger alertTriggerToCreate2 = buildAlertTrigger(); + alertTriggerToCreate2.setReferenceId("domain#2"); + + alertTriggerRepository.create(alertTriggerToCreate1).blockingGet(); + alertTriggerRepository.create(alertTriggerToCreate2).blockingGet(); + + testObserver1 = alertTriggerRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); + testObserver1.awaitTerminalEvent(); + testObserver1.assertComplete(); + testObserver1.assertValueCount(1); + + final TestObserver test = alertTriggerRepository.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + testObserver1 = alertTriggerRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); + testObserver1.awaitTerminalEvent(); + testObserver1.assertComplete(); + testObserver1.assertValueCount(0); + } + @Test public void findByCriteriaWithEmptyAlertNotifierIdList() { TestSubscriber testObserver1 = alertTriggerRepository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).test(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/BotDetectionRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/BotDetectionRepositoryTest.java index 2233dfb3f5e..535653cb179 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/BotDetectionRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/BotDetectionRepositoryTest.java @@ -51,6 +51,30 @@ public void testFindByDomain() throws TechnicalException { testSubscriber.assertValueCount(1); } + @Test + public void testDeleteByDomain() throws TechnicalException { + BotDetection botDetection = buildBotDetection(); + botDetection.setReferenceId("testDomain"); + botDetection.setReferenceType(ReferenceType.DOMAIN); + repository.create(botDetection).blockingGet(); + + TestSubscriber testSubscriber = repository.findByReference(ReferenceType.DOMAIN,"testDomain").test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertValueCount(1); + + final TestObserver testDomain = repository.deleteByReference(ReferenceType.DOMAIN, "testDomain").test(); + testDomain.awaitTerminalEvent(); + testDomain.assertNoErrors(); + + testSubscriber = repository.findByReference(ReferenceType.DOMAIN,"testDomain").test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertNoValues(); + } + private BotDetection buildBotDetection() { BotDetection bdetect = new BotDetection(); String random = UUID.random().toString(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/CertificateRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/CertificateRepositoryTest.java index dc4114c5832..e9901f785c9 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/CertificateRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/CertificateRepositoryTest.java @@ -153,4 +153,50 @@ public void testDelete() throws TechnicalException { // fetch domain certificateRepository.findById(certificateCreated.getId()).test().assertEmpty(); } + @Test + public void testDeleteByDomain() throws TechnicalException { + // create certificate + final String DOMAIN = "domain1"; + final String DOMAIN2 = "domain2"; + Certificate certificate = buildCertificate(); + certificate.setDomain(DOMAIN); + certificateRepository.create(certificate).blockingGet(); + + certificate = buildCertificate(); + certificate.setDomain(DOMAIN); + certificateRepository.create(certificate).blockingGet(); + + certificate = buildCertificate(); + certificate.setDomain(DOMAIN2); + certificateRepository.create(certificate).blockingGet(); + + TestSubscriber testSubscriber = certificateRepository.findByDomain(DOMAIN).test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertValueCount(2); + + testSubscriber = certificateRepository.findByDomain(DOMAIN2).test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertValueCount(1); + + // delete domain + TestObserver testObserver1 = certificateRepository.deleteByDomain(DOMAIN).test(); + testObserver1.awaitTerminalEvent(); + + // fetch domain + testSubscriber = certificateRepository.findByDomain(DOMAIN).test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertNoValues(); + + testSubscriber = certificateRepository.findByDomain(DOMAIN2).test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertValueCount(1); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/EmailRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/EmailRepositoryTest.java index 42fe4aa8917..916a1979f40 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/EmailRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/EmailRepositoryTest.java @@ -193,6 +193,39 @@ public void shouldFindAllByReference() { testIdSubscriber.assertValueSet(emails.stream().map(Email::getId).collect(Collectors.toList())); } + @Test + public void shouldDeleteByReference() { + TestSubscriber testSubscriber = repository.findAll().test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertNoErrors(); + testSubscriber.assertNoValues(); + + final int loop = 10; + List emails = IntStream.range(0, loop).mapToObj(__ -> { + final Email email = buildEmail(); + email.setReferenceId(FIXED_REF_ID); + return email; + }).collect(Collectors.toList()); + emails.forEach(email -> repository.create(email).map(e -> { + email.setId(e.getId()); + return e; + }).blockingGet()); + + TestSubscriber testIdSubscriber = repository.findAll(ReferenceType.DOMAIN, FIXED_REF_ID).map(Email::getId).test(); + testIdSubscriber.awaitTerminalEvent(); + testIdSubscriber.assertNoErrors(); + testIdSubscriber.assertValueCount(loop); + + final TestObserver test = repository.deleteByReference(ReferenceType.DOMAIN, FIXED_REF_ID).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + testIdSubscriber = repository.findAll(ReferenceType.DOMAIN, FIXED_REF_ID).map(Email::getId).test(); + testIdSubscriber.awaitTerminalEvent(); + testIdSubscriber.assertNoErrors(); + testIdSubscriber.assertNoValues(); + } + @Test public void shouldFindByClient() { TestSubscriber testSubscriber = repository.findAll().test(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ExtensionGrantRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ExtensionGrantRepositoryTest.java index 0098237ca9b..0f345314aac 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ExtensionGrantRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ExtensionGrantRepositoryTest.java @@ -150,4 +150,5 @@ public void testDelete() throws TechnicalException { // fetch extension grant extensionGrantRepository.findById(extensionGrantCreated.getId()).test().assertEmpty(); } + } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FactorRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FactorRepositoryTest.java index 6ae7b6b18ce..077be59efef 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FactorRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FactorRepositoryTest.java @@ -50,6 +50,31 @@ public void testFindByDomain() throws TechnicalException { testSubscriber.assertValueCount(1); } + @Test + public void testDeleteByDomain() throws TechnicalException { + // create factor + Factor factor = buildFactor(); + factor.setDomain("testDomain"); + factorRepository.create(factor).blockingGet(); + + // fetch factors + TestSubscriber testSubscriber = factorRepository.findByDomain("testDomain").test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertValueCount(1); + + final TestObserver testDomain = factorRepository.deleteByDomain("testDomain").test(); + testDomain.awaitTerminalEvent(); + testDomain.assertNoErrors(); + + testSubscriber = factorRepository.findByDomain("testDomain").test(); + testSubscriber.awaitTerminalEvent(); + testSubscriber.assertComplete(); + testSubscriber.assertNoErrors(); + testSubscriber.assertNoValues(); + } + private Factor buildFactor() { Factor factor = new Factor(); String random = UUID.random().toString(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FlowRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FlowRepositoryTest.java index 356df6233ad..5be24b261f5 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FlowRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FlowRepositoryTest.java @@ -63,6 +63,35 @@ public void testFindAll() { obs.assertValue(list -> list.get(0).getId().equals(flowCreated.getId()) ? list.get(0).getPre().size() == 1 : list.get(0).getPre().size() == 2); } + @Test + public void testDeleteByRef() { + Flow flow = buildFlow(1,1); + flow.setReferenceType(ReferenceType.DOMAIN); + flow.setReferenceId("DOMAIN1"); + Flow flow2 = buildFlow(2,3); + flow2.setReferenceType(ReferenceType.DOMAIN); + flow2.setReferenceId("DOMAIN1"); + + flowRepository.create(flow).blockingGet(); + flowRepository.create(flow2).blockingGet(); + + TestObserver> obs = flowRepository.findAll(ReferenceType.DOMAIN, "DOMAIN1").toList().test(); + obs.awaitTerminalEvent(); + obs.assertComplete(); + obs.assertNoErrors(); + obs.assertValue(list -> list.size() == 2); + + final TestObserver test = flowRepository.deleteByReference(ReferenceType.DOMAIN, "DOMAIN1").test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + obs = flowRepository.findAll(ReferenceType.DOMAIN, "DOMAIN1").toList().test(); + obs.awaitTerminalEvent(); + obs.assertComplete(); + obs.assertNoErrors(); + obs.assertValue(list -> list.size() == 0); + } + @Test public void testFindByApplication() { Flow flow = buildFlow(1,1); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FormRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FormRepositoryTest.java index 7ccea9d6558..025c31916a5 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FormRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/FormRepositoryTest.java @@ -158,6 +158,36 @@ public void shouldFindAllByReference() { testObserver.assertValue(l -> l.stream().map(Form::getId).distinct().count() == loop); } + @Test + public void shouldDeleteByReference() { + final int loop = 10; + for (int i = 0; i < loop; i++) { + final Form form = buildForm(); + form.setReferenceId(FIXED_REF_ID); + repository.create(form).blockingGet(); + } + + for (int i = 0; i < loop; i++) { + // random ref id + repository.create(buildForm()).blockingGet(); + } + + TestObserver> testObserver = repository.findAll(ReferenceType.DOMAIN, FIXED_REF_ID).toList().test(); + testObserver.awaitTerminalEvent(); + testObserver.assertNoErrors(); + testObserver.assertValue(l -> l.size() == loop); + testObserver.assertValue(l -> l.stream().map(Form::getId).distinct().count() == loop); + + final TestObserver test = repository.deleteByReference(ReferenceType.DOMAIN, FIXED_REF_ID).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + testObserver = repository.findAll(ReferenceType.DOMAIN, FIXED_REF_ID).toList().test(); + testObserver.awaitTerminalEvent(); + testObserver.assertNoErrors(); + testObserver.assertValue(l -> l.size() == 0); + } + @Test public void shouldFindByClient() { diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/GroupRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/GroupRepositoryTest.java index 41623c6263e..569ed8e896a 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/GroupRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/GroupRepositoryTest.java @@ -317,4 +317,38 @@ public void shouldFindByName_unknown() { testObserver.assertNoErrors(); testObserver.assertNoValues(); } + + @Test + public void shouldDeleteByRef() { + List emptyList = repository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).toList().blockingGet(); + assertNotNull(emptyList); + assertTrue(emptyList.isEmpty()); + + final Group grpDomain2 = buildGroup(); + grpDomain2.setReferenceId(UUID.randomUUID().toString()); + repository.create(grpDomain2).blockingGet(); + + final int loop = 5; + for (int i = 0; i < loop; ++i) { + final Group item = buildGroup(); + item.setReferenceId(DOMAIN_ID); + repository.create(item).blockingGet(); + } + + List groupOfDomain = repository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).toList().blockingGet(); + assertNotNull(groupOfDomain); + assertEquals(loop, groupOfDomain.size()); + + repository.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID).blockingGet(); + + groupOfDomain = repository.findAll(ReferenceType.DOMAIN, DOMAIN_ID).toList().blockingGet(); + assertNotNull(groupOfDomain); + assertEquals(0, groupOfDomain.size()); + + groupOfDomain = repository.findAll(ReferenceType.DOMAIN, grpDomain2.getReferenceId()).toList().blockingGet(); + assertNotNull(groupOfDomain); + assertEquals(1, groupOfDomain.size()); + + } + } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/IdentityProviderRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/IdentityProviderRepositoryTest.java index e96f5437fdb..0ef584adf11 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/IdentityProviderRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/IdentityProviderRepositoryTest.java @@ -191,4 +191,53 @@ public void testDelete() throws TechnicalException { identityProviderRepository.findById(identityProviderCreated.getId()).test().assertEmpty(); } + @Test + public void testDeleteByDomain() throws TechnicalException { + // create idp + IdentityProvider identityProvider = buildIdentityProvider(); + identityProvider.setReferenceId("testDomain"); + identityProviderRepository.create(identityProvider).blockingGet(); + + IdentityProvider identityProvider2 = buildIdentityProvider(); + identityProvider2.setReferenceId("testDomain"); + identityProviderRepository.create(identityProvider2).blockingGet(); + + IdentityProvider identityProvider3 = buildIdentityProvider(); + identityProvider3.setReferenceId("testDomain2"); + identityProviderRepository.create(identityProvider3).blockingGet(); + + // fetch idps + TestObserver> testObserver = identityProviderRepository.findAll(ReferenceType.DOMAIN, "testDomain").toList().test(); + testObserver.awaitTerminalEvent(); + + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(idps -> idps.size() == 2); + + testObserver = identityProviderRepository.findAll(ReferenceType.DOMAIN, "testDomain2").toList().test(); + testObserver.awaitTerminalEvent(); + + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(idps -> idps.size() == 1); + + final TestObserver testDomain = identityProviderRepository.deleteByReference(ReferenceType.DOMAIN, "testDomain").test(); + testDomain.awaitTerminalEvent(); + testDomain.assertNoErrors(); + + // fetch idps + testObserver = identityProviderRepository.findAll(ReferenceType.DOMAIN, "testDomain").toList().test(); + testObserver.awaitTerminalEvent(); + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(idps -> idps.size() == 0); + + testObserver = identityProviderRepository.findAll(ReferenceType.DOMAIN, "testDomain2").toList().test(); + testObserver.awaitTerminalEvent(); + + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(idps -> idps.size() == 1); + + } } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/MembershipRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/MembershipRepositoryTest.java index cdf8e7cb050..a0583858387 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/MembershipRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/MembershipRepositoryTest.java @@ -80,6 +80,37 @@ public void testFindByReference() { obs.assertValue(m -> m.size() == 1 && m.get(0).getId().equals(createdMembership.getId())); } + @Test + public void testDeleteByReference() { + + Membership membership = new Membership(); + membership.setRoleId("role#1"); + membership.setReferenceType(ReferenceType.ORGANIZATION); + membership.setReferenceId(ORGANIZATION_ID); + membership.setMemberType(MemberType.USER); + membership.setMemberId("user#1"); + + membershipRepository.create(membership).blockingGet(); + + membership.setId(null); + membership.setRoleId("role#2"); + membershipRepository.create(membership).blockingGet(); + + TestObserver> obs = membershipRepository.findByReference(ORGANIZATION_ID, ReferenceType.ORGANIZATION).toList().test(); + obs.awaitTerminalEvent(); + obs.assertComplete(); + obs.assertValue(m -> m.size() == 2); + + final TestObserver test = membershipRepository.deleteByReference(ReferenceType.ORGANIZATION, ORGANIZATION_ID).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + obs = membershipRepository.findByReference(ORGANIZATION_ID, ReferenceType.ORGANIZATION).toList().test(); + obs.awaitTerminalEvent(); + obs.assertComplete(); + obs.assertValue(m -> m.size() == 0); + } + @Test public void testFindByMember() { diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/OrganizationUserRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/OrganizationUserRepositoryTest.java index f7e8e151669..9305b1fa585 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/OrganizationUserRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/OrganizationUserRepositoryTest.java @@ -30,6 +30,7 @@ import io.gravitee.am.repository.management.api.search.FilterCriteria; import io.reactivex.observers.TestObserver; import io.reactivex.subscribers.TestSubscriber; +import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -749,4 +750,43 @@ private void testSearch_wildcard(String query) { testObserver.assertValue(users -> users.getData().size() == 2); } + @Test + public void testDeleteByRef() throws TechnicalException { + final String ORG_1 = "org1"; + final String ORG_2 = "org2"; + + // create user + User user = buildUser(); + user.setReferenceId(ORG_1); + user.setReferenceType(ReferenceType.ORGANIZATION); + organizationUserRepository.create(user).blockingGet(); + + user = buildUser(); + user.setReferenceId(ORG_1); + user.setReferenceType(ReferenceType.ORGANIZATION); + organizationUserRepository.create(user).blockingGet(); + + user = buildUser(); + user.setReferenceId(ORG_2); + user.setReferenceType(ReferenceType.ORGANIZATION); + organizationUserRepository.create(user).blockingGet(); + + final long usersDomain1 = organizationUserRepository.findAll(ReferenceType.ORGANIZATION, ORG_1).count().blockingGet(); + Assert.assertEquals("Org1 should have 2 users", 2, usersDomain1); + long usersDomain2 = organizationUserRepository.findAll(ReferenceType.ORGANIZATION, ORG_2).count().blockingGet(); + Assert.assertEquals("Org2 should have 1 users", 1, usersDomain2); + + // delete user + TestObserver testObserver1 = organizationUserRepository.deleteByReference(ReferenceType.ORGANIZATION, ORG_1).test(); + testObserver1.awaitTerminalEvent(); + + // fetch user + final TestSubscriber find = organizationUserRepository.findAll(ReferenceType.ORGANIZATION, ORG_1).test(); + find.awaitTerminalEvent(); + find.assertNoValues(); + + usersDomain2 = organizationUserRepository.findAll(ReferenceType.ORGANIZATION, ORG_2).count().blockingGet(); + Assert.assertEquals("Org2 should have 1 users", 1, usersDomain2); + + } } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RepositoryRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RepositoryRepositoryTest.java index ef0718712b1..01bacc157eb 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RepositoryRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RepositoryRepositoryTest.java @@ -131,6 +131,32 @@ public void shouldFindByDomain() { testObserver.assertValue( p -> p.stream().map(Reporter::getId).distinct().count() == loop/2); } + @Test + public void shouldDeleteByDomain() { + final int loop = 10; + final String domain = "fixedDomainId"; + for (int i =0; i < loop; ++i) { + Reporter reporter = buildReporter(); + if (i % 2 == 0) reporter.setDomain(domain); + repository.create(reporter).blockingGet(); + } + + TestObserver> testObserver = repository.findByDomain(domain).toList().test(); + testObserver.awaitTerminalEvent(); + testObserver.assertNoErrors(); + testObserver.assertValue( p -> p.size() == loop/2); + testObserver.assertValue( p -> p.stream().map(Reporter::getId).distinct().count() == loop/2); + + final TestObserver test = repository.deleteByDomain(domain).test(); + test.awaitTerminalEvent(); + test.assertNoErrors(); + + testObserver = repository.findByDomain(domain).toList().test(); + testObserver.awaitTerminalEvent(); + testObserver.assertNoErrors(); + testObserver.assertValue( p -> p.size() == 0); + } + private void assertEqualsTo(Reporter reporter, TestObserver testObserver) { testObserver.assertValue(p -> p.getName().equals(reporter.getName())); testObserver.assertValue(p -> p.getType().equals(reporter.getType())); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RoleRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RoleRepositoryTest.java index 336f2abc9e3..d24da02dfe2 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RoleRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/RoleRepositoryTest.java @@ -15,15 +15,13 @@ */ package io.gravitee.am.repository.management.api; -import io.gravitee.am.model.Acl; -import io.gravitee.am.model.Platform; -import io.gravitee.am.model.ReferenceType; -import io.gravitee.am.model.Role; +import io.gravitee.am.model.*; import io.gravitee.am.model.permissions.Permission; import io.gravitee.am.repository.exceptions.TechnicalException; import io.gravitee.am.repository.management.AbstractManagementTest; import io.reactivex.observers.TestObserver; import io.reactivex.subscribers.TestSubscriber; +import org.junit.Assert; import org.junit.Test; import org.mockito.internal.util.collections.Sets; import org.springframework.beans.factory.annotation.Autowired; @@ -261,4 +259,45 @@ public void testDelete() throws TechnicalException { roleRepository.findById(roleCreated.getId()).test().assertEmpty(); } + + @Test + public void testDeleteByRef() throws TechnicalException { + final String DOMAIN_1 = "domain1"; + final String DOMAIN_2 = "domain2"; + + // create role + Role role = buildRole(); + role.setReferenceId(DOMAIN_1); + role.setReferenceType(ReferenceType.DOMAIN); + roleRepository.create(role).blockingGet(); + + role = buildRole(); + role.setReferenceId(DOMAIN_1); + role.setReferenceType(ReferenceType.DOMAIN); + roleRepository.create(role).blockingGet(); + + role = buildRole(); + role.setReferenceId(DOMAIN_2); + role.setReferenceType(ReferenceType.DOMAIN); + roleRepository.create(role).blockingGet(); + + final long rolesDomain1 = roleRepository.findAll(ReferenceType.DOMAIN, DOMAIN_1).count().blockingGet(); + Assert.assertEquals("Domain1 should have 2 roles", 2, rolesDomain1); + long rolesDomain2 = roleRepository.findAll(ReferenceType.DOMAIN, DOMAIN_2).count().blockingGet(); + Assert.assertEquals("Domain2 should have 1 role", 1, rolesDomain2); + + // delete role + TestObserver testObserver1 = roleRepository.deleteByReference(ReferenceType.DOMAIN, DOMAIN_1).test(); + testObserver1.awaitTerminalEvent(); + + // fetch role + final TestSubscriber find = roleRepository.findAll(ReferenceType.DOMAIN, DOMAIN_1).test(); + find.awaitTerminalEvent(); + find.assertNoValues(); + + rolesDomain2 = roleRepository.findAll(ReferenceType.DOMAIN, DOMAIN_2).count().blockingGet(); + Assert.assertEquals("Domain2 should have 1 role", 1, rolesDomain2); + } + + } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ScopeRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ScopeRepositoryTest.java index a9cfb256221..298df4a3f4d 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ScopeRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ScopeRepositoryTest.java @@ -19,6 +19,7 @@ import io.gravitee.am.model.oauth2.Scope; import io.gravitee.am.repository.management.AbstractManagementTest; import io.gravitee.am.repository.exceptions.TechnicalException; +import io.reactivex.Completable; import io.reactivex.observers.TestObserver; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -53,6 +54,35 @@ public void testFindByDomain() { testObserver.assertValue(scopes -> scopes.getData().iterator().next().getClaims().size() == 2); } + @Test + public void testDeleteByDomain() { + // create scope + Scope scope = new Scope(); + scope.setName("testName"); + scope.setDomain("testDomain"); + scope.setClaims(Arrays.asList("claim1", "claim2")); + scopeRepository.create(scope).blockingGet(); + + // fetch scopes + TestObserver> testObserver = scopeRepository.findByDomain("testDomain", 0, Integer.MAX_VALUE).test(); + testObserver.awaitTerminalEvent(); + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(scopes -> scopes.getData().size() == 1); + testObserver.assertValue(scopes -> scopes.getData().iterator().next().getClaims().size() == 2); + + final TestObserver testDomain = scopeRepository.deleteByDomain("testDomain").test(); + testDomain.awaitTerminalEvent(); + testDomain.assertNoErrors(); + + testObserver = scopeRepository.findByDomain("testDomain", 0, Integer.MAX_VALUE).test(); + testObserver.awaitTerminalEvent(); + testObserver.assertComplete(); + testObserver.assertNoErrors(); + testObserver.assertValue(scopes -> scopes.getData().size() == 0); + + } + @Test public void testFindByDomainAndKey() { // create scope diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ServiceResourceRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ServiceResourceRepositoryTest.java index e3e0df40999..a7e834f1b24 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ServiceResourceRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/ServiceResourceRepositoryTest.java @@ -57,6 +57,32 @@ public void testFindByDomain() throws TechnicalException { testDomain.assertValue(f -> f.getType().equals(resourceCreated.getType())); } + @Test + public void testDeleteByDomain() throws TechnicalException { + // create res + ServiceResource resource = buildResource(); + resource.setReferenceId("testDomain"); + ServiceResource resourceCreated = serviceResourceRepository.create(resource).blockingGet(); + + // fetch factors + TestSubscriber testDomain = serviceResourceRepository.findByReference(ReferenceType.DOMAIN, "testDomain").test(); + testDomain.awaitTerminalEvent(); + testDomain.assertComplete(); + testDomain.assertNoErrors(); + testDomain.assertValueCount(1); + + final TestObserver testDomain1 = serviceResourceRepository.deleteByReference(ReferenceType.DOMAIN, "testDomain").test(); + testDomain1.awaitTerminalEvent(); + testDomain1.assertNoErrors(); + + testDomain = serviceResourceRepository.findByReference(ReferenceType.DOMAIN, "testDomain").test(); + testDomain.awaitTerminalEvent(); + testDomain.assertComplete(); + testDomain.assertNoErrors(); + testDomain.assertNoValues(); + + } + private ServiceResource buildResource() { ServiceResource resource = new ServiceResource(); String random = UUID.random().toString(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/UserRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/UserRepositoryTest.java index acd5b8966d6..99e60906c92 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/UserRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/UserRepositoryTest.java @@ -32,6 +32,7 @@ import io.gravitee.am.repository.management.api.search.FilterCriteria; import io.reactivex.observers.TestObserver; import io.reactivex.subscribers.TestSubscriber; +import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -324,10 +325,7 @@ public void testUpdate() throws TechnicalException { @Test public void testDelete() throws TechnicalException { // create user - User user = new User(); - user.setReferenceType(ReferenceType.DOMAIN); - user.setReferenceId("domainId"); - user.setUsername("testsUsername"); + User user = buildUser(); User userCreated = userRepository.create(user).blockingGet(); // fetch user @@ -345,6 +343,46 @@ public void testDelete() throws TechnicalException { userRepository.findById(userCreated.getId()).test().assertEmpty(); } + @Test + public void testDeleteByRef() throws TechnicalException { + final String DOMAIN_1 = "domain1"; + final String DOMAIN_2 = "domain2"; + + // create user + User user = buildUser(); + user.setReferenceId(DOMAIN_1); + user.setReferenceType(ReferenceType.DOMAIN); + userRepository.create(user).blockingGet(); + + user = buildUser(); + user.setReferenceId(DOMAIN_1); + user.setReferenceType(ReferenceType.DOMAIN); + userRepository.create(user).blockingGet(); + + user = buildUser(); + user.setReferenceId(DOMAIN_2); + user.setReferenceType(ReferenceType.DOMAIN); + userRepository.create(user).blockingGet(); + + final long usersDomain1 = userRepository.findAll(ReferenceType.DOMAIN, DOMAIN_1).count().blockingGet(); + Assert.assertEquals("Domain1 should have 2 users", 2, usersDomain1); + long usersDomain2 = userRepository.findAll(ReferenceType.DOMAIN, DOMAIN_2).count().blockingGet(); + Assert.assertEquals("Domain2 should have 1 users", 1, usersDomain2); + + // delete user + TestObserver testObserver1 = userRepository.deleteByReference(ReferenceType.DOMAIN, DOMAIN_1).test(); + testObserver1.awaitTerminalEvent(); + + // fetch user + final TestSubscriber find = userRepository.findAll(ReferenceType.DOMAIN, DOMAIN_1).test(); + find.awaitTerminalEvent(); + find.assertNoValues(); + + usersDomain2 = userRepository.findAll(ReferenceType.DOMAIN, DOMAIN_2).count().blockingGet(); + Assert.assertEquals("Domain2 should have 1 users", 1, usersDomain2); + + } + @Test public void testSearch_byUsername_strict() { testSearch_strict("testUsername"); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertNotifierService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertNotifierService.java index 3a60228c803..abd30198527 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertNotifierService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertNotifierService.java @@ -41,4 +41,6 @@ public interface AlertNotifierService { Single update(ReferenceType referenceType, String referenceId, String alertNotifierId, PatchAlertNotifier patchAlertNotifier, User byUser); Completable delete(ReferenceType referenceType, String referenceId, String notifierId, User byUser); + + Completable deleteByReference(ReferenceType referenceType, String referenceId); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertTriggerService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertTriggerService.java index 5a5f1399d25..1105f62ef9d 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertTriggerService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/AlertTriggerService.java @@ -38,4 +38,6 @@ public interface AlertTriggerService { Single createOrUpdate(ReferenceType referenceType, String referenceId, PatchAlertTrigger patchAlertTrigger, User byUser); Completable delete(ReferenceType referenceType, String referenceId, String alertTriggerId, User byUser); + + Completable deleteByReference(ReferenceType referenceType, String referenceId); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/BotDetectionService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/BotDetectionService.java index be9075f254a..8baa5622aa8 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/BotDetectionService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/BotDetectionService.java @@ -42,6 +42,8 @@ public interface BotDetectionService { Completable delete(String domain, String botDetectionId, User principal); + Completable deleteByDomain(String domain); + default Single create(String domain, NewBotDetection botDetection) { return create(domain, botDetection, null); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/CertificateService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/CertificateService.java index ae3a5b482b3..7d495426088 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/CertificateService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/CertificateService.java @@ -64,4 +64,5 @@ default Completable delete(String certificateId) { return delete(certificateId, null); } + Completable deleteByDomain(String domainId); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/EmailTemplateService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/EmailTemplateService.java index 46e8cf98aa7..81c2ce6f290 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/EmailTemplateService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/EmailTemplateService.java @@ -66,6 +66,8 @@ public interface EmailTemplateService { Completable delete(String emailId, User principal); + Completable deleteByDomain(String domain); + default Single create(String domain, NewEmail newEmail) { return create(domain, newEmail, null); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/ExtensionGrantService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/ExtensionGrantService.java index 2a7c9d3ea31..1d9fd04ed84 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/ExtensionGrantService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/ExtensionGrantService.java @@ -40,6 +40,8 @@ public interface ExtensionGrantService { Completable delete(String domain, String certificateId, User principal); + Completable deleteByDomain(String domain); + default Single create(String domain, NewExtensionGrant newExtensionGrant) { return create(domain, newExtensionGrant, null); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/FactorService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/FactorService.java index 4a2a49e8ec9..79aaa280213 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/FactorService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/FactorService.java @@ -36,6 +36,8 @@ public interface FactorService { Flowable findByDomain(String domain); + Completable deleteByDomain(String domain); + Single create(String domain, NewFactor factor, User principal); Single update(String domain, String id, UpdateFactor updateFactor, User principal); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/FlowService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/FlowService.java index 77cbc047463..6bcd8936a0e 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/FlowService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/FlowService.java @@ -53,6 +53,8 @@ public interface FlowService { Completable delete(String id, User principal); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Single getSchema(); default Flowable findAll(ReferenceType referenceType, String referenceId) { diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/FormService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/FormService.java index 54400ddd10f..265c2beab51 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/FormService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/FormService.java @@ -72,6 +72,8 @@ public interface FormService { Completable delete(String domain, String pageId, User principal); + Completable deleteByDomain(String domain); + default Single create(String domain, NewForm form) { return create(domain, form, null); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/GroupService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/GroupService.java index 5738c83ba0b..b038c0ae7c1 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/GroupService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/GroupService.java @@ -64,6 +64,8 @@ public interface GroupService { Completable delete(ReferenceType referenceType, String referenceId, String groupId, io.gravitee.am.identityprovider.api.User principal); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Single assignRoles(ReferenceType referenceType, String referenceId, String groupId, List roles, io.gravitee.am.identityprovider.api.User principal); Single revokeRoles(ReferenceType referenceType, String referenceId, String groupId, List roles, io.gravitee.am.identityprovider.api.User principal); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/IdentityProviderService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/IdentityProviderService.java index b1f63931569..f6a1f0a308d 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/IdentityProviderService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/IdentityProviderService.java @@ -58,6 +58,8 @@ public interface IdentityProviderService { Completable delete(String domain, String identityProviderId, User principal); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + default Single create(String domain, NewIdentityProvider identityProvider) { return create(domain, identityProvider, null); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/MembershipService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/MembershipService.java index 95ec95f4755..c86149e0f46 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/MembershipService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/MembershipService.java @@ -41,6 +41,8 @@ public interface MembershipService { Flowable findByReference(String referenceId, ReferenceType referenceType); + Completable deleteByReference(String referenceId, ReferenceType referenceType); + Flowable findByMember(String memberId, MemberType memberType); Single addOrUpdate(String organizationId, Membership membership, User principal); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/ReporterService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/ReporterService.java index 586bbc4c4f6..aded5d70e65 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/ReporterService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/ReporterService.java @@ -16,6 +16,7 @@ package io.gravitee.am.service; import io.gravitee.am.identityprovider.api.User; +import io.gravitee.am.model.ReferenceType; import io.gravitee.am.model.Reporter; import io.gravitee.am.service.model.NewReporter; import io.gravitee.am.service.model.UpdateReporter; @@ -24,8 +25,6 @@ import io.reactivex.Maybe; import io.reactivex.Single; -import java.util.List; - /** * @author Titouan COMPIEGNE (titouan.compiegne at graviteesource.com) * @author GraviteeSource Team @@ -48,6 +47,8 @@ public interface ReporterService { Completable delete(String reporterId, User principal); + Completable deleteByDomain(String domain); + default NewReporter createInternal() { return createInternal(null); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/ResourceService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/ResourceService.java index 44f2ad73001..a0bb2aa0fdb 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/ResourceService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/ResourceService.java @@ -54,6 +54,7 @@ public interface ResourceService { Single createAccessPolicy(AccessPolicy accessPolicy, String domain, String client, String user, String resource); Single updateAccessPolicy(AccessPolicy accessPolicy, String domain, String client, String user, String resource, String accessPolicyId); Completable deleteAccessPolicy(String domain, String client, String user, String resource, String accessPolicy); + Completable deleteByDomain(String domain); default Single> findByDomain(String domain) { return findByDomain(domain, 0, Integer.MAX_VALUE) diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/RoleService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/RoleService.java index f30cbae0309..b648026c2eb 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/RoleService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/RoleService.java @@ -67,6 +67,8 @@ public interface RoleService { Completable delete(ReferenceType referenceType, String referenceId, String roleId, User principal); + Completable deleteByReference(ReferenceType referenceType, String referenceId); + Completable createOrUpdateSystemRoles(); default Single create(String domain, NewRole role) { diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/ScopeService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/ScopeService.java index e9dff838da0..b412c823c12 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/ScopeService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/ScopeService.java @@ -41,6 +41,8 @@ public interface ScopeService { Single> findByDomain(String domain, int page, int size); + Completable deleteByDomain(String domain); + Maybe findByDomainAndKey(String domain, String scopeKey); Single> findByDomainAndKeys(String domain, List scopeKeys); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/ServiceResourceService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/ServiceResourceService.java index 9ac25f05d08..3378595396a 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/ServiceResourceService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/ServiceResourceService.java @@ -34,6 +34,8 @@ public interface ServiceResourceService { Flowable findByDomain(String domain); + Completable deleteByDomain(String domain); + Single create(String domain, NewServiceResource res, User principal); Single update(String domain, String id, UpdateServiceResource updateServiceResource, User principal); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/UserService.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/UserService.java index 4461151a624..8663abbcda9 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/UserService.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/UserService.java @@ -58,4 +58,5 @@ public interface UserService extends CommonUserService { Single> statistics(AnalyticsQuery query); + Completable deleteByDomain(String domainId); } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertNotifierServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertNotifierServiceImpl.java index 0436ee1dcc0..23062f7122b 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertNotifierServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertNotifierServiceImpl.java @@ -165,6 +165,11 @@ public Completable delete(ReferenceType referenceType, String referenceId, Strin .flatMapCompletable(alertNotifier -> deleteInternal(alertNotifier, byUser)); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return this.alertNotifierRepository.deleteByReference(referenceType, referenceId); + } + private Single createInternal(AlertNotifier toCreate, User byUser) { Date now = new Date(); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertTriggerServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertTriggerServiceImpl.java index 22c9273f79d..eef07788fcd 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertTriggerServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/AlertTriggerServiceImpl.java @@ -192,4 +192,9 @@ private Completable deleteInternal(AlertTrigger alertTrigger, User deletedBy) { .doOnComplete(() -> auditService.report(AuditBuilder.builder(AlertTriggerAuditBuilder.class).type(EventType.ALERT_TRIGGER_DELETED).alertTrigger(alertTrigger).principal(deletedBy))) .doOnError(throwable -> auditService.report(AuditBuilder.builder(AlertTriggerAuditBuilder.class).type(EventType.ALERT_TRIGGER_DELETED).alertTrigger(alertTrigger).principal(deletedBy).throwable(throwable))); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return this.alertTriggerRepository.deleteByReference(referenceType, referenceId); + } } \ No newline at end of file diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/BotDetectionServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/BotDetectionServiceImpl.java index c9632c99ed2..1d6e63539a0 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/BotDetectionServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/BotDetectionServiceImpl.java @@ -184,6 +184,11 @@ public Completable delete(String domainId, String botDetectionId, User principal }); } + @Override + public Completable deleteByDomain(String domain) { + return botDetectionRepository.deleteByReference(ReferenceType.DOMAIN, domain); + } + private Function> checkBotDetectionReleasedByApp(String domainId, String botDetectionId) { return botDetection -> applicationService.findByDomain(domainId) .flatMap(applications -> { diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/CertificateServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/CertificateServiceImpl.java index 0858719f5fb..636bb9a66bb 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/CertificateServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/CertificateServiceImpl.java @@ -354,6 +354,11 @@ public Completable delete(String certificateId, User principal) { }); } + @Override + public Completable deleteByDomain(String domainId) { + return certificateRepository.deleteByDomain(domainId); + } + @Override public Single create(String domain) { // Define the default certificate diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/DomainServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/DomainServiceImpl.java index b4dc5f9cb6d..4c161bd5581 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/DomainServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/DomainServiceImpl.java @@ -139,6 +139,12 @@ public class DomainServiceImpl implements DomainService { @Autowired private AlertNotifierService alertNotifierService; + @Autowired + private BotDetectionService botDetectionService; + + @Autowired + private ServiceResourceService serviceResourceService; + @Override public Maybe findById(String id) { LOGGER.debug("Find domain by ID: {}", id); @@ -355,90 +361,45 @@ public Completable delete(String domainId, User principal) { // delete applications return applicationService.findByDomain(domainId) .flatMapCompletable(applications -> { + // do not delete by reference the app to clean the membership entries into the DB. List deleteApplicationsCompletable = applications.stream().map(a -> applicationService.delete(a.getId())).collect(Collectors.toList()); return Completable.concat(deleteApplicationsCompletable); }) // delete certificates - .andThen(certificateService.findByDomain(domainId) - .flatMapCompletable(certificate -> certificateService.delete(certificate.getId())) - ) + .andThen(certificateService.deleteByDomain(domainId)) // delete identity providers - .andThen(identityProviderService.findByDomain(domainId) - .flatMapCompletable(identityProvider -> - identityProviderService.delete(domainId, identityProvider.getId()) - ) - ) + .andThen(identityProviderService.deleteByReference(ReferenceType.DOMAIN, domainId)) // delete extension grants - .andThen(extensionGrantService.findByDomain(domainId) - .flatMapCompletable(extensionGrant -> extensionGrantService.delete(domainId, extensionGrant.getId())) - ) + .andThen(extensionGrantService.deleteByDomain(domainId)) // delete roles - .andThen(roleService.findByDomain(domainId) - .flatMapCompletable(roles -> { - List deleteRolesCompletable = roles.stream().map(r -> roleService.delete(ReferenceType.DOMAIN, domainId, r.getId())).collect(Collectors.toList()); - return Completable.concat(deleteRolesCompletable); - }) - ) + .andThen(roleService.deleteByReference(ReferenceType.DOMAIN, domainId)) // delete users - .andThen(userService.findByDomain(domainId) - .flatMapCompletable(user -> - userService.delete(user.getId())) - ) + .andThen(userService.deleteByDomain(domainId)) // delete groups - .andThen(groupService.findByDomain(domainId) - .flatMapCompletable(group -> - groupService.delete(ReferenceType.DOMAIN, domainId, group.getId())) - ) + .andThen(groupService.deleteByReference(ReferenceType.DOMAIN, domainId)) // delete scopes - .andThen(scopeService.findByDomain(domainId, 0, Integer.MAX_VALUE) - .flatMapCompletable(scopes -> { - List deleteScopesCompletable = scopes.getData().stream().map(s -> scopeService.delete(s.getId(), true)).collect(Collectors.toList()); - return Completable.concat(deleteScopesCompletable); - }) - ) + .andThen(scopeService.deleteByDomain(domainId)) // delete email templates - .andThen(emailTemplateService.findAll(ReferenceType.DOMAIN, domainId) - .flatMapCompletable(emailTemplate -> emailTemplateService.delete(emailTemplate.getId())) - ) + .andThen(emailTemplateService.deleteByDomain(domainId)) // delete form templates - .andThen(formService.findByDomain(domainId) - .flatMapCompletable(formTemplate -> formService.delete(domainId, formTemplate.getId())) - ) + .andThen(formService.deleteByDomain(domainId)) + .andThen(botDetectionService.deleteByDomain(domainId)) + .andThen(serviceResourceService.deleteByDomain(domainId)) // delete reporters - .andThen(reporterService.findByDomain(domainId) - .flatMapCompletable(reporter -> - reporterService.delete(reporter.getId())) - ) + .andThen(reporterService.deleteByDomain(domainId)) // delete flows - .andThen(flowService.findAll(ReferenceType.DOMAIN, domainId) - .filter(f -> f.getId() != null) - .flatMapCompletable(flows -> flowService.delete(flows.getId())) - ) + .andThen(flowService.deleteByReference(ReferenceType.DOMAIN, domainId)) // delete memberships - .andThen(membershipService.findByReference(domainId, ReferenceType.DOMAIN) - .flatMapCompletable(membership -> membershipService.delete(membership.getId())) - ) + .andThen(membershipService.deleteByReference(domainId, ReferenceType.DOMAIN)) // delete factors - .andThen(factorService.findByDomain(domainId) - .flatMapCompletable(factor -> factorService.delete(domainId, factor.getId())) - ) + .andThen(factorService.deleteByDomain(domainId)) // delete uma resources - .andThen(resourceService.findByDomain(domainId) - .flatMapCompletable(resources -> { - List deletedResourceCompletable = resources.stream().map(resourceService::delete).collect(Collectors.toList()); - return Completable.concat(deletedResourceCompletable); - }) - ) + .andThen(resourceService.deleteByDomain(domainId)) // delete alert triggers - .andThen(alertTriggerService.findByDomainAndCriteria(domainId, new AlertTriggerCriteria()) - .flatMapCompletable(alertTrigger -> alertTriggerService.delete(alertTrigger.getReferenceType(), alertTrigger.getReferenceId(), alertTrigger.getId(), principal) - ) - ) + // delete them one by one to + .andThen(alertTriggerService.deleteByReference(ReferenceType.DOMAIN, domainId)) // delete alert notifiers - .andThen(alertNotifierService.findByDomainAndCriteria(domainId, new AlertNotifierCriteria()) - .flatMapCompletable(alertNotifier -> alertNotifierService.delete(alertNotifier.getReferenceType(), alertNotifier.getReferenceId(), alertNotifier.getId(), principal) - ) - ) + .andThen(alertNotifierService.deleteByReference(ReferenceType.DOMAIN, domainId)) .andThen(domainRepository.delete(domainId)) .andThen(Completable.fromSingle(eventService.create(new Event(Type.DOMAIN, new Payload(domainId, ReferenceType.DOMAIN, domainId, Action.DELETE))))) .doOnComplete(() -> auditService.report(AuditBuilder.builder(DomainAuditBuilder.class).principal(principal).type(EventType.DOMAIN_DELETED).domain(domain))) diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/EmailTemplateServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/EmailTemplateServiceImpl.java index 9b1b9c9fa35..7c8b9c7ab99 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/EmailTemplateServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/EmailTemplateServiceImpl.java @@ -219,6 +219,10 @@ public Completable delete(String emailId, User principal) { }); } + @Override + public Completable deleteByDomain(String domain) { + return emailRepository.deleteByReference(ReferenceType.DOMAIN, domain); + } private Single create0(ReferenceType referenceType, String referenceId, String client, NewEmail newEmail, User principal) { String emailId = RandomString.generate(); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ExtensionGrantServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ExtensionGrantServiceImpl.java index 2f3a8158deb..bb93eab4b42 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ExtensionGrantServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ExtensionGrantServiceImpl.java @@ -233,4 +233,8 @@ public Completable delete(String domain, String extensionGrantId, User principal }); } + @Override + public Completable deleteByDomain(String domain) { + return this.extensionGrantRepository.deleteByDomain(domain); + } } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FactorServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FactorServiceImpl.java index 25695e5729d..99ae872fcba 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FactorServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FactorServiceImpl.java @@ -208,4 +208,9 @@ public Completable delete(String domain, String factorId, User principal) { String.format("An error occurs while trying to delete factor: %s", factorId), ex)); }); } + + @Override + public Completable deleteByDomain(String domain) { + return this.factorRepository.deleteByDomain(domain); + } } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FlowServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FlowServiceImpl.java index 0f20f902bfc..f5cc0867d15 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FlowServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FlowServiceImpl.java @@ -217,6 +217,12 @@ public Single> createOrUpdate(ReferenceType referenceType, String ref return createOrUpdate0(referenceType, referenceId, application, flows, principal); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("Delete flow by reference {}/{}", referenceType, referenceId); + return flowRepository.deleteByReference(referenceType, referenceId); + } + @Override public Completable delete(String id, User principal) { LOGGER.debug("Delete flow {}", id); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FormServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FormServiceImpl.java index 4909e2c1156..0cb04e73569 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FormServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/FormServiceImpl.java @@ -297,6 +297,11 @@ public Completable delete(String domain, String formId, User principal) { return delete(ReferenceType.DOMAIN, domain, formId, principal); } + @Override + public Completable deleteByDomain(String domain) { + return this.formRepository.deleteByReference(ReferenceType.DOMAIN, domain); + } + private Single checkFormUniqueness(ReferenceType referenceType, String referenceId, String client, String formTemplate) { Maybe maybeSource = client == null ? findByTemplate(referenceType, referenceId, formTemplate) : diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/GroupServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/GroupServiceImpl.java index 4d3a911f7c3..00c81763bda 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/GroupServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/GroupServiceImpl.java @@ -288,7 +288,7 @@ public Completable delete(ReferenceType referenceType, String referenceId, Strin return findById(referenceType, referenceId, groupId) .flatMapCompletable(group -> groupRepository.delete(groupId) - .andThen(Completable.fromSingle(eventService.create(new Event(Type.DOMAIN, new Payload(group.getId(), group.getReferenceType(), group.getReferenceId(), Action.DELETE))))) + .andThen(Completable.fromSingle(eventService.create(new Event(Type.GROUP, new Payload(group.getId(), group.getReferenceType(), group.getReferenceId(), Action.DELETE))))) .doOnComplete(() -> auditService.report(AuditBuilder.builder(GroupAuditBuilder.class).principal(principal).type(EventType.GROUP_DELETED).group(group))) .doOnError(throwable -> auditService.report(AuditBuilder.builder(GroupAuditBuilder.class).principal(principal).type(EventType.GROUP_DELETED).throwable(throwable))) ) @@ -302,6 +302,12 @@ public Completable delete(ReferenceType referenceType, String referenceId, Strin }); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("Delete group by reference {}/{}", referenceId, referenceType); + return this.groupRepository.deleteByReference(referenceType, referenceId); + } + @Override public Single assignRoles(ReferenceType referenceType, String referenceId, String groupId, List roles, io.gravitee.am.identityprovider.api.User principal) { return assignRoles0(referenceType, referenceId, groupId, roles, principal, false); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/IdentityProviderServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/IdentityProviderServiceImpl.java index 1f917b19f67..d65670bd1a5 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/IdentityProviderServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/IdentityProviderServiceImpl.java @@ -241,7 +241,11 @@ public Completable delete(ReferenceType referenceType, String referenceId, Strin @Override public Completable delete(String domain, String identityProviderId, User principal) { - return delete(ReferenceType.DOMAIN, domain, identityProviderId, principal); } + + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + return null; + } } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/MembershipServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/MembershipServiceImpl.java index 6f97ec4cbf6..8367fe30cbb 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/MembershipServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/MembershipServiceImpl.java @@ -232,6 +232,11 @@ public Completable delete(String membershipId, User principal) { }); } + @Override + public Completable deleteByReference(String referenceId, ReferenceType referenceType) { + return membershipRepository.deleteByReference(referenceType, referenceId); + } + @Override public Completable addDomainUserRoleIfNecessary(String organizationId, String environmentId, String domainId, NewMembership newMembership, User principal) { diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ReporterServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ReporterServiceImpl.java index 8f9f4f841cf..88cc4a02a6a 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ReporterServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ReporterServiceImpl.java @@ -244,6 +244,11 @@ public Completable delete(String reporterId, User principal) { }); } + @Override + public Completable deleteByDomain(String domain) { + return reporterRepository.deleteByDomain(domain); + } + /** * This method check if the configuration attribute of a Reporter is valid * diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ResourceServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ResourceServiceImpl.java index 551cbc5c84c..83652f83da1 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ResourceServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ResourceServiceImpl.java @@ -337,6 +337,11 @@ public Completable deleteAccessPolicy(String domain, String client, String user, }); } + @Override + public Completable deleteByDomain(String domain) { + return accessPolicyRepository.deleteByDomain(domain); + } + private Single validateScopes(Resource toValidate) { if(toValidate.getResourceScopes()==null || toValidate.getResourceScopes().isEmpty()) { return Single.error(new MissingScopeException()); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/RoleServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/RoleServiceImpl.java index bddee289466..5d63322288e 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/RoleServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/RoleServiceImpl.java @@ -293,6 +293,12 @@ public Completable delete(ReferenceType referenceType, String referenceId, Strin }); } + @Override + public Completable deleteByReference(ReferenceType referenceType, String referenceId) { + LOGGER.debug("Delete roles by reference id {}/{}", referenceId, referenceType.name()); + return roleRepository.deleteByReference(referenceType, referenceId); + } + @Override public Completable createOrUpdateSystemRoles() { diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ScopeServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ScopeServiceImpl.java index 74b2909f893..0fa6ab1d189 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ScopeServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ScopeServiceImpl.java @@ -45,7 +45,10 @@ import java.net.MalformedURLException; import java.net.URI; -import java.util.*; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -345,6 +348,12 @@ public Completable delete(String scopeId, boolean force, User principal) { }); } + @Override + public Completable deleteByDomain(String domain) { + LOGGER.debug("Delete scopes by domain: {}", domain); + return scopeApprovalRepository.deleteByDomain(domain).andThen(scopeRepository.deleteByDomain(domain)); + } + @Override public Single> findByDomain(String domain, int page, int size) { LOGGER.debug("Find scopes by domain: {}", domain); diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ServiceResourceServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ServiceResourceServiceImpl.java index f43480ae13d..1f273822cfa 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ServiceResourceServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/ServiceResourceServiceImpl.java @@ -194,4 +194,9 @@ public Completable delete(String domain, String resourceId, User principal) { String.format("An error occurs while trying to delete resource: %s", resourceId), ex)); }); } + + @Override + public Completable deleteByDomain(String domain) { + return this.serviceResourceRepository.deleteByReference(ReferenceType.DOMAIN, domain); + } } diff --git a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/UserServiceImpl.java b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/UserServiceImpl.java index 7c785bc1698..73fd70864b3 100644 --- a/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/UserServiceImpl.java +++ b/gravitee-am-service/src/main/java/io/gravitee/am/service/impl/UserServiceImpl.java @@ -17,7 +17,6 @@ import io.gravitee.am.common.event.Action; import io.gravitee.am.common.event.Type; -import io.gravitee.am.model.Group; import io.gravitee.am.model.ReferenceType; import io.gravitee.am.model.User; import io.gravitee.am.model.analytics.AnalyticsQuery; @@ -25,13 +24,12 @@ import io.gravitee.am.model.common.event.Event; import io.gravitee.am.model.common.event.Payload; import io.gravitee.am.repository.management.api.UserRepository; -import io.gravitee.am.service.GroupService; -import io.gravitee.am.service.RoleService; import io.gravitee.am.service.UserService; import io.gravitee.am.service.exception.AbstractManagementException; import io.gravitee.am.service.exception.TechnicalManagementException; import io.gravitee.am.service.model.NewUser; import io.gravitee.am.service.model.UpdateUser; +import io.reactivex.Completable; import io.reactivex.Flowable; import io.reactivex.Maybe; import io.reactivex.Single; @@ -40,7 +38,6 @@ import org.springframework.stereotype.Component; import java.util.*; -import java.util.stream.Collectors; /** * @author David BRASSELY (david.brassely at graviteesource.com) @@ -176,4 +173,9 @@ public Single> statistics(AnalyticsQuery query) { String.format("An error occurs while count users analytics : %s", query), ex)); }); } -} + + public Completable deleteByDomain(String domain) { + LOGGER.debug("Delete all users from domain {}", domain); + return userRepository.deleteByReference(ReferenceType.DOMAIN, domain); + } +} \ No newline at end of file diff --git a/gravitee-am-service/src/test/java/io/gravitee/am/service/DomainServiceTest.java b/gravitee-am-service/src/test/java/io/gravitee/am/service/DomainServiceTest.java index a48848b988e..c672c7845ce 100644 --- a/gravitee-am-service/src/test/java/io/gravitee/am/service/DomainServiceTest.java +++ b/gravitee-am-service/src/test/java/io/gravitee/am/service/DomainServiceTest.java @@ -197,6 +197,12 @@ public class DomainServiceTest { @Mock private AlertNotifierService alertNotifierService; + @Mock + private BotDetectionService botDetectionService; + + @Mock + private ServiceResourceService serviceResourceService; + @Test public void shouldFindById() { when(domainRepository.findById("my-domain")).thenReturn(Maybe.just(new Domain())); @@ -561,51 +567,24 @@ public void shouldDelete() { when(domainRepository.delete(DOMAIN_ID)).thenReturn(Completable.complete()); when(applicationService.findByDomain(DOMAIN_ID)).thenReturn(Single.just(mockApplications)); when(applicationService.delete(anyString())).thenReturn(Completable.complete()); - when(certificate.getId()).thenReturn(CERTIFICATE_ID); - when(certificateService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(certificate)); - when(certificateService.delete(anyString())).thenReturn(Completable.complete()); - when(identityProvider.getId()).thenReturn(IDP_ID); - when(identityProviderService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(identityProvider)); - when(identityProviderService.delete(eq(DOMAIN_ID), anyString())).thenReturn(Completable.complete()); - when(extensionGrant.getId()).thenReturn(EXTENSION_GRANT_ID); - when(extensionGrantService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(extensionGrant)); - when(extensionGrantService.delete(eq(DOMAIN_ID), anyString())).thenReturn(Completable.complete()); - when(role.getId()).thenReturn(ROLE_ID); - when(roleService.findByDomain(DOMAIN_ID)).thenReturn(Single.just(Collections.singleton(role))); - when(roleService.delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), anyString())).thenReturn(Completable.complete()); - when(user.getId()).thenReturn(USER_ID); - when(userService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(user)); - when(userService.delete(anyString())).thenReturn(Completable.complete()); - when(scope.getId()).thenReturn(SCOPE_ID); - when(scopeService.findByDomain(DOMAIN_ID, 0, Integer.MAX_VALUE)).thenReturn(Single.just(new Page<>(Collections.singleton(scope),0,1))); - when(scopeService.delete(SCOPE_ID, true)).thenReturn(Completable.complete()); - when(group.getId()).thenReturn(GROUP_ID); - when(groupService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(group)); - when(groupService.delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), anyString())).thenReturn(Completable.complete()); - when(form.getId()).thenReturn(FORM_ID); - when(formService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(form)); - when(formService.delete(eq(DOMAIN_ID), anyString())).thenReturn(Completable.complete()); - when(email.getId()).thenReturn(EMAIL_ID); - when(emailTemplateService.findAll(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Flowable.just(email)); - when(emailTemplateService.delete(anyString())).thenReturn(Completable.complete()); - when(reporter.getId()).thenReturn(REPORTER_ID); - when(reporterService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(reporter)); - when(reporterService.delete(anyString())).thenReturn(Completable.complete()); - when(flow.getId()).thenReturn(FLOW_ID); - when(flowService.findAll(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Flowable.just(flow)); - when(flowService.delete(anyString())).thenReturn(Completable.complete()); - when(membership.getId()).thenReturn(MEMBERSHIP_ID); - when(membershipService.findByReference(DOMAIN_ID, ReferenceType.DOMAIN)).thenReturn(Flowable.just(membership)); - when(membershipService.delete(anyString())).thenReturn(Completable.complete()); - when(factor.getId()).thenReturn(FACTOR_ID); - when(factorService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.just(factor)); - when(factorService.delete(DOMAIN_ID, FACTOR_ID)).thenReturn(Completable.complete()); - when(resourceService.findByDomain(DOMAIN_ID)).thenReturn(Single.just(new HashSet<>(Collections.singletonList(resource)))); - when(resourceService.delete(resource)).thenReturn(Completable.complete()); - when(alertTriggerService.findByDomainAndCriteria(DOMAIN_ID, new AlertTriggerCriteria())).thenReturn(Flowable.just(alertTrigger)); - when(alertTriggerService.delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), eq(ALERT_TRIGGER_ID), isNull())).thenReturn(Completable.complete()); - when(alertNotifierService.findByDomainAndCriteria(DOMAIN_ID, new AlertNotifierCriteria())).thenReturn(Flowable.just(alertNotifier)); - when(alertNotifierService.delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), eq(ALERT_NOTIFIER_ID), isNull())).thenReturn(Completable.complete()); + when(certificateService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(identityProviderService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(extensionGrantService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(roleService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(userService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(scopeService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(groupService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(formService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(emailTemplateService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(reporterService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(flowService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(membershipService.deleteByReference(DOMAIN_ID, ReferenceType.DOMAIN)).thenReturn(Completable.complete()); + when(factorService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(resourceService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(alertTriggerService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(alertNotifierService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(botDetectionService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(serviceResourceService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); when(eventService.create(any())).thenReturn(Single.just(new Event())); TestObserver testObserver = domainService.delete(DOMAIN_ID).test(); @@ -615,19 +594,6 @@ public void shouldDelete() { testObserver.assertComplete(); verify(applicationService, times(2)).delete(anyString()); - verify(certificateService, times(1)).delete(CERTIFICATE_ID); - verify(identityProviderService, times(1)).delete(DOMAIN_ID, IDP_ID); - verify(extensionGrantService, times(1)).delete(DOMAIN_ID, EXTENSION_GRANT_ID); - verify(roleService, times(1)).delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), eq(ROLE_ID)); - verify(userService, times(1)).delete(USER_ID); - verify(scopeService, times(1)).delete(SCOPE_ID, true); - verify(groupService, times(1)).delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), eq(GROUP_ID)); - verify(formService, times(1)).delete(eq(DOMAIN_ID), eq(FORM_ID)); - verify(emailTemplateService, times(1)).delete(EMAIL_ID); - verify(reporterService, times(1)).delete(REPORTER_ID); - verify(flowService, times(1)).delete(FLOW_ID); - verify(membershipService, times(1)).delete(MEMBERSHIP_ID); - verify(factorService, times(1)).delete(DOMAIN_ID, FACTOR_ID); verify(eventService, times(1)).create(any()); } @@ -636,22 +602,24 @@ public void shouldDeleteWithoutRelatedData() { when(domainRepository.findById(DOMAIN_ID)).thenReturn(Maybe.just(domain)); when(domainRepository.delete(DOMAIN_ID)).thenReturn(Completable.complete()); when(applicationService.findByDomain(DOMAIN_ID)).thenReturn(Single.just(Collections.emptySet())); - when(certificateService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(identityProviderService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(extensionGrantService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(roleService.findByDomain(DOMAIN_ID)).thenReturn(Single.just(Collections.emptySet())); - when(userService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(scopeService.findByDomain(DOMAIN_ID, 0, Integer.MAX_VALUE)).thenReturn(Single.just(new Page<>(Collections.emptySet(),0,1))); - when(groupService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(formService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(emailTemplateService.findAll(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Flowable.empty()); - when(reporterService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(flowService.findAll(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Flowable.empty()); - when(membershipService.findByReference(DOMAIN_ID, ReferenceType.DOMAIN)).thenReturn(Flowable.empty()); - when(factorService.findByDomain(DOMAIN_ID)).thenReturn(Flowable.empty()); - when(resourceService.findByDomain(DOMAIN_ID)).thenReturn(Single.just(Collections.emptySet())); - when(alertTriggerService.findByDomainAndCriteria(DOMAIN_ID, new AlertTriggerCriteria())).thenReturn(Flowable.empty()); - when(alertNotifierService.findByDomainAndCriteria(DOMAIN_ID, new AlertNotifierCriteria())).thenReturn(Flowable.empty()); + when(certificateService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(identityProviderService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(extensionGrantService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(roleService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(userService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(scopeService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(groupService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(formService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(emailTemplateService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(reporterService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(flowService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(membershipService.deleteByReference(DOMAIN_ID, ReferenceType.DOMAIN)).thenReturn(Completable.complete()); + when(factorService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(resourceService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(alertTriggerService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(alertNotifierService.deleteByReference(ReferenceType.DOMAIN, DOMAIN_ID)).thenReturn(Completable.complete()); + when(botDetectionService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); + when(serviceResourceService.deleteByDomain(DOMAIN_ID)).thenReturn(Completable.complete()); when(eventService.create(any())).thenReturn(Single.just(new Event())); TestObserver testObserver = domainService.delete(DOMAIN_ID).test(); @@ -660,21 +628,6 @@ public void shouldDeleteWithoutRelatedData() { testObserver.assertComplete(); testObserver.assertNoErrors(); - verify(applicationService, never()).delete(anyString()); - verify(certificateService, never()).delete(anyString()); - verify(identityProviderService, never()).delete(anyString(), anyString()); - verify(extensionGrantService, never()).delete(anyString(), anyString()); - verify(roleService, never()).delete(eq(ReferenceType.DOMAIN), eq(DOMAIN_ID), anyString()); - verify(userService, never()).delete(anyString()); - verify(scopeService, never()).delete(anyString(), anyBoolean()); - verify(formService, never()).delete(anyString(), anyString()); - verify(emailTemplateService, never()).delete(anyString()); - verify(reporterService, never()).delete(anyString()); - verify(flowService, never()).delete(anyString()); - verify(membershipService, never()).delete(anyString()); - verify(factorService, never()).delete(anyString(), anyString()); - verify(alertTriggerService, never()).delete(any(ReferenceType.class), anyString(), anyString(), any(io.gravitee.am.identityprovider.api.User.class)); - verify(alertNotifierService, never()).delete(any(ReferenceType.class), anyString(), anyString(), any(io.gravitee.am.identityprovider.api.User.class)); verify(eventService, times(1)).create(any()); }