@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
104 lines (103 loc) • 4.9 kB
JavaScript
;
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;