UNPKG

@sap/hdbext

Version:

Hana-client extension library and utility functions for using SAP HANA in node.js

92 lines (76 loc) 2.6 kB
'use strict'; 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); } }