@sap/hdbext
Version:
Hana-client extension library and utility functions for using SAP HANA in node.js
92 lines (76 loc) • 2.6 kB
JavaScript
;
var AcceptLanguageParser = require('accept-language');
var fs = require('fs');
var os = require('os');
var SAPPassport = require('@sap/e2e-trace').Passport;
var internalConsts = require('./internal-constants');
var debug = require('debug')('hdbext:conn-options');
exports.getGlobalOptions = getGlobalOptions;
exports.getRequestOptions = getRequestOptions;
function getRequestOptions(req) {
var opt = {};
var authInfo = req.authInfo;
if (authInfo && authInfo.getGrantType && authInfo.getGrantType() !== internalConsts.GRANTTYPE_CLIENTCREDENTIAL) {
if (authInfo.getHdbToken) {
opt['sessionVariable:XS_APPLICATIONUSER'] = authInfo.getHdbToken();
} else if (authInfo.getToken) {
opt['sessionVariable:XS_APPLICATIONUSER'] = authInfo.getToken(internalConsts.SYSTEM, internalConsts.HDB);
}
}
if (req.headers[SAPPassport.HEADER_NAME]) {
var passport = new SAPPassport(req.headers[SAPPassport.HEADER_NAME]);
passport.update({
connectionID: '00000000000000000000000000000000',
connectionCounter: 0
});
passport.compact();
opt['sessionVariable:SAP_PASSPORT'] = passport.serialize();
}
var reqLang = resolveRequestLanguage(req);
if (reqLang) {
opt.locale = reqLang;
}
return opt;
}
function resolveRequestLanguage(req) {
var sapLang = req.headers['x-sap-request-language'];
if (sapLang) {
return sapLang;
}
var acceptLanguage = req.headers['accept-language'];
if (acceptLanguage) {
// accept-language 3.X would need to set first a list of languages
// an alternative could be using accept-language-parser package
var languagesByPreference = AcceptLanguageParser.parse(acceptLanguage);
if (languagesByPreference.length) {
return languagesByPreference[0].value;
}
}
}
function getGlobalOptions() {
var opt = { 'sessionVariable:APPLICATION': getApplicationName() };
var appVersion = getApplicationVersion();
if (appVersion) {
opt['sessionVariable:APPLICATIONVERSION'] = appVersion;
}
return opt;
}
function getApplicationName() {
if (process.env.VCAP_APPLICATION) {
var app = JSON.parse(process.env.VCAP_APPLICATION);
var components = [app.application_name, app.space_name, app.organization_name]
.filter(Boolean);
if (components.length > 0) {
return components.join('/');
}
}
return process.pid + '@' + os.hostname();
}
function getApplicationVersion() {
try {
var pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
return pkg.name + '@' + pkg.version;
} catch (err) {
debug(err);
}
}