From a1499f3fe33b0f6c1c96151ef4be3bb19c7a507b Mon Sep 17 00:00:00 2001 From: Nikita Iarychenko Date: Thu, 27 Feb 2025 19:03:31 +0400 Subject: [PATCH] OPENIDE #79 Reimplement the external link filtering mechanism from OpenIDE (cherry picked from commit 3f478908c068e5506ead6a71c0933d5696b4b4c0) (cherry picked from commit 9a3394e66a63170496bfd320723ed23bff9293fd) --- .idea/encodings.xml | 5 ++-- .../resources/META-INF/AnalysisImpl.xml | 2 ++ .../intellij/util/OpenIdePluginUtilImpl.kt | 20 ++++++++++++++ .../messages/OpenIdeBundle.properties | 4 +++ .../messages/OpenIdeBundle_ru_RU.properties | 2 ++ .../com/intellij/util/io/HttpRequests.java | 2 ++ .../src/ru/openide/io/OpenIdeBundle.kt | 19 +++++++++++++ .../openide/io/OpenIdePersistentUrlStorage.kt | 27 +++++++++++++++++++ .../src/ru/openide/io/OpenIdePluginUtil.kt | 16 +++++++++++ .../util => ru/openide}/io/WhiteListUrls.kt | 0 10 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 platform/ide-core-impl/src/com/intellij/util/OpenIdePluginUtilImpl.kt create mode 100644 platform/ide-core/resources/messages/OpenIdeBundle.properties create mode 100644 platform/ide-core/resources/messages/OpenIdeBundle_ru_RU.properties create mode 100644 platform/ide-core/src/ru/openide/io/OpenIdeBundle.kt create mode 100644 platform/ide-core/src/ru/openide/io/OpenIdePersistentUrlStorage.kt create mode 100644 platform/ide-core/src/ru/openide/io/OpenIdePluginUtil.kt rename platform/ide-core/src/{com/intellij/util => ru/openide}/io/WhiteListUrls.kt (100%) diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 0218f4cb8c83..c2bae49d78cd 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,7 +1,6 @@ - + - - + \ No newline at end of file diff --git a/platform/analysis-impl/resources/META-INF/AnalysisImpl.xml b/platform/analysis-impl/resources/META-INF/AnalysisImpl.xml index 60f3491f383a..d9fa1cd14f01 100644 --- a/platform/analysis-impl/resources/META-INF/AnalysisImpl.xml +++ b/platform/analysis-impl/resources/META-INF/AnalysisImpl.xml @@ -37,6 +37,8 @@ serviceImplementation="com.intellij.codeInsight.completion.BaseCompletionService"/> + diff --git a/platform/ide-core-impl/src/com/intellij/util/OpenIdePluginUtilImpl.kt b/platform/ide-core-impl/src/com/intellij/util/OpenIdePluginUtilImpl.kt new file mode 100644 index 000000000000..4c32ac1688c0 --- /dev/null +++ b/platform/ide-core-impl/src/com/intellij/util/OpenIdePluginUtilImpl.kt @@ -0,0 +1,20 @@ +// Copyright (c) Haulmont 2025. All Rights Reserved. +// Use is subject to license terms. +package com.intellij.util + +import com.intellij.ide.plugins.PluginManagerCore +import com.intellij.ide.plugins.PluginUtil +import com.intellij.openapi.extensions.PluginId +import ru.openide.io.OpenIdePluginUtil + +class OpenIdePluginUtilImpl : OpenIdePluginUtil { + override fun findNonBundledPluginId(t: Throwable): PluginId? { + val pluginId = PluginUtil.getInstance().findPluginId(t) ?: return null + val idString = pluginId.idString + if (idString == "ru.openide.docker" || idString == "com.haulmont.amplicode") return pluginId + + val pluginDescriptor = PluginManagerCore.getPlugin(pluginId) ?: return null + if (pluginDescriptor.isBundled) return null + return pluginId + } +} \ No newline at end of file diff --git a/platform/ide-core/resources/messages/OpenIdeBundle.properties b/platform/ide-core/resources/messages/OpenIdeBundle.properties new file mode 100644 index 000000000000..407ee845f5dc --- /dev/null +++ b/platform/ide-core/resources/messages/OpenIdeBundle.properties @@ -0,0 +1,4 @@ +# Copyright (c) Haulmont 2025. All Rights Reserved. +# Use is subject to license terms. +access.to.untrusted.source=Access to an untrusted source +allow.access=Allow access \ No newline at end of file diff --git a/platform/ide-core/resources/messages/OpenIdeBundle_ru_RU.properties b/platform/ide-core/resources/messages/OpenIdeBundle_ru_RU.properties new file mode 100644 index 000000000000..a0156964d643 --- /dev/null +++ b/platform/ide-core/resources/messages/OpenIdeBundle_ru_RU.properties @@ -0,0 +1,2 @@ +access.to.untrusted.source=Доступ к неразрешенному источнику +allow.access=Разрешить доступ \ No newline at end of file diff --git a/platform/ide-core/src/com/intellij/util/io/HttpRequests.java b/platform/ide-core/src/com/intellij/util/io/HttpRequests.java index ed95e9cf75d1..76e70fbaa1e0 100644 --- a/platform/ide-core/src/com/intellij/util/io/HttpRequests.java +++ b/platform/ide-core/src/com/intellij/util/io/HttpRequests.java @@ -21,6 +21,8 @@ import com.intellij.util.Url; import com.intellij.util.net.NetUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import ru.openide.io.StubUrlConnection; +import ru.openide.io.WhiteListUrls; import javax.net.ssl.*; import java.io.*; diff --git a/platform/ide-core/src/ru/openide/io/OpenIdeBundle.kt b/platform/ide-core/src/ru/openide/io/OpenIdeBundle.kt new file mode 100644 index 000000000000..a217a373553c --- /dev/null +++ b/platform/ide-core/src/ru/openide/io/OpenIdeBundle.kt @@ -0,0 +1,19 @@ +// Copyright (c) Haulmont 2025. All Rights Reserved. +// Use is subject to license terms. +package ru.openide.io + +import com.intellij.DynamicBundle +import org.jetbrains.annotations.Nls +import org.jetbrains.annotations.NonNls +import org.jetbrains.annotations.PropertyKey + +@NonNls +private const val BUNDLE = "messages.OpenIdeBundle" + +object OpenIdeBundle { + private val INSTANCE = DynamicBundle(OpenIdeBundle::class.java, BUNDLE) + + fun message(key: @PropertyKey(resourceBundle = BUNDLE) String, vararg params: Any): @Nls String { + return INSTANCE.getMessage(key, *params) + } +} \ No newline at end of file diff --git a/platform/ide-core/src/ru/openide/io/OpenIdePersistentUrlStorage.kt b/platform/ide-core/src/ru/openide/io/OpenIdePersistentUrlStorage.kt new file mode 100644 index 000000000000..b1fdab2923db --- /dev/null +++ b/platform/ide-core/src/ru/openide/io/OpenIdePersistentUrlStorage.kt @@ -0,0 +1,27 @@ +// Copyright (c) Haulmont 2025. All Rights Reserved. +// Use is subject to license terms. +package ru.openide.io + +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.components.* +import com.intellij.util.xmlb.annotations.CollectionBean + +@Service(Service.Level.APP) +@State(name = "OpenIdePersistentUrlStorage", storages = [Storage("openIdeUrlStorage.xml")]) +class OpenIdePersistentUrlStorage: SimplePersistentStateComponent(PersistentUrlStorageState()) { + + companion object { + fun getInstance(): OpenIdePersistentUrlStorage { + return ApplicationManager.getApplication().getService(OpenIdePersistentUrlStorage::class.java) + } + } + + fun getUrls(): MutableList { + return state.urls + } +} + +class PersistentUrlStorageState : BaseState() { + @get:CollectionBean + val urls: MutableList by list() +} \ No newline at end of file diff --git a/platform/ide-core/src/ru/openide/io/OpenIdePluginUtil.kt b/platform/ide-core/src/ru/openide/io/OpenIdePluginUtil.kt new file mode 100644 index 000000000000..f4fe5ba51aa3 --- /dev/null +++ b/platform/ide-core/src/ru/openide/io/OpenIdePluginUtil.kt @@ -0,0 +1,16 @@ +// Copyright (c) Haulmont 2025. All Rights Reserved. +// Use is subject to license terms. +package ru.openide.io + +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.extensions.PluginId + +interface OpenIdePluginUtil { + companion object { + fun getInstance(): OpenIdePluginUtil { + return ApplicationManager.getApplication().getService(OpenIdePluginUtil::class.java) + } + } + + fun findNonBundledPluginId(t: Throwable): PluginId? +} \ No newline at end of file diff --git a/platform/ide-core/src/com/intellij/util/io/WhiteListUrls.kt b/platform/ide-core/src/ru/openide/io/WhiteListUrls.kt similarity index 100% rename from platform/ide-core/src/com/intellij/util/io/WhiteListUrls.kt rename to platform/ide-core/src/ru/openide/io/WhiteListUrls.kt