all files / mlpm/lib/commands/ login.js

100% Statements 35/35
100% Branches 16/16
100% Functions 7/7
100% Lines 31/31
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65    10× 10× 10× 10× 10×                                                             10×   10×  
'use strict'
 
var log = require('winston')
var prompt = require('prompt')
var util = require('../util.js')
var api = require('../api.js')
var schema = {
  properties: {
    token: {
      description: 'token',
      message: 'token is required',
      required: true
    }
  }
}
 
function doLogin(token, update) {
  api.login(token, function(err, credentials) {
    //TODO: handle different error types
    if (err) return log.error(err)
 
    // TODO: validate, warn if credentials already exist
 
    util.saveConfig(credentials, function(err) {
      if (err) {
        log.info('couldn\'t save credentials')
        return log.error(err)
      }
 
      log.info('authenticated ' + credentials.username)
    })
  })
}
 
function promptLogin(data, update) {
  if ( update ) {
    schema.properties.token.default = data.token
  }
  log.info('enter mlpm registry token')
  prompt.start()
  prompt.get(schema, function (err, result) {
    if (err) return log.error(err)
 
    doLogin(result.token, update)
  })
}
 
function login(args) {
  util.getConfig(function(err, data) {
    var update = (data && data.token)
 
    if ( !args.token ) return promptLogin(data, update)
 
    if (update) {
      if (data.token === args.token) return
      log.info('updating credentials')
    }
    doLogin(args.token, update)
  })
}
 
login.usage = 'mlpm login <token>'
 
module.exports.command = login