Sha256: 4f3d38b97c9b453b29c82ab1c6386b626c1dbd4f1ab426fe9142f8319c6e03b2
Contents?: true
Size: 1.99 KB
Versions: 6
Compression:
Stored size: 1.99 KB
Contents
require 'io/console' module Net; module SSH # Default prompt implementation, called for asking password from user. # It will never be instantiated directly, but will instead be created for # you automatically. # # A custom prompt objects can implement caching, or different UI. The prompt # object should implemnted a start method, which should return something implementing # ask and success. Net::SSH uses it like: # # prompter = options[:password_prompt].start({type:'password'}) # while !ok && max_retries < 3 # user = prompter.ask("user: ", {}, true) # password = prompter.ask("password: ", {}, false) # ok = send(user, password) # prompter.sucess if ok # end # class Prompt # factory def self.default(options = {}) @default ||= new(options) end def initialize(options = {}) end # default prompt object implementation. More sophisticated implemenetations # might implement caching. class Prompter def initialize(info) if info[:type] == 'keyboard-interactive' # rubocop:disable Style/GuardClause $stdout.puts(info[:name]) unless info[:name].empty? $stdout.puts(info[:instruction]) unless info[:instruction].empty? end end # ask input from user, a prompter might ask for multiple inputs # (like user and password) in a single session. def ask(prompt, echo=true) $stdout.print(prompt) $stdout.flush ret = $stdin.noecho(&:gets).chomp $stdout.print("\n") ret end # success method will be called when the password was accepted # It's a good time to save password asked to a cache. def success end end # start password session. Multiple questions might be asked multiple times # on the returned object. Info hash tries to uniquely identify the password # session, so caching implementations can save passwords properly. def start(info) Prompter.new(info) end end end; end
Version data entries
6 entries across 6 versions & 1 rubygems