in server/src/main/java/com/epam/aidial/core/server/service/InvitationService.java [135:172]
public void cleanUpPermissions(
String bucket, String location, Map<ResourceDescriptor, Set<ResourceAccessType>> permissionsToCleanUp) {
ResourceDescriptor resource = ResourceDescriptorFactory.fromDecoded(ResourceTypes.INVITATION, bucket, location, INVITATION_RESOURCE_FILENAME);
resourceService.computeResource(resource, state -> {
InvitationsMap invitations = ProxyUtil.convertToObject(state, InvitationsMap.class);
if (invitations == null) {
return null;
}
Map<String, Invitation> invitationMap = invitations.getInvitations();
List<String> invitationsToRemove = new ArrayList<>();
Map<String, Set<ResourceAccessType>> linkToPermissions = permissionsToCleanUp.keySet().stream()
.collect(Collectors.toUnmodifiableMap(ResourceDescriptor::getUrl, permissionsToCleanUp::get));
for (Invitation invitation : invitationMap.values()) {
List<SharedResource> updatedResources = new ArrayList<>();
for (SharedResource sharedResource : invitation.getResources()) {
Set<ResourceAccessType> permissions = linkToPermissions.get(sharedResource.url());
if (permissions == null) {
updatedResources.add(sharedResource);
} else {
sharedResource.permissions().removeAll(permissions);
if (!sharedResource.permissions().isEmpty()) {
updatedResources.add(sharedResource);
}
}
}
if (updatedResources.isEmpty()) {
invitationsToRemove.add(invitation.getId());
} else {
invitation.setResources(updatedResources);
}
}
invitationsToRemove.forEach(invitationMap::remove);
return ProxyUtil.convertToString(invitations);
});
}