UNPKG

@sap-cloud-sdk/connectivity

Version:

SAP Cloud SDK for JavaScript connectivity

104 lines 4.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addProxyConfigurationOnPrem = addProxyConfigurationOnPrem; exports.httpProxyHostAndPort = httpProxyHostAndPort; exports.socksProxyHostAndPort = socksProxyHostAndPort; const util_1 = require("@sap-cloud-sdk/util"); const environment_accessor_1 = require("./environment-accessor"); const token_accessor_1 = require("./token-accessor"); const logger = (0, util_1.createLogger)({ package: 'connectivity', messageContext: 'connectivity-service' }); /** * @internal * @param destination - Destination which is extended * @param subscriberToken - The user and service token * @returns Destination containing the proxy config */ async function addProxyConfigurationOnPrem(destination, subscriberToken) { if (destination.type === 'MAIL') { return { ...destination, proxyConfiguration: await socksProxyHostAndPort(subscriberToken?.userJwt.decoded) }; } const proxyConfiguration = { ...httpProxyHostAndPort(), headers: { ...(await proxyHeaders(destination.authentication, subscriberToken)) } }; return { ...destination, proxyConfiguration }; } /** * @internal * @returns Proxy host and port */ function httpProxyHostAndPort() { const service = readConnectivityServiceBinding(); return { host: service.credentials.onpremise_proxy_host, port: service.credentials.onpremise_proxy_http_port || service.credentials.onpremise_proxy_port, protocol: 'http' }; } /** * @internal * @param userJwt - The user JWT * @returns Socks Proxy Configuration */ async function socksProxyHostAndPort(userJwt) { const service = readConnectivityServiceBinding(); const connectivityServiceToken = await (0, token_accessor_1.serviceToken)(service, { jwt: userJwt }); return { host: service.credentials.onpremise_proxy_host, port: parseInt(service.credentials.onpremise_socks5_proxy_port), protocol: 'socks', 'proxy-authorization': connectivityServiceToken }; } function readConnectivityServiceBinding() { const serviceBindings = (0, environment_accessor_1.getServiceBindings)('connectivity'); if (!serviceBindings.length) { throw new Error('No binding to a connectivity service found! Please make sure to bind an instance of the connectivity service to your app if you want to connect to on-premise destinations.'); } return serviceBindings[0]; } async function proxyHeaders(authenticationType, subscriberToken) { const proxyAuthHeader = await proxyAuthorizationHeader(subscriberToken?.serviceJwt.encoded); const sapConnectivityHeader = sapConnectivityAuthenticationHeader(authenticationType, subscriberToken?.userJwt.encoded); return { ...proxyAuthHeader, ...sapConnectivityHeader }; } async function proxyAuthorizationHeader(jwt) { try { const connServiceBinding = readConnectivityServiceBinding(); const token = await (0, token_accessor_1.serviceToken)(connServiceBinding, { jwt }); return { 'Proxy-Authorization': `Bearer ${token}` }; } catch (error) { throw new util_1.ErrorWithCause('Failed to add proxy authorization header - client credentials grant failed!', error); } } function sapConnectivityAuthenticationHeader(authenticationType, jwt) { if (authenticationType === 'PrincipalPropagation') { if (jwt) { return { 'SAP-Connectivity-Authentication': `Bearer ${jwt}` }; } throw new Error(`Unable to create "SAP-Connectivity-Authentication" header: no JWT found on the current request. Connecting to on-premise systems via principle propagation is not possible.`); } if (authenticationType === 'BasicAuthentication') { logger.warn('You are connecting to an On-Premise system using basic authentication. For productive usage Principal propagation is recommended.'); } return {}; } //# sourceMappingURL=connectivity-service.js.map