WIP plugins: check plugins filter before installing a plugin

GitOrigin-RevId: 4a470b6fd9c27c3291888e47b638a8f0276c8fb8
This commit is contained in:
Eugene Petrenko
2021-07-13 17:53:10 +00:00
committed by intellij-monorepo-bot
parent 09b93ecbc9
commit e5d61af45c
5 changed files with 35 additions and 1 deletions
@@ -7,6 +7,7 @@ import com.intellij.ide.IdeBundle;
import com.intellij.ide.plugins.marketplace.MarketplaceRequests;
import com.intellij.ide.plugins.marketplace.statistics.PluginManagerUsageCollector;
import com.intellij.ide.plugins.marketplace.statistics.enums.InstallationSourceEnum;
import com.intellij.ide.plugins.org.PluginManagerConfigurableForOrg;
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationGroup;
import com.intellij.notification.NotificationType;
@@ -235,6 +236,10 @@ public final class PluginInstallOperation {
private boolean prepareToInstall(@NotNull PluginNode pluginNode,
@NotNull List<PluginId> pluginIds) throws IOException {
if (!checkMissingDependencies(pluginNode, pluginIds)) return false;
if (!PluginManagerConfigurableForOrg.getInstance().allowInstallingPlugin(pluginNode)) {
LOG.warn("The plugin " + pluginNode.getPluginId() + " is not allowed to install for the organization");
return false;
}
IdeaPluginDescriptor toDisable = checkDependenciesAndReplacements(pluginNode);
myShownErrors = false;
@@ -16,6 +16,10 @@ class PluginManagerConfigurableForOrg {
fun getInstance(): PluginManagerConfigurableForOrg = service()
}
fun allowInstallingPlugin(descriptor: IdeaPluginDescriptor) : Boolean {
return true
}
fun isPluginAllowed(isLocalPlugin: Boolean,
descriptor: IdeaPluginDescriptor) : Boolean {
@@ -7,6 +7,7 @@ import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.plugins.PluginNode;
import com.intellij.ide.plugins.RepositoryHelper;
import com.intellij.ide.plugins.marketplace.MarketplaceRequests;
import com.intellij.ide.plugins.org.PluginManagerConfigurableForOrg;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
@@ -47,8 +48,9 @@ final class InstallAndEnableTask extends Task.Modal {
List<IdeaPluginDescriptor> descriptors =
new ArrayList<>(RepositoryHelper.mergePluginsFromRepositories(marketplacePlugins, myCustomPlugins, true));
var org = PluginManagerConfigurableForOrg.getInstance();
for (IdeaPluginDescriptor descriptor : PluginManagerCore.getPlugins()) {
if (!descriptor.isEnabled() && PluginManagerCore.isCompatible(descriptor)) {
if (!descriptor.isEnabled() && PluginManagerCore.isCompatible(descriptor) && org.allowInstallingPlugin(descriptor)) {
descriptors.add(descriptor);
}
}
@@ -6,6 +6,7 @@ import com.intellij.ide.plugins.*
import com.intellij.ide.plugins.advertiser.PluginData
import com.intellij.ide.plugins.advertiser.PluginFeatureCacheService
import com.intellij.ide.plugins.marketplace.MarketplaceRequests
import com.intellij.ide.plugins.org.PluginManagerConfigurableForOrg
import com.intellij.ide.ui.PluginBooleanOptionDescriptor
import com.intellij.notification.NotificationAction
import com.intellij.notification.NotificationType
@@ -66,6 +67,8 @@ open class PluginAdvertiserService {
}
}
val org = PluginManagerConfigurableForOrg.getInstance()
//include disabled plugins
ids.filter { (pluginId, _) ->
PluginManagerCore.isDisabled(pluginId)
@@ -73,6 +76,8 @@ open class PluginAdvertiserService {
PluginManagerCore.getPlugin(pluginId)?.let {
plugin to it
}
}.filter {
org.allowInstallingPlugin(it.second)
}.forEach { (plugin, pluginDescriptor) ->
disabledPlugins[plugin] = pluginDescriptor
}
@@ -95,6 +100,8 @@ open class PluginAdvertiserService {
|| !ids.containsKey(pluginId)
|| PluginManagerCore.isDisabled(pluginId)
|| PluginManagerCore.isBrokenPlugin(loadedPlugin)
}.filter {
org.allowInstallingPlugin(it)
}.map { PluginDownloader.createDownloader(it) }
invokeLater(ModalityState.NON_MODAL) {
@@ -3,11 +3,13 @@ package com.intellij.openapi.updateSettings.impl.pluginsAdvertisement;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.plugins.*;
import com.intellij.ide.plugins.org.PluginManagerConfigurableForOrg;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.updateSettings.impl.DetectedPluginsPanel;
import com.intellij.openapi.updateSettings.impl.PluginDownloader;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -16,6 +18,7 @@ import java.io.IOException;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @author anna
@@ -91,6 +94,19 @@ public final class PluginsAdvertiserDialog extends DialogWrapper {
return false;
}
var org = PluginManagerConfigurableForOrg.getInstance();
var notAllowedToInstallPlugins = nodes
.stream()
.filter(descriptor -> !org.allowInstallingPlugin(descriptor))
.map(e -> e.getPluginId().getIdString())
.collect(Collectors.toCollection(TreeSet<String>::new));
if (!notAllowedToInstallPlugins.isEmpty()) {
LOG.warn("Some advertised plugins were not allowed to install for " +
"the organization: " + StringUtil.join(notAllowedToInstallPlugins, ", "));
return false;
}
PluginManagerMain.suggestToEnableInstalledDependantPlugins(PluginEnabler.HEADLESS, nodes);
Runnable notifyRunnable = () -> {