Merge pull request #607 from corda/rog-webserver-index-plugin-tweak

Filter out the default node plugins as per request from Chris.
This commit is contained in:
Roger Willis 2017-04-28 14:54:52 +01:00 committed by GitHub
commit 9dde0db407
2 changed files with 36 additions and 28 deletions

View File

@ -24,10 +24,8 @@ import org.slf4j.LoggerFactory
import java.io.IOException import java.io.IOException
import java.io.Writer import java.io.Writer
import java.lang.reflect.InvocationTargetException import java.lang.reflect.InvocationTargetException
import java.util.ServiceLoader import java.util.*
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.ws.rs.core.MediaType import javax.ws.rs.core.MediaType
class NodeWebServer(val config: WebServerConfig) { class NodeWebServer(val config: WebServerConfig) {
@ -160,7 +158,13 @@ class NodeWebServer(val config: WebServerConfig) {
resourceConfig.addProperties(mapOf(ServerProperties.APPLICATION_NAME to "node.api", resourceConfig.addProperties(mapOf(ServerProperties.APPLICATION_NAME to "node.api",
ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED to "true")) ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED to "true"))
val infoServlet = ServletHolder(CorDappInfoServlet(pluginRegistries, localRpc)) val filteredPlugins = pluginRegistries.filterNot {
it.javaClass.name.startsWith("net.corda.node.") ||
it.javaClass.name.startsWith("net.corda.core.") ||
it.javaClass.name.startsWith("net.corda.nodeapi.")
}
val infoServlet = ServletHolder(CorDappInfoServlet(filteredPlugins, localRpc))
addServlet(infoServlet, "") addServlet(infoServlet, "")
val container = ServletContainer(resourceConfig) val container = ServletContainer(resourceConfig)

View File

@ -23,36 +23,40 @@ class CorDappInfoServlet(val plugins: List<CordaPluginRegistry>, val rpc: CordaR
} }
body { body {
h2 { +"Installed CorDapps" } h2 { +"Installed CorDapps" }
plugins.forEach { plugin -> if (plugins.isEmpty()) {
h3 { +plugin::class.java.name } p { +"No installed custom CorDapps." }
if (plugin.requiredFlows.isNotEmpty()) { } else {
div { plugins.forEach { plugin ->
p { +"Whitelisted flows:" } h3 { +plugin::class.java.name }
ul { if (plugin.requiredFlows.isNotEmpty()) {
plugin.requiredFlows.map { it.key }.forEach { li { +it } } div {
p { +"Whitelisted flows:" }
ul {
plugin.requiredFlows.map { it.key }.forEach { li { +it } }
}
} }
} }
} if (plugin.webApis.isNotEmpty()) {
if (plugin.webApis.isNotEmpty()) { div {
div { plugin.webApis.forEach { api ->
plugin.webApis.forEach { api -> val resource = Resource.from(api.apply(rpc)::class.java)
val resource = Resource.from(api.apply(rpc)::class.java) p { +"${resource.name}:" }
p { +"${resource.name}:" } val endpoints = processEndpoints("", resource, mutableListOf<Endpoint>())
val endpoints = processEndpoints("", resource, mutableListOf<Endpoint>()) ul {
ul { endpoints.forEach {
endpoints.forEach { li { a(it.uri) { +"${it.method}\t${it.text}" } }
li { a(it.uri) { +"${it.method}\t${it.text}" } } }
} }
} }
} }
} }
} if (plugin.staticServeDirs.isNotEmpty()) {
if (plugin.staticServeDirs.isNotEmpty()) { div {
div { p { +"Static web content:" }
p { +"Static web content:" } ul {
ul { plugin.staticServeDirs.map { it.key }.forEach {
plugin.staticServeDirs.map { it.key }.forEach { li { a("web/$it") { +it } }
li { a("web/$it") { +it } } }
} }
} }
} }