【发布时间】:2019-08-20 15:39:22
【问题描述】:
我正在尝试构建我的第一个 Shiny 应用程序。
我有一个用户定义的函数,它需要生成加密密钥。我想把它做成一个闪亮的应用程序。
我尝试了如下。 UI 的第一部分的工作原理是它要求输入用户名的文本(这应该用于标记输出文件) - 我设法得到一个操作按钮,然后用户可以单击该按钮理论上运行代码制作加密密钥。
library(shiny)
# Define UI for ODK Encryption app ----
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Make ODK Encryption Keys"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
textInput("name",
"Enter your name:"),
actionButton(inputId = "input_action", label = "Generate Keys")
),
mainPanel(
)
)
)
我觉得 mainPanel 中应该有一些东西可以为输出的密钥文件提供链接,或者它们可以自动下载?
然后在服务器部分 I 1) 以 sys-date-time 作为种子 2)取名称(如上面输入的)并将其链接到 sys-date 为最终键创建文件名 3)然后我定义我的功能(create.key.pair) - 这需要 sys-date-time(在上面的 1 中设置)并使用它和 openSSL 来生成公钥和私钥。它使用在第 2 点中输入的名称标记这些文件(应该从闪亮的应用程序的 UI 的侧边栏部分获取输入)
#Make the Key
server <- function(input, output) {
observeEvent(input$button, {
key_seed <- round(as.numeric(Sys.time()),0)
key_name <- paste(name,Sys.Date(),sep="_")
create.key.pair<-function(keynumber)
{
folder<-paste("ODK.KEY",key_name,sep=".") #make a folder name
system(paste("mkdir",folder,sep=" ")) #create the folder
name.private.key<-paste("ODK.PRIVATE.KEY.",key_name,".pem",sep = "") #make a name for the keys
name.public.key<-paste("ODK.PUBLIC.KEY.",key_name,".pem",sep = "")
keygen.private<-paste("openssl genrsa -out ",folder,"/",name.private.key," 2048",sep="") #create the system call
system(command = keygen.private) #create the private key
keygen.public<-paste("openssl rsa -in ",folder,"/",name.private.key," -inform PEM -out ",folder,"/",name.public.key," -outform PEM -pubout",sep="")
system(command = keygen.public) #create the private key
}
create.key.pair(key_seed)
})
}
shinyApp(ui, server)
我需要一些关于是否 A)我需要在 mainPanel 中添加一些东西来显示/下载输出的文件 B)服务器部分中的代码应该可以工作
我目前无法判断我的错误是在 A 还是 B 中,只是它没有生成密钥(而我的 R 脚本版本可以正常工作)
第一次使用 Shiny,所以任何帮助都非常感激。
【问题讨论】:
-
在您的代码中调用服务器站点上的输入存在一些问题:input$input_action 而不是 input$button 和 input$name 而不是 name。先改这个,然后就可以开始调试剩下的了
-
该功能也无法正常工作。
key_name未指定为参数