检索闪亮服务器配置的数据
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 进行身份验证;其他身份验证方法可能具有略有不同(或多或少)的字段。
在 /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 进行身份验证;其他身份验证方法可能具有略有不同(或多或少)的字段。