123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- package org.pf4j;
-
- import java.nio.file.Path;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- import java.util.Set;
- import java.util.stream.Collectors;
-
- /**
- * Use this class to wrap the original plugin manager to prevent full access from within plugins.
- * Override AbstractPluginManager.createPluginWrapper to use this class.
- * @deprecated Use application custom {@code PluginContext} instead of {@code PluginWrapper} to communicate with {@link Plugin}.
- * See demo for more details.
- *
- * @author Wolfram Haussig
- */
- @Deprecated()
- public class SecurePluginManagerWrapper implements PluginManager {
-
- private static final String PLUGIN_PREFIX = "Plugin ";
- /**
- * the current plugin
- */
- private String currentPluginId;
- /**
- * the original plugin manager
- */
- private PluginManager original;
-
- /**
- * The registered {@link PluginStateListener}s.
- */
- protected List<PluginStateListener> pluginStateListeners = new ArrayList<>();
- /**
- * wrapper for pluginStateListeners
- */
- private PluginStateListenerWrapper listenerWrapper = new PluginStateListenerWrapper();
-
- /**
- * constructor
- * @param original the original plugin manager
- * @param currentPluginId the current pluginId
- */
- public SecurePluginManagerWrapper(PluginManager original, String currentPluginId) {
- this.original = original;
- this.currentPluginId = currentPluginId;
- }
-
- @Override
- public boolean isDevelopment() {
- return original.isDevelopment();
- }
-
- @Override
- public boolean isNotDevelopment() {
- return original.isNotDevelopment();
- }
-
- @Override
- public List<PluginWrapper> getPlugins() {
- return Arrays.asList(getPlugin(currentPluginId));
- }
-
- @Override
- public List<PluginWrapper> getPlugins(PluginState pluginState) {
- return getPlugins().stream().filter(p -> p.getPluginState() == pluginState).collect(Collectors.toList());
- }
-
- @Override
- public List<PluginWrapper> getResolvedPlugins() {
- return getPlugins().stream().filter(p -> p.getPluginState().ordinal() >= PluginState.RESOLVED.ordinal()).collect(Collectors.toList());
- }
-
- @Override
- public List<PluginWrapper> getUnresolvedPlugins() {
- return Collections.emptyList();
- }
-
- @Override
- public List<PluginWrapper> getStartedPlugins() {
- return getPlugins(PluginState.STARTED);
- }
-
- @Override
- public PluginWrapper getPlugin(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getPlugin(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPlugin for foreign pluginId!");
- }
- }
-
- @Override
- public void loadPlugins() {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute loadPlugins!");
- }
-
- @Override
- public String loadPlugin(Path pluginPath) {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute loadPlugin!");
- }
-
- @Override
- public void startPlugins() {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute startPlugins!");
- }
-
- @Override
- public PluginState startPlugin(String pluginId) {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute startPlugin!");
- }
-
- @Override
- public void stopPlugins() {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute stopPlugins!");
- }
-
- @Override
- public PluginState stopPlugin(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.stopPlugin(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute stopPlugin for foreign pluginId!");
- }
- }
-
- @Override
- public void unloadPlugins() {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute unloadPlugins!");
- }
-
- @Override
- public boolean unloadPlugin(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.unloadPlugin(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute unloadPlugin for foreign pluginId!");
- }
- }
-
- @Override
- public boolean disablePlugin(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.disablePlugin(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute disablePlugin for foreign pluginId!");
- }
- }
-
- @Override
- public boolean enablePlugin(String pluginId) {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute enablePlugin!");
- }
-
- @Override
- public boolean deletePlugin(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.deletePlugin(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute deletePlugin for foreign pluginId!");
- }
- }
-
- @Override
- public ClassLoader getPluginClassLoader(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getPluginClassLoader(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPluginClassLoader for foreign pluginId!");
- }
- }
-
- @Override
- public List<Class<?>> getExtensionClasses(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getExtensionClasses(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensionClasses for foreign pluginId!");
- }
- }
-
- @Override
- public <T> List<Class<? extends T>> getExtensionClasses(Class<T> type) {
- return getExtensionClasses(type, currentPluginId);
- }
-
- @Override
- public <T> List<Class<? extends T>> getExtensionClasses(Class<T> type, String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getExtensionClasses(type, pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensionClasses for foreign pluginId!");
- }
- }
-
- @Override
- public <T> List<T> getExtensions(Class<T> type) {
- return getExtensions(type, currentPluginId);
- }
-
- @Override
- public <T> List<T> getExtensions(Class<T> type, String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getExtensions(type, pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensions for foreign pluginId!");
- }
- }
-
- @Override
- public List<?> getExtensions(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getExtensions(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensions for foreign pluginId!");
- }
- }
-
- @Override
- public Set<String> getExtensionClassNames(String pluginId) {
- if (currentPluginId.equals(pluginId)) {
- return original.getExtensionClassNames(pluginId);
- } else {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensionClassNames for foreign pluginId!");
- }
- }
-
- @Override
- public ExtensionFactory getExtensionFactory() {
- return original.getExtensionFactory();
- }
-
- @Override
- public RuntimeMode getRuntimeMode() {
- return original.getRuntimeMode();
- }
-
- @Override
- public PluginWrapper whichPlugin(Class<?> clazz) {
- ClassLoader classLoader = clazz.getClassLoader();
- PluginWrapper plugin = getPlugin(currentPluginId);
- if (plugin.getPluginClassLoader() == classLoader) {
- return plugin;
- }
- return null;
- }
-
- @Override
- public void addPluginStateListener(PluginStateListener listener) {
- if (pluginStateListeners.isEmpty()) {
- this.original.addPluginStateListener(listenerWrapper);
- }
- pluginStateListeners.add(listener);
- }
-
- @Override
- public void removePluginStateListener(PluginStateListener listener) {
- pluginStateListeners.remove(listener);
- if (pluginStateListeners.isEmpty()) {
- this.original.removePluginStateListener(listenerWrapper);
- }
- }
-
- @Override
- public void setSystemVersion(String version) {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute setSystemVersion!");
- }
-
- @Override
- public String getSystemVersion() {
- return original.getSystemVersion();
- }
-
- @Override
- public Path getPluginsRoot() {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPluginsRoot!");
- }
-
- @Override
- public List<Path> getPluginsRoots() {
- throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPluginsRoots!");
- }
-
- @Override
- public VersionManager getVersionManager() {
- return original.getVersionManager();
- }
-
- /**
- * Wrapper for PluginStateListener events. will only propagate events if they match the current pluginId
- * @author Wolfram Haussig
- *
- */
- private class PluginStateListenerWrapper implements PluginStateListener {
-
- @Override
- public void pluginStateChanged(PluginStateEvent event) {
- if (event.getPlugin().getPluginId().equals(currentPluginId)) {
- for (PluginStateListener listener : pluginStateListeners) {
- listener.pluginStateChanged(event);
- }
- }
- }
-
- }
- }
|