@mason-api/cli
Version:
CLI assistant for Mason builder
82 lines (74 loc) • 2.36 kB
JavaScript
import fs from 'fs';
import os from 'os';
import colors from 'colors/safe';
import { prompt, promptPassword, sendLoginRequest } from '../utils';
export const command = 'login [email] [password]';
export const desc = 'Log in using mason username and password to retrieve api key';
export const builder = (yargs) => {
yargs
.positional('email', {
describe: 'Username to log in with',
})
.positional('password', {
describe: 'Password for that username',
});
};
export const handler = async argv => login(argv.email, argv.password);
export async function login(e, p) {
const email = e || await prompt(' Email: ');
const password = p || await promptPassword('Password: ');
try {
const json = await sendLoginRequest(email, password);
console.log(colors.green(`Welcome ${json.user.firstName} ${json.user.lastName}!`));
console.log('Your api key was remembered in ~/.masonrc\n');
fs.writeFileSync(`${os.homedir()}/.masonrc`, JSON.stringify(json, 2, 2));
return json;
} catch (e) {
console.log(colors.red('Login failed'));
console.log('Try again with a different email and password.');
process.exit();
}
return null;
}
export async function getIdToken(dontLogIn) {
try {
return JSON.parse(fs.readFileSync(`${os.homedir()}/.masonrc`)).user.id_token;
} catch (e) {
if (!dontLogIn) {
if (await login()) {
return JSON.parse(fs.readFileSync(`${os.homedir()}/.masonrc`)).user.id_token;
}
}
return null;
}
}
export async function getUserId() {
try {
return JSON.parse(fs.readFileSync(`${os.homedir()}/.masonrc`)).user.id;
} catch (e) {
return null;
}
}
export async function getAPIKey(dontLogIn) {
return new Promise(async (resolve) => {
const key = process.env.MASON_API_KEY;
if (!key) {
try {
resolve(JSON.parse(fs.readFileSync(`${os.homedir()}/.masonrc`)).user.apiKey);
} catch (e) {
if (!dontLogIn) {
console.log('API Key was not provided via $MASON_API_KEY');
console.log('We need you to sign in to Mason first');
console.log('');
if (await login()) {
resolve(JSON.parse(fs.readFileSync(`${os.homedir()}/.masonrc`)).user.apiKey);
}
} else {
resolve();
}
}
} else {
resolve(key);
}
});
}