Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

Commit

Permalink
fix(management): remove group from plans and pages when deleted
Browse files Browse the repository at this point in the history
  • Loading branch information
phiz71 committed Jul 30, 2020
1 parent 79f32ef commit 6bb2a3e
Showing 1 changed file with 55 additions and 8 deletions.
Expand Up @@ -19,23 +19,19 @@
import io.gravitee.management.model.*;
import io.gravitee.management.model.Visibility;
import io.gravitee.management.model.api.ApiEntity;
import io.gravitee.management.model.documentation.PageQuery;
import io.gravitee.management.model.permissions.RolePermission;
import io.gravitee.management.model.permissions.SystemRole;
import io.gravitee.management.service.AuditService;
import io.gravitee.management.service.GroupService;
import io.gravitee.management.service.MembershipService;
import io.gravitee.management.service.PermissionService;
import io.gravitee.management.service.*;
import io.gravitee.management.service.exceptions.GroupNameAlreadyExistsException;
import io.gravitee.management.service.exceptions.GroupNotFoundException;
import io.gravitee.management.service.exceptions.GroupsNotFoundException;
import io.gravitee.management.service.exceptions.TechnicalManagementException;
import io.gravitee.repository.exceptions.TechnicalException;
import io.gravitee.repository.management.api.ApiRepository;
import io.gravitee.repository.management.api.ApplicationRepository;
import io.gravitee.repository.management.api.GroupRepository;
import io.gravitee.repository.management.api.MembershipRepository;
import io.gravitee.repository.management.api.*;
import io.gravitee.repository.management.api.search.ApiCriteria;
import io.gravitee.repository.management.api.search.ApiFieldExclusionFilter;
import io.gravitee.repository.management.api.search.PageCriteria;
import io.gravitee.repository.management.model.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -72,6 +68,10 @@ public class GroupServiceImpl extends AbstractService implements GroupService {
private AuditService auditService;
@Autowired
private PermissionService permissionService;
@Autowired
private PageRepository pageRepository;
@Autowired
private PlanRepository planRepository;

@Override
public List<GroupEntity> findAll() {
Expand Down Expand Up @@ -347,6 +347,13 @@ public void delete(String groupId) {
logger.error("An error occurs while trying to delete a group", ex);
throw new TechnicalManagementException("An error occurs while trying to delete a group", ex);
}

//remove from API plans
removeFromAPIPlans(groupId, updatedDate, api.getId());

//remove from API pages
removeGroupFromPages(groupId, updatedDate, api.getId());

});
applicationRepository.findByGroups(Collections.singletonList(groupId)).forEach( application -> {
application.getGroups().remove(groupId);
Expand All @@ -358,6 +365,10 @@ public void delete(String groupId) {
throw new TechnicalManagementException("An error occurs while trying to delete a group", ex);
}
});

//remove from portal pages
removeGroupFromPages(groupId, updatedDate, null);

//remove group
groupRepository.delete(groupId);

Expand All @@ -377,6 +388,42 @@ public void delete(String groupId) {

}

private void removeFromAPIPlans(String groupId, Date updatedDate, String apiId) {
try {
final Set<Plan> apiPlans = this.planRepository.findByApi(apiId);
for (Plan plan : apiPlans) {
if (plan.getExcludedGroups().contains(groupId)) {
plan.getExcludedGroups().remove(groupId);
plan.setUpdatedAt(updatedDate);
this.planRepository.update(plan);
}
}
} catch (TechnicalException ex) {
logger.error("An error occurs while trying to delete a group", ex);
throw new TechnicalManagementException("An error occurs while trying to delete a group", ex);
}
}

private void removeGroupFromPages(String groupId, Date updatedDate, String apiId) {
try {
PageCriteria.Builder criteriaBuilder = new PageCriteria.Builder();
if (apiId != null) {
criteriaBuilder.api(apiId);
}
final List<Page> apiPages = this.pageRepository.search(criteriaBuilder.build());
for (Page page : apiPages) {
if (page.getExcludedGroups().contains(groupId)) {
page.getExcludedGroups().remove(groupId);
page.setUpdatedAt(updatedDate);
this.pageRepository.update(page);
}
}
} catch (TechnicalException ex) {
logger.error("An error occurs while trying to delete a group", ex);
throw new TechnicalManagementException("An error occurs while trying to delete a group", ex);
}
}

@Override
public boolean isUserAuthorizedToAccessApiData(ApiEntity api, List<String> excludedGroups, String username) {
// in anonymous mode, only public API without restrictions are authorized
Expand Down

0 comments on commit 6bb2a3e

Please sign in to comment.