Способ безопасно дать пароль R приложения из терминала?

r input passwords password-protection

5646 просмотра

5 ответа

Есть ли в R функция, позволяющая пользователю безопасно вводить пароль, например, getpassмодуль Python ?

(см. http://docs.python.org/library/getpass.html для примера того, что я имею в виду)

Автор: HamiltonUlmer Источник Размещён: 12.11.2019 09:40

Ответы (5)


27 плюса

Проблема в том, что R не имеет функций для управления терминалом, в котором он работает (что-то вроде Rncurses); Вероятно, это связано с проблемами переносимости.
Некоторое время назад я боролся с той же проблемой, и в результате я получил функцию, использующую TclTk:

getPass<-function(){  
  require(tcltk);  
  wnd<-tktoplevel();tclVar("")->passVar;  
  #Label  
  tkgrid(tklabel(wnd,text="Enter password:"));  
  #Password box  
  tkgrid(tkentry(wnd,textvariable=passVar,show="*")->passBox);  
  #Hitting return will also submit password  
  tkbind(passBox,"<Return>",function() tkdestroy(wnd));  
  #OK button  
  tkgrid(tkbutton(wnd,text="OK",command=function() tkdestroy(wnd)));  
  #Wait for user to click OK  
  tkwait.window(wnd);  
  password<-tclvalue(passVar);  
  return(password);  
}  

Конечно, это не будет работать в средах без GUI.

Автор: mbq Размещён: 23.06.2010 06:14

5 плюса

Очень простая концепция Linux для терминального безопасного пароля:

   password <- function(prompt = "Password:"){
      cat(prompt)
      pass <- system('stty -echo && read ff && stty echo && echo $ff && ff=""',
                        intern=TRUE)
      cat('\n')
      invisible(pass)
   }        
Автор: seventm Размещён: 20.07.2014 11:16

3 плюса

Мой пакет keyringr решает эту проблему путем извлечения паролей из базового набора ключей операционной системы (DPAPI в Windows, Keychain в OSX и Gnome Keyring в Linux).

Виньетка дает подробное объяснение о том , как использовать этот пакет, но если вы используете OSX и есть пароль , сохраненный в Keychain, вы можете использовать следующую команду , чтобы вернуть пароль к R (где mydb_myuser это имя элемент брелок):

install.packages("keyringr")
library("keyringr")
mypwd <- decrypt_kc_pw("mydb_myuser")
print(mypwd)
Автор: Josh Gilfillan Размещён: 03.01.2017 01:37

3 плюса

Согласно m-dz в комментариях выше, теперь есть пакет для этого, называемый getPass , который имеет одну функцию getPass(). Это замена для base::readline().

введите описание изображения здесь

Автор: Deleet Размещён: 14.12.2017 09:13

0 плюса

Вот всплывающее окно входа в систему, основанное на ? ModalDialog .

library("shiny")

shinyApp(
  ui <- basicPage(
    actionButton("login", "Login"),
    verbatimTextOutput("secrets")
  ),

  server <- function(input, output, session) {
    vals <- reactiveValues(authenticated=FALSE)

    passwordModal <- function(message=NULL) {
      modalDialog(
        textInput("username", "Username", input$username),
        passwordInput("password", "Password", input$password),

        if (!is.null(message)) div(tags$b(message, style="color: red;")),

        footer = tagList(
          modalButton("Cancel"),
          actionButton("authenticate", "OK")
        )
      )
    }

    observeEvent(input$login, {
      showModal(passwordModal())
    })

    observeEvent(input$authenticate, {
      vals$authenticated <- FALSE
      if (!is.null(input$username) && nzchar(input$username) &&
          !is.null(input$password) && nzchar(input$password)) {
        removeModal()

        if (input$password == "letmein") {
          vals$authenticated <- TRUE
        } else {
          showModal(passwordModal(message="Incorrect password!"))
        }

      } else {
        showModal(passwordModal(message="Please fill in your username and password"))
      }
    })

    output$secrets <- renderText({
      if (vals$authenticated) {
        paste("Don't tell anyone, ", input$username, ", but...", sep="")
      } else {
        "I can't tell you that!"
      }
    })
  }
)
Автор: Steve Pitchers Размещён: 08.06.2017 02:34
Вопросы из категории :
32x32