'use strict'; const CONFIG = require('./xssec.config'); const requests = require('./requests'); const TokenInfo = require('./tokeninfo'); function TokenExchanger(serviceCredentials, forceNoExchange) { this.prepareToken = function(accessToken, cb) { var token = new TokenInfo(accessToken); if (token.isValid() && !token.isTokenIssuedByXSUAA() && !(forceNoExchange === true)) { return exchangeIASToken(token, accessToken, cb); } else { cb(null, token); } } function exchangeIASToken(ias_token, accessToken, cb) { if(CONFIG.IAS_XSUAA_XCHANGE_ENABLED !== true) { return cb(new Error("Unexpected TokenType")); } //try to convert (IAS) token to an XSUAA token using the ZoneId from the token requests.requestUserToken(accessToken, serviceCredentials, null, null, null, ias_token.getAppTID(), function(err, xsuaaToken, json) { if(err) { cb(err); } else { var xtoken = new TokenInfo(xsuaaToken); cb(null, xtoken); } }) } } module.exports = TokenExchanger;