Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/doodle-node-cli / src / prompts / login-prompt.js
Size: Mime:
const inquirer = require('inquirer');
const chalk = require('chalk');
const ora = require('ora');
const { DOODLE_ENVS } = require('../constants');
const { CONFIG_PASSWORD_KEY, CONFIG_EMAIL_KEY } = require('../constants');
const { getTokenForUser } = require('../apis/keycloak');
const { obfuscateString } = require('../utils/strings');
const { getUserInfo } = require('../apis/doodle');

/**
 * Log the user in and get a JWT Token from Keycloak
 *
 * @param {Object} options
 * @param {Object} options.email
 * @param {Object} options.password
 * @param {Object} options.target
 * @param {Object} options.print
 * @param {Object} config
 * @returns {Object}
 */
async function loginUser(options = {}, config) {
  const obfuscatedPassword = obfuscateString(config[CONFIG_PASSWORD_KEY]);

  await inquirer
    .prompt([
      {
        type: 'list',
        name: 'target',
        message: 'Which environment are you logging into?',
        choices: Object.keys(DOODLE_ENVS),
        default: 'staging',
        when: typeof options.target === 'undefined',
      },
      {
        type: 'input',
        name: 'email',
        message: `Enter user's email`,
        default: config[CONFIG_EMAIL_KEY],
        when: typeof options.email === 'undefined',
      },
      {
        type: 'password',
        name: 'password',
        message: `What is the user's account password? (leave blank for default: ${obfuscatedPassword})`,
        default: config[CONFIG_PASSWORD_KEY],
        when: typeof options.password === 'undefined',
      },
    ])
    .then(async answers => {
      const { target, email, password } = {
        ...options,
        ...answers,
      };

      const spinner = ora('Fetching user info').start();

      let keycloakData;
      let userData;

      try {
        keycloakData = await getTokenForUser(target, email, password);
        userData = await getUserInfo(target, keycloakData.access_token);

        spinner.succeed('User into found');

        console.log('\n', chalk.yellow('Keycloak Info'));
        console.log('\n', keycloakData, '\n');

        console.log(chalk.yellow('Doodle User Info'));
        console.log('\n', JSON.stringify(userData, null, 2), '\n');
      } catch (err) {
        spinner.fail('Could not fetch user info');
        console.error(err);
      }

      return { target, keycloakData, userData };
    });
}

module.exports = loginUser;