UNPKG

ryuu

Version:

Domo App Dev Studio CLI, The main tool used to create, edit, and publish app designs to Domo

287 lines 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var inquirer = require("inquirer"); var autocompletePrompt = require("inquirer-autocomplete-prompt"); var chalk = require("chalk"); var path = require("path"); var fs = require("fs-extra"); var shell = require("shelljs"); var axios_1 = require("axios"); var Domo = require("ryuu-client"); var log_1 = require("../util/log"); var login_1 = require("../util/login"); var multichoice_1 = require("../util/multichoice"); var oauth_1 = require("../util/oauth"); var constant_1 = require("../models/enums/constant"); var autoUpdate = false; var NEW_INSTANCE = 'new instance'; //@ts-ignore inquirer.registerPrompt('autocomplete', autocompletePrompt); module.exports = function (program) { program .command('login') .description('login to Domo') .option('-i, --instance <value>', 'Domo instance') .option('-u, --user-email <value>', 'user email') .option('-f, --manifest-file <file>', 'use a specific manifest file') .option('-t, --transfer', 'transfer login files from ryuu 3.x') .option('-o, --oauth', 'setup oauth') .option('--no-upgrade-check', 'do not check for new versions') .option('--upgrade-download', 'Automatically download newer version if available. ') .action(function (args) { if (args.upgradeDownload) { autoUpdate = true; } if (args.transfer) { var isWin = process.platform === 'win32'; var homeEnv = process.env[isWin ? 'USERPROFILE' : 'HOME']; var deprecatedLoginDir = "".concat(homeEnv, "/.domo/login/"); if (fs.existsSync(deprecatedLoginDir)) { try { fs.copySync(deprecatedLoginDir, "".concat(Domo.getHomeDir(), "/ryuu/"), { overwrite: false, }); } catch (error) { log_1.log.fail('Failed to transfer logins:', error); } } else { log_1.log.fail('You do not have any ryuu 3.x logins to transfer to ryuu 4.x. Run this command without the -t flag to log in.'); } } var previousLogins = login_1.Login.getPreviousLogins(); var login; var currentLogin = login_1.Login.getCurrentLogin().instance; var prompts = []; var versionCheckFn = !args.upgradeCheck ? function (x) { return x; } : verifyVersion; if (!args.instance) { prompts.push((0, multichoice_1.default)({ //@ts-ignore type: 'autocomplete', source: function (prevAnswers, input) { var filtered = previousLogins .map(function (login) { return login.instance; }) .filter(function (c) { return input === undefined ? true : c.indexOf(input) >= 0; }); filtered.push(NEW_INSTANCE); return Promise.resolve(filtered); }, message: 'Domo instance ' + chalk.grey('e.g. company.domo.com '), name: 'instance', default: currentLogin, // only show up if they have previous logins when: previousLogins.length > 0, }, previousLogins, NEW_INSTANCE), { type: 'input', message: 'Domo instance ' + chalk.grey('e.g. company.domo.com '), name: 'newInstance', when: function (answers) { // only ask if the instance selector wasn't used or new one was selected return !answers.instance || answers.instance === NEW_INSTANCE; }, validate: function (input) { var acceptedDomains = ['domo.com', 'domotech.io', 'domorig.io']; if (acceptedDomains.some(function (domain) { return input.endsWith(domain); })) { return true; } return ('Please login using the full Domo instance. ' + chalk.grey('Example: "company.domo.com"')); }, }); } // prompt user inquirer .prompt(prompts) .then(function (answers) { var instance = args.instance || answers.newInstance || answers.instance; var login = new login_1.Login(instance); login .getClient() .then(function (client) { client .login() .catch(function () { return log_1.log.fail('Failure to get user from server', 'There may be issues with your instance name, authorization, or domo dev token'); }) /* .then(() => { if (args.oauth) { const manifest: string = args.manifestFile !== undefined ? args.manifestFile : 'manifest.json'; if (Oauth.isOAuthEnabled(manifest)) { if (Oauth.hasAppProxyId(manifest)) { return setupOauth( instance, manifest, ); } else { return promptAppProxyId().then(proxyId => { return setupOauth( instance, manifest, proxyId, ); }); } } } else return; }) .catch(() => log.fail('Failure to setup oauth')) */ /* .then( checkVersion.bind(null, instance) ) //@ts-ignore .then(versionCheckFn) .catch(() => console.log ("NPM servers are down, skipping checking for latest version.")) */ .then(function (loginData) { console.log(chalk.grey(constant_1.logo)); log_1.log.ok('Login to ' + instance + ' successful.', //@ts-ignore 'Welcome, ' + loginData.displayName + '.'); return login.persistLogin( //@ts-ignore loginData.refreshToken, client.getDevToken()); }) .catch(function (err) { return log_1.log.fail("Login unsuccessful: ".concat(JSON.stringify(err))); }) .finally(process.exit); }) .catch(function (test) { return log_1.log.notAuthenticated; }); }) .catch(function (err) { return log_1.log.fail("Login failed, likely an issue with data in ~/.config/configstore/ryuu: ".concat(err)); }); }); }; /** * E.T. phone home */ function checkVersion(instance) { var cliVersion = require(path.resolve(__dirname + '/../package.json')).version; var options = { url: 'https://' + instance + '/domoapps/admin/checkversion?version=' + cliVersion, method: 'GET', headers: { Accept: 'application/json', }, }; return (0, axios_1.default)(options); } /** * log message based on the action * if action is 'block' then 'fail' will get called and end the process early */ function verifyVersion(res) { var body = Array.isArray(res.data) ? res[0].data : res.data; if (body.action === 'block') { log_1.log.fail(body.message); } if (body.action === 'warn') { log_1.log.warn(body.message); return promptUpgrade(body.latest); } if (body.action === 'info') { log_1.log.info(body.message); return promptUpgrade(body.latest); } } function promptUpgrade(latest) { return new Promise(function (resolve, reject) { var prompts = []; if (!autoUpdate) { prompts.push({ type: 'confirm', message: 'Would you like to upgrade now?', name: 'upgrade', default: true, }); } inquirer.prompt(prompts).then(function (answers) { if (autoUpdate === true) { answers.upgrade = autoUpdate; } if (answers.upgrade) { log_1.log.info('Upgrading to latest version', 'Hang tight, this may take a moment...'); var output = shell.exec('npm install ryuu -g', { async: false, silent: true, }); if (output.code === 0) { log_1.log.ok('Upgrade to version ' + latest + ' successful'); Promise.resolve(); } else { log_1.log.warn('Upgrade unsuccessful', 'Please try upgrading manually with npm install -g ryuu'); } } else { Promise.resolve(); } }); }); } /** * Oauth Code */ function promptAppProxyId() { return new Promise(function (resolve, reject) { inquirer .prompt([ { type: 'input', message: 'Please enter the app instance id ' + chalk.grey('(oauth proxy) '), name: 'proxyId', }, ]) .then(function (answer) { return resolve(answer.proxyId.trim()); }); }); } function setupOauth(instance, manifestName, proxyId) { if (!oauth_1.Oauth.hasTokens({ instance: instance, manifestName: manifestName, proxyId: proxyId })) { return oauth_1.Oauth.register({ instance: instance, manifestName: manifestName, proxyId: proxyId }) .then(function (response) { var result = response.data; log_1.log.ok('Valid Device Id'); return oauth_1.Oauth.verifyRegistration({ instance: instance, manifestName: manifestName, proxyId: proxyId, verification_uri: result['verification_uri'], user_code: result['user_code'], device_code: result['device_code'], }); }) .then(function (response) { var result = response.data; log_1.log.ok('Retrieved Oauth Tokens'); oauth_1.Oauth.persistTokens({ instance: instance, manifestName: manifestName, proxyId: proxyId, accessToken: result['access_token'], refreshToken: result['refresh_token'], }); }) .catch(function (error) { log_1.log.fail(error); }); } } //# sourceMappingURL=login.js.map