UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

104 lines (103 loc) 4.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.verifyHost = void 0; const SecretsStorageSingleton_1 = require("../cache/secrets/SecretsStorageSingleton"); const utils_1 = require("../cache/secrets/utils"); const constants_1 = require("../constants"); const logger_1 = require("../logger"); const utils_2 = require("../logger/utils"); const openUtils_1 = require("../utils/openUtils"); const options_1 = require("../utils/options"); const utils_3 = require("../utils/utils"); const init_command_1 = require("./config.command/cache.command/init.command"); const handler_1 = require("./handler"); const utils_4 = require("./handler/options/utils"); const getLogger = () => (0, logger_1.get)("commands.login"); const verifyHost = async () => async () => { const logger = getLogger(); try { const url = (0, utils_1.getTenantUrl)(); logger.debug(`url defined as ${url}`); } catch (err) { logger.error("tenant URL not defined. use option -H, --host"); (0, utils_2.logVerbose)(logger, "specify the tenant URL using option --host"); throw new Error("tenant URL not defined. use option -H, --host"); } }; exports.verifyHost = verifyHost; const confirmSecretsOverwrite = async (tenantUrl) => { const promptResponse = await (0, utils_4.promptForValue)({ prompts: { type: "confirm", message: `Secret for tenant ${tenantUrl} already exists. Do you want to overwrite it?`, initial: true, }, longName: "overwrite-secrets", description: `overwrite existing secrets`, }); return promptResponse; }; const initializeCache = async () => async () => { const { warn, info } = getLogger(); info("initializing cache after successful login"); try { (0, options_1.getOptionValueFromConfig)(constants_1.OPTION_HOST); await (await (0, init_command_1.init)())(); } catch (err) { warn(`option ${(0, utils_3.buildOptionName)(constants_1.ROOT_COMMAND, constants_1.OPTION_HOST)} not defined, skipping cache init`); } }; const fetchSupportedBrowsers = async () => { const list = await (0, openUtils_1.getSupportedBrowsers)(); return list.map(({ name }) => name); }; const saveSecrets = async () => async () => { await SecretsStorageSingleton_1.SecretsStorageSingleton.SINGLETON.synchronizeSecretsToStorage(); }; const warnIfSecretExists = async () => { return async () => { const logger = getLogger(); const tenantUrl = (0, utils_1.getTenantUrl)(); const secretsStorage = SecretsStorageSingleton_1.SecretsStorageSingleton.SINGLETON; if (secretsStorage.hasSecretForTenant && secretsStorage.hasSecretForTenant(tenantUrl)) { const shouldOverwrite = await confirmSecretsOverwrite(tenantUrl); logger.debug(`user response for overwriting secrets for tenant ${tenantUrl}: ${shouldOverwrite}`); if (!shouldOverwrite) { const message = `Aborted: Secret for tenant ${tenantUrl} already exists and will not be overwritten.`; logger.warn(message); // Do not throw, just log and return return; } } throw new Error(`Warning: Previous login secrets for tenant ${tenantUrl} will be removed and overwritten with new credentials.`); }; }; const loginCommand = { type: "command", command: "login", description: "log in to your account using interactive OAuth authentication", options: [], handler: (0, handler_1.createNextHandler)("login.command", (0, handler_1.createParseArgumentsHandler)(), (0, handler_1.createOptionsHandler)([ { ...constants_1.OPTION_HOST, hidden: false, required: true }, constants_1.OPTION_VERBOSE, constants_1.OPTION_OPTIONS_FILE, { ...constants_1.OPTION_AUTHORIZATION_URL, hidden: false }, { ...constants_1.OPTION_TOKEN_URL, hidden: false }, { ...constants_1.OPTION_CLIENT_ID, hidden: false }, { ...constants_1.OPTION_CLIENT_SECRET, hidden: false }, { ...constants_1.OPTION_ACCESS_TOKEN, hidden: false }, { ...constants_1.OPTION_CODE, hidden: false }, { ...constants_1.OPTION_REFRESH_TOKEN, hidden: false }, { ...constants_1.OPTION_SECRETS_FILE, hidden: false }, { ...constants_1.OPTION_BROWSER, choices: fetchSupportedBrowsers, default: openUtils_1.getDefaultBrowser, }, { ...constants_1.OPTION_AUTHORIZATION_FLOW, hidden: false }, ]), (0, handler_1.createMandatoryOptionsHandler)(), exports.verifyHost, (0, handler_1.createOrHandler)("commands.login", warnIfSecretExists, (0, handler_1.createNextHandler)("commands.login", (0, handler_1.createOauthHandler)(true), initializeCache, saveSecrets))), }; exports.default = loginCommand;