masson
Version:
Module execution engine for cluster deployments.
83 lines (73 loc) • 2.22 kB
text/coffeescript
fs = require 'fs'
module.exports = (config, callback) ->
username config, ->
password config, ->
public_key config, (err) ->
return callback err if err
callback()
username = (config, callback) ->
return callback() if config.username
process.stdout.write 'username: '
prompt (username) ->
config.username = username
callback()
password = (config, callback) ->
return callback() if config.password
process.stdout.write 'Password: '
promptpass (password) ->
config.password = password
callback()
public_key = (config, callback) ->
return callback() if config.public_key
process.stdout.write 'Public key (~/.ssh/id_rsa.pub): '
prompt (path) ->
path = '~/.ssh/id_rsa.pub' unless path
path = process.env.HOME + match[1] if match = /~(\/.*)/.exec path
fs.readFile path, (err, public_key) ->
return callback err if err
config.public_key = public_key
callback()
prompt = (callback) ->
process.stdin.resume()
process.stdin.setEncoding 'utf8'
process.stdin.setRawMode true
value = ''
process.stdin.on 'data', lst = (char)->
char = char + ''
switch char
when '\n', '\r', '\u0004'
process.stdin.setRawMode false
process.stdin.pause()
process.stdout.write '\n'
process.stdin.removeListener 'data', lst
callback value
when '\u0003'
process.exit()
else
process.stdout.write char
value += char
break
promptpass = (callback) ->
process.stdin.resume()
process.stdin.setEncoding 'utf8'
process.stdin.setRawMode true
value = ''
process.stdin.on 'data', lst = (char)->
char = char + ''
switch char
when '\n', '\r', '\u0004'
process.stdin.setRawMode false
process.stdin.pause()
process.stdout.write '\n'
process.stdin.removeListener 'data', lst
callback value
when '\u0003'
process.exit()
else
process.stdout.write '*'
value += char
break