37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
|
'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;
|