@sap-cloud-sdk/connectivity
Version:
SAP Cloud SDK for JavaScript connectivity
104 lines • 4.11 kB
JavaScript
;
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