activatable built-in web server (by default false)
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Tue, 26 Apr 2016 09:38:50 +0000 (11:38 +0200)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Tue, 26 Apr 2016 09:38:50 +0000 (11:38 +0200)
platform/built-in-server/src/org/jetbrains/builtInWebServer/BuiltInWebBrowserUrlProvider.java
platform/built-in-server/src/org/jetbrains/builtInWebServer/BuiltInWebServer.kt
platform/util/resources/misc/registry.properties

index 1f5b2bffe4bf79acd30b9ad4c2024f7c75c0cb2e..97c561c0e0864dc8007b9861d16a98547df6b2e3 100644 (file)
@@ -18,6 +18,7 @@ package org.jetbrains.builtInWebServer;
 import com.intellij.ide.browsers.OpenInBrowserRequest;
 import com.intellij.ide.browsers.WebBrowserService;
 import com.intellij.ide.browsers.WebBrowserUrlProvider;
+import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.lang.Language;
 import com.intellij.openapi.project.DumbAware;
 import com.intellij.openapi.project.Project;
@@ -70,6 +71,10 @@ public class BuiltInWebBrowserUrlProvider extends WebBrowserUrlProvider implemen
       }
     }
 
+    if (BuiltInWebServerKt.isActivatable()) {
+      PropertiesComponent.getInstance().setValue("ide.built.in.web.server.active", true);
+    }
+
     return urls;
   }
 
index 39bd6c7dc740c5d039bb379643bfc7ddecbff760..7185f37c72bd759a45a84f821733f01aec6b7ccc 100644 (file)
@@ -18,6 +18,8 @@ package org.jetbrains.builtInWebServer
 import com.google.common.cache.CacheBuilder
 import com.google.common.net.InetAddresses
 import com.intellij.ide.impl.ProjectUtil
+import com.intellij.ide.util.PropertiesComponent
+import com.intellij.notification.NotificationType
 import com.intellij.openapi.application.ApplicationNamesInfo
 import com.intellij.openapi.application.PathManager
 import com.intellij.openapi.diagnostic.Logger
@@ -31,6 +33,7 @@ import com.intellij.openapi.util.SystemInfoRt
 import com.intellij.openapi.util.io.FileUtil
 import com.intellij.openapi.util.io.FileUtilRt
 import com.intellij.openapi.util.io.endsWithName
+import com.intellij.openapi.util.registry.Registry
 import com.intellij.openapi.util.text.StringUtil
 import com.intellij.openapi.vfs.VirtualFile
 import com.intellij.util.directoryStreamIfExists
@@ -43,8 +46,10 @@ import io.netty.handler.codec.http.*
 import io.netty.handler.codec.http.cookie.DefaultCookie
 import io.netty.handler.codec.http.cookie.ServerCookieDecoder
 import io.netty.handler.codec.http.cookie.ServerCookieEncoder
+import org.jetbrains.ide.BuiltInServerManagerImpl
 import org.jetbrains.ide.HttpRequestHandler
 import org.jetbrains.io.*
+import org.jetbrains.notification.SingletonNotificationManager
 import java.awt.datatransfer.StringSelection
 import java.io.File
 import java.io.IOException
@@ -59,6 +64,10 @@ internal val LOG = Logger.getInstance(BuiltInWebServer::class.java)
 // name is duplicated in the ConfigImportHelper
 private const val IDE_TOKEN_FILE = "user.web.token"
 
+private val notificationManager by lazy {
+  SingletonNotificationManager(BuiltInServerManagerImpl.NOTIFICATION_GROUP.getValue(), NotificationType.INFORMATION, null)
+}
+
 class BuiltInWebServer : HttpRequestHandler() {
   override fun isAccessible(request: HttpRequest) = request.isLocalOrigin(onlyAnyOrLoopback = false, hostsOnly = true)
 
@@ -94,6 +103,8 @@ class BuiltInWebServer : HttpRequestHandler() {
   }
 }
 
+internal fun isActivatable() = Registry.`is`("ide.built.in.web.server.activatable", false)
+
 internal const val TOKEN_PARAM_NAME = "__ij-st"
 
 private val STANDARD_COOKIE by lazy {
@@ -189,6 +200,11 @@ private fun doProcess(urlDecoder: QueryStringDecoder, request: FullHttpRequest,
     return false
   }) ?: candidateByDirectoryName ?: return false
 
+  if (isActivatable() && !PropertiesComponent.getInstance().getBoolean("ide.built.in.web.server.active")) {
+    notificationManager.notify("Built-in web server is deactivated, to activate, please use Open in Browser", null)
+    return false
+  }
+
   if (isEmptyPath) {
     // we must redirect "jsdebug" to "jsdebug/" as nginx does, otherwise browser will treat it as a file instead of a directory, so, relative path will not work
     redirectToDirectory(request, context.channel(), projectName, null)
index 424e502522f05ade420d0848b731abbf75456db1..e497dfe258bf8bf709092784ce5c3f2c13d05e60 100644 (file)
@@ -734,4 +734,5 @@ editor.rainbow.identifiers=false
 editor.rainbow.identifiers.description=Rainbow identifiers in editor
 
 ide.http.server.response.actual.status=false
-ide.rest.api.requests.per.minute=30
\ No newline at end of file
+ide.rest.api.requests.per.minute=30
+ide.built.in.web.server.activatable=false
\ No newline at end of file