Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion server/src/main/java/org/eclipse/openvsx/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.eclipse.openvsx.storage.StorageUtilService;
import org.eclipse.openvsx.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.security.core.context.SecurityContextHolder;
Expand All @@ -55,13 +56,15 @@ public class UserService {
private final RepositoryService repositories;
private final StorageUtilService storageUtil;
private final CacheService cache;
private final ApplicationEventPublisher eventPublisher;
private final ExtensionValidator validator;
private final ClientRegistrationRepository clientRegistrationRepository;
private final OAuth2AttributesConfig attributesConfig;

@Value("${ovsx.token-prefix:}")
String tokenPrefix;


@Autowired
public UserService(
EntityManager entityManager,
RepositoryService repositories,
Expand All @@ -78,6 +81,7 @@ public UserService(
this.validator = validator;
this.clientRegistrationRepository = clientRegistrationRepository;
this.attributesConfig = attributesConfig;
this.eventPublisher = eventPublisher;
}

public UserData findLoggedInUser() {
Expand Down Expand Up @@ -144,6 +148,7 @@ public ResultJson removeNamespaceMember(Namespace namespace, UserData user) thro
throw new ErrorResultException("User " + user.getLoginName() + " is not a member of " + namespace.getName() + ".");
}
entityManager.remove(membership);
eventPublisher.publishEvent(new org.eclipse.openvsx.events.NamespaceMembershipChangedEvent(this, namespace));
return ResultJson.success("Removed " + user.getLoginName() + " from namespace " + namespace.getName() + ".");
}

Expand All @@ -159,13 +164,15 @@ public ResultJson addNamespaceMember(Namespace namespace, UserData user, String
throw new ErrorResultException("User " + user.getLoginName() + " already has the role " + role + ".");
}
membership.setRole(role);
eventPublisher.publishEvent(new org.eclipse.openvsx.events.NamespaceMembershipChangedEvent(this, namespace));
return ResultJson.success("Changed role of " + user.getLoginName() + " in " + namespace.getName() + " to " + role + ".");
}
membership = new NamespaceMembership();
membership.setNamespace(namespace);
membership.setUser(user);
membership.setRole(role);
entityManager.persist(membership);
eventPublisher.publishEvent(new org.eclipse.openvsx.events.NamespaceMembershipChangedEvent(this, namespace));
return ResultJson.success("Added " + user.getLoginName() + " as " + role + " of " + namespace.getName() + ".");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.eclipse.openvsx.events;

import org.eclipse.openvsx.cache.CacheService;
import org.eclipse.openvsx.entities.Namespace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
import org.springframework.transaction.event.TransactionPhase;

@Component
public class NamespaceMembershipChangedListener {
private final CacheService cacheService;

@Autowired
public NamespaceMembershipChangedListener(CacheService cacheService) {
this.cacheService = cacheService;
}

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void onNamespaceMembershipChanged(NamespaceMembershipChangedEvent event) {
Namespace namespace = event.getNamespace();
cacheService.evictNamespaceDetails(namespace);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.eclipse.openvsx.events;

import org.eclipse.openvsx.entities.Namespace;
import org.springframework.context.ApplicationEvent;

public class NamespaceMembershipChangedEvent extends ApplicationEvent {
private final Namespace namespace;

public NamespaceMembershipChangedEvent(Object source, Namespace namespace) {
super(source);
this.namespace = namespace;
}

public Namespace getNamespace() {
return namespace;
}
}