From bf50f33250b8a9e6f5f21df897ce7e5cfa79afc5 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) (cherry picked from commit a1499f3fe33b0f6c1c96151ef4be3bb19c7a507b) (cherry picked from commit a16d707a0e430bb0dd855d75b2e5fdd44b1a6eaa) (cherry picked from commit 261c25ad706457b648c70ded46c7b731c1c354e6) --- .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 44e872225a30..3b3f8baf4428 100644 --- a/platform/analysis-impl/resources/META-INF/AnalysisImpl.xml +++ b/platform/analysis-impl/resources/META-INF/AnalysisImpl.xml @@ -65,6 +65,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 178152c292d2..6ece8b875868 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.net.NetUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import ru.openide.io.StubUrlConnection; +import ru.openide.io.WhiteListUrls; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; 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