UNPKG

@mason-api/cli

Version:

CLI assistant for Mason builder

82 lines (74 loc) 2.36 kB
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); } }); }