UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

45 lines (44 loc) 1.84 kB
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), }); };