UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

54 lines (53 loc) 2.37 kB
"use strict"; 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;