@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
54 lines (53 loc) • 2.37 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.readToken = exports.isExpired = exports.calculateExpiresAfter = void 0;
const qs_1 = __importDefault(require("qs"));
const http_1 = require("../../../../utils/http");
const SecretsStorageSingleton_1 = require("../../../../cache/secrets/SecretsStorageSingleton");
const utils_1 = require("../../../../logger/utils");
const logger_1 = require("../../../../logger");
const getLogger = () => (0, logger_1.get)("commands.handler.authentication.oauth.utils");
const calculateExpiresAfter = (expires_in) => Math.floor(Date.now() / 1000) + expires_in - 10;
exports.calculateExpiresAfter = calculateExpiresAfter;
const isExpired = (expires_after) => expires_after <= (0, exports.calculateExpiresAfter)(10);
exports.isExpired = isExpired;
const readToken = async (data) => {
const logger = getLogger();
const secret = await SecretsStorageSingleton_1.SecretsStorageSingleton.SINGLETON.getDefaultSecret();
if (!secret.token_url || !secret.client_id || !secret.client_secret) {
(0, utils_1.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 (0, http_1.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_1.default.stringify(body),
})).data;
logger.debug(`token received: ${JSON.stringify(info, null, 2)}`);
await SecretsStorageSingleton_1.SecretsStorageSingleton.SINGLETON.storeSecret({
...secret,
...info,
expires_after: (0, exports.calculateExpiresAfter)(info.expires_in),
});
};
exports.readToken = readToken;