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