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}`));
};
|