@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
45 lines (44 loc) • 1.84 kB
JavaScript
import qs from "qs";
import { fetch } from "../../../../utils/http/index.js";
import { SecretsStorageSingleton } from "../../../../cache/secrets/SecretsStorageSingleton.js";
import { logVerbose } from "../../../../logger/utils.js";
import { get } from "../../../../logger/index.js";
const getLogger = () => get("commands.handler.authentication.oauth.utils");
export const calculateExpiresAfter = (expires_in) => Math.floor(Date.now() / 1000) + expires_in - 10;
export const isExpired = (expires_after) => expires_after <= calculateExpiresAfter(10);
export const readToken = async (data) => {
const logger = getLogger();
const secret = await SecretsStorageSingleton.SINGLETON.getDefaultSecret();
if (!secret.token_url || !secret.client_id || !secret.client_secret) {
logVerbose(logger, `The secret is invalid. Either the token URL, client ID, or client secret is missing.` +
`Please check the secret and login again.`);
throw new Error("invalid secrets information");
}
const body = {
...data,
response_type: "token",
};
if (!secret.customClient) {
body.client_id = secret.client_id;
}
logger.debug(`reading token`);
const info = (await fetch({
method: "POST",
url: secret.token_url,
auth: {
username: secret.client_id,
password: secret.client_secret,
},
headers: {
"x-sap-sac-custom-auth": !!secret.customClient,
"content-type": "application/x-www-form-urlencoded",
},
data: qs.stringify(body),
})).data;
logger.debug(`token received: ${JSON.stringify(info, null, 2)}`);
await SecretsStorageSingleton.SINGLETON.storeSecret({
...secret,
...info,
expires_after: calculateExpiresAfter(info.expires_in),
});
};