Rework false-defaulting 'suppressServer' to true-defaulting 'autoStartServer'.

This commit is contained in:
Steve Waldman 2018-02-06 11:49:46 -08:00
parent 9601668199
commit 96b9429669
7 changed files with 44 additions and 36 deletions

View File

@ -39,10 +39,10 @@ object BasicKeys {
"The wire protocol for the server command.",
10000)
val suppressServer =
val autoStartServer =
AttributeKey[Boolean](
"suppressServer",
"Running the server will be suppressed if 'suppressServer is explicitly set to true.",
"autoStartServer",
"If true, the sbt server will startup automatically during interactive sessions.",
10000)
// Unlike other BasicKeys, this is not used directly as a setting key,

View File

@ -268,7 +268,7 @@ object Defaults extends BuildCommon {
.getOrElse(GCUtil.defaultForceGarbageCollection),
minForcegcInterval :== GCUtil.defaultMinForcegcInterval,
interactionService :== CommandLineUIService,
suppressServer := false,
autoStartServer := true,
serverHost := "127.0.0.1",
serverPort := 5000 + (Hash
.toHex(Hash(appConfiguration.value.baseDirectory.toString))

View File

@ -131,7 +131,7 @@ object Keys {
// Command keys
val historyPath = SettingKey(BasicKeys.historyPath)
val shellPrompt = SettingKey(BasicKeys.shellPrompt)
val suppressServer = SettingKey(BasicKeys.suppressServer)
val autoStartServer = SettingKey(BasicKeys.autoStartServer)
val serverPort = SettingKey(BasicKeys.serverPort)
val serverHost = SettingKey(BasicKeys.serverHost)
val serverAuthentication = SettingKey(BasicKeys.serverAuthentication)

View File

@ -21,7 +21,7 @@ import Keys.{
sessionSettings,
shellPrompt,
templateResolverInfos,
suppressServer,
autoStartServer,
serverHost,
serverLog,
serverPort,
@ -463,7 +463,7 @@ object Project extends ProjectExtra {
val prompt = get(shellPrompt)
val trs = (templateResolverInfos in Global get structure.data).toList.flatten
val watched = get(watch)
val suppressSvr: Option[Boolean] = get(suppressServer)
val startSvr: Option[Boolean] = get(autoStartServer)
val host: Option[String] = get(serverHost)
val port: Option[Int] = get(serverPort)
val authentication: Option[Set[ServerAuthentication]] = get(serverAuthentication)
@ -476,7 +476,7 @@ object Project extends ProjectExtra {
s.attributes
.setCond(Watched.Configuration, watched)
.put(historyPath.key, history)
.setCond(suppressServer.key, suppressSvr)
.setCond(autoStartServer.key, startSvr)
.setCond(serverPort.key, port)
.setCond(serverHost.key, host)
.setCond(serverAuthentication.key, authentication)

View File

@ -14,7 +14,7 @@ import java.util.concurrent.atomic._
import scala.collection.mutable.ListBuffer
import scala.annotation.tailrec
import BasicKeys.{
suppressServer,
autoStartServer,
serverHost,
serverPort,
serverAuthentication,
@ -44,7 +44,7 @@ import sbt.util.{ Level, Logger, LogExchange }
* this exchange, which could serve command request from either of the channel.
*/
private[sbt] final class CommandExchange {
private val autoStartServer = sys.props.get("sbt.server.autostart") map {
private val autoStartServerSysProp = sys.props.get("sbt.server.autostart") map {
_.toLowerCase == "true"
} getOrElse true
private val lock = new AnyRef {}
@ -88,11 +88,11 @@ private[sbt] final class CommandExchange {
consoleChannel = Some(x)
subscribe(x)
}
val suppress = (s get suppressServer) match {
val autoStartServerAttr = (s get autoStartServer) match {
case Some(bool) => bool
case None => false
case None => true
}
if (autoStartServer && !suppress) runServer(s)
if (autoStartServerSysProp && autoStartServerAttr) runServer(s)
else s
}

View File

@ -0,0 +1,31 @@
### Improvements
This pull request implements a Boolean setting called `autoStartServer`, whose default value is `true'.
If a build or plugin explicitly sets it to `false`, the sbt-1.x server will not start up
(exactly as if the system property `sbt.server.autostart` were set to `false`).
Users who set `autoStartServer` to `false` may manually execute `startServer` at the interactive prompt,
if they wish to use the server during a shell session.
### Motivation
Projects often encounter private information, such as deployment credentials, private keys, etc.
For such projects, it may be preferable to reduce the potential attack surface than to enjoy the
interoperability offered by sbt's server. Projects that wish to make this tradeoff can set `autoStartServer`
to `false` in their build. Security-sensitive plugins can disable `autoStartServer` as well, modifying the
default behavior in favor of security.
(My own motivation is that I am working on a [plugin for developing Ethereum applications](https://github.com/swaldman/sbt-ethereum)
with scala and sbt. It must work with extremely sensitive private keys.)
---
See also a [recent conversation on Stack Exchange](https://stackoverflow.com/questions/48591179/can-one-disable-the-sbt-1-x-server/48593906#48593906).
---
##### History
2018-02-06 Modified from negative `suppressServer` to positive `autoStartServer` at the (sensible) request of @eed3si9n

View File

@ -1,23 +0,0 @@
### Improvements
This pull request implements a Boolean setting called `suppressServer`, whose default value is `false'.
If a build or plugin explicitly sets it to `true`, the sbt-1.x server will not start up
(exactly as if `sbt.server.autostart` were set to start).
Users may manually override this setting by running the `startServer` command at the interactive prompt.
### Motivation
Projects often encounter private information, such as deployment credentials, private keys, etc.
For such projects, it may be preferable to reduce the potential attack surface than to enjoy the
interoperability offered by sbt's server. Projects that wish to make this tradeoff can set `suppressServer`
to `true` in their build. Security-sensitive plugins can define this setting as well, modifying the
default behavior in favor of security.
(My own motivation is that I am working on a [plugin for developing Ethereum applications](https://github.com/swaldman/sbt-ethereum)
with scala and sbt. It must work with extremely sensitive private keys.)
---
See also a [recent conversation on Stack Exchange](https://stackoverflow.com/questions/48591179/can-one-disable-the-sbt-1-x-server/48593906#48593906).