public void cleanUpPermissions()

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);
        });
    }