检索闪亮服务器配置的数据

Retrieving data for shiny-server config

/etc/shiny-server/shiny-server.conf 我有一个 SSL configuration 看起来像:

server {
  # ...
  ssl /etc/path/to/ssl-key.pem /etc/path/to/ssl.cert;
  # ...
}

现在,从 Shiny Server 所在的服务器上的 R REPL 运行,我很好奇是否有办法 检索 配置数据=14=] 通过任何形式的(半)官方 API.

类似于:

# server.R
library(shiny)
shinyServer(function(input, output, session){
   # ... ?
})

这将产生一些有效的东西:

"ssl": ["/etc/path/to/ssl-key.pem", "/etc/path/to/ssl.cert"]

老实说,我认为您无法访问它,因为允许应用程序(因此 "regular users")查看配置项可能存在安全风险。 (例如,它可能包括 SAML/LDAP/... 配置的秘密。)

现在我不知道这个答案是否会解决那个问题,它可能会让你找到你需要的东西。

注意:我有意过滤掉 session 中的几种类型的对象,因为我发现它们要么崩溃(它们是复杂的复合对象,也许谁知道它们里面有什么)要么它们显然只是无关紧要的。如果您想更清楚地了解被过滤掉的内部结构,可以 saveRDS 将其保存到文件中并从服务器检索它。

library(shiny)

ui <- bootstrapPage(
  h3("Parsed query string"),
  verbatimTextOutput("queryText"),
  h3("URL components"),
  verbatimTextOutput("sessionText"),
  h3("EnvVars"),
  verbatimTextOutput("envvarText")
)

server <- function(input, output, session) {
  # Parse the GET query string
  output$queryText <- renderText({
    query <- parseQueryString(session$clientData$url_search)
    # Return a string with key-value pairs
    paste(names(query), query, sep = "=", collapse=", ")
  })
  # Return the components of the URL in a string:
  output$sessionText <- renderText({
    cls <- sapply(session, function(a) class(a)[1])
    nms <- names(cls[ cls %in% c("list", "character", "numeric", "integer", "NULL", "logical", "environment") ])
    nms <- setdiff(nms, ".__enclos_env__")
    paste(
      capture.output(
        str(
          sapply(nms,
                 function(sessnm) {
                   if (inherits(session[[sessnm]], c("environment", "reactivevalues"))) {
                     sapply(names(session[[sessnm]]), function(nm) session[[sessnm]][[nm]], simplify = FALSE)
                   } else if (inherits(session[[sessnm]], c("character", "numeric", "integer"))) {
                     session[[sessnm]]
                   } else class(session[[sessnm]])
                 }, simplify = FALSE),
          nchar.max = 1e5,
          vec.len = 1e5
        )
      ),
      collapse = "\n"
    )
  })
  # Dump the environment variables
  output$envvarText <- renderText({
    paste(
      capture.output(
        str(as.list(Sys.getenv()))
      ),
      collapse = "\n"
    )
  })
}

shinyApp(ui, server)

这会呈现类似这样的内容(屏蔽了一些隐私,并且总体上是模糊的,因为您的结果可能会因您的特定服务器而异。

这是在 Ubuntu 16.04 上托管的 RStudio Connect v1.8.2 上。通过 SAML 进行身份验证;其他身份验证方法可能具有略有不同(或多或少)的字段。