all files / lib/ login.js

95.83% Statements 23/24
100% Branches 2/2
100% Functions 2/2
95.65% Lines 22/23
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                                                              
const fs = require('fs');
const prompt = require('prompt');
const colors = require('colors/safe');
 
const config = require('../common/config');
const utils = require('../common/utils');
const network = require('../common/network');
 
const schema = {
  properties: {
    email: {
      description: colors.prompt('E-mail'),
      format: 'email',
      required: true
    },
    password: {
      description: colors.prompt('Password'),
      required: true,
      hidden: true,
      replace: '*'
    }
  }
};
 
function login(fileSystem, user) {
  const data = {
    version: config.version,
    token: user.token,
    name: user.name,
    loggedIn: (new Date()).toISOString()
  };
  fileSystem.writeFileSync(config.authFile, JSON.stringify(data, null, 2), 'utf-8');
  config.auth = data;
  utils.info('You\'re logged in!');
  return data.token;
}
 
module.exports = function(program, opts, fileSystem = fs) {
  if (config.auth) {
    return utils.error(`You're already logged in as ${config.auth.email}!`).catch(() => config.auth.token);
  }
 
  utils.info('Please enter your login info:');
 
  prompt.message = '';
  prompt.start(opts);
 
  return utils.prompt(prompt, schema)
    .then((result) => network.create('/sessions', network.serialize(result, 'sessions')))
    .then((data) => login(fileSystem, data))
    .catch((e) => utils.error(`Something went wrong: ${e}`));
};