UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

41 lines (40 loc) 2.21 kB
import fs from "fs-extra"; import { create as createNextHandler } from "../../../next.js"; import { OPTION_SECRETS_FILE } from "../../../../../constants.js"; import { get } from "../../../../../logger/index.js"; import { get as getConfig } from "../../../../../config/index.js"; import { getOptionValueFromConfig } from "../../../../../utils/options.js"; import { create as createOptionsHandler } from "../../../options/index.js"; import { SecretsStorageSingleton } from "../../../../../cache/secrets/SecretsStorageSingleton.js"; import { isCustomClient, isSecretConsistent, updateUrls, } from "../../../../../cache/secrets/utils.js"; export async function readSecretsFile() { const { output, error, debug } = get("commands.handler.authentication.oauth.secretsProvider.file.readSecretsFile"); const secretsFile = getOptionValueFromConfig(OPTION_SECRETS_FILE); const config = getConfig(); try { let content = JSON.parse(await fs.readFile(secretsFile, "utf8")); content.tenantUrl = config.tenantUrl ?? content.tenantUrl; content.customClient = isCustomClient(content.client_id); content = await updateUrls(content); debug("secrets found from file"); const consistent = isSecretConsistent(content); if (!consistent.consistent) { output(`the provided secrets file is not consistent. ${consistent.errors.join(". ")}`); throw new Error("inconsistent secrets file"); } return content; } catch (err) { error("failed to read secrets from file", err); output(`The secrets file at location ${secretsFile} could not be read and JSON.parse'd.` + `Does the file exist and is it a valid JSON file?`); throw err; } } const handler = async () => async () => { const { info } = get("commands.handler.authentication.oauth.secretsProvider.file"); info("reading secrets from file"); const content = await readSecretsFile(); await SecretsStorageSingleton.SINGLETON.storeSecret(content); }; export const create = () => createNextHandler("commands.handler.authentication.oauth.secretsProvider.file", createOptionsHandler([OPTION_SECRETS_FILE]), handler);