All files / api-build/commands login.js

32.69% Statements 17/52
0% Branches 0/16
0% Functions 0/14
35.42% Lines 17/48
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 1251x       1x   1x 1x 1x 1x   1x 1x   1x   1x       1x                                 1x                                                   1x                 1x                                   1x                                       1x                         1x  
module.exports.usage = `Login to Build
 
Usage: api login`;
 
module.exports.weight = 3;
 
const createEnquirer = require('../lib/enquirer');
const request = require('request-promise');
const fs = require('fs');
const utils = require('../utils/utils');
 
const proxyUrl = utils.BUILD_URL;
const enquirer = createEnquirer();
 
module.exports.aliases = ['signup'];
 
module.exports.category = 'utility';
 
let action;
 
const getEmail = (args) => {
  action = args[0];
  if (utils.fileExists(utils.credPath)) {
    console.log(`You are already logged in. Run ${'api logout'.green} switch accounts.`);
  } else {
    enquirer
      .ask({
        type: 'input',
        name: 'email',
        message: 'Enter your email address',
        default: utils.getGitConfig('user.email'),
      })
      .then(getToken)
      .catch(console.log);
  }
};
 
const getToken = (input) => {
  request.post(`${proxyUrl}/users/action`, {
    json: true,
    body: input,
  }).then((res) => {
    if (res === 'signup') {
      if (action !== 'signup') console.log('It seems like you need to sign up!');
      enquirer
        .ask([
          {
            type: 'input',
            name: 'username',
            message: 'Enter a username',
            default: utils.makeUsername(),
          },
        ]).then((u) => {
          getPassword().then(p => signup(input.email, u.username, p.password, p.inviteCode));
        }).catch(console.log);
    } else if (res === 'login' && action !== 'signup') {
      getPassword().then(p => login(input.email, p.password)).catch(console.log);
    } else {
      console.log(`An account already exists with that email. Run ${'api login'.green} to log in!`);
    }
  });
};
 
const getPassword = () => {
  return enquirer
    .ask({
      type: 'password',
      name: 'password',
      message: 'Enter your password',
    });
};
 
const signup = (email, username, password, inviteCode) => {
  request.post(`${proxyUrl}/users`, {
    json: true,
    body: {
      email,
      username,
      password,
      inviteCode,
    },
  }).then(() => login(email, password)).catch((res) => {
    if (res.error.errors.password) {
      console.log(res.error.errors.password.red);
    } else {
      console.log(res.error.error);
    }
  });
};
 
const j = request.jar();
function saveCookie() {
  utils.setupSharedDirectory();
  fs.writeFile(utils.credPath, JSON.stringify(j._jar), (err) => {
    if (err) console.log(err);
    if (action === 'signup') {
      console.log('Account Created!'.green);
      console.log('');
 
      // For people who run the demo code, and are sent this way
      console.log('To see your API keys, run:');
      console.log('');
      console.log(`  ${'$'.grey} ${'api keys'.yellow}`);
      console.log('');
    } else {
      console.log('Successfully Logged In!'.green);
    }
  });
}
 
const login = (email, password) => {
  request.post(`${proxyUrl}/login/cli`, {
    json: true,
    jar: j,
    body: {
      usermail: email,
      password,
    },
  }).then(saveCookie).catch((res) => {
    console.log(res.error.error.red);
  });
};
 
module.exports.run = getEmail;