cybersource-rest-client
Version:
Node.js SDK for the CyberSource REST API
55 lines (46 loc) • 2.06 kB
JavaScript
var Jwt = require('jwt-simple');
const Constants = require('../util/Constants');
var KeyCertificate = require('./KeyCertificateGenerator');
var DigestGenerator = require('../payloadDigest/DigestGenerator');
var ApiException = require('../util/ApiException');
/* JWTSigToken return jwtToken.
* jwtToken contains jwtBody encoded with JWT using RS256 algoritham.
* In POST method only we need to add digest in the jwtBody
*/
exports.getToken = function (merchantConfig, logger) {
try {
var claimSet = '';
// date format is 'Mon, 09 Apr 2018 10:18:57 GMT'
var date = new Date(Date.now()).toUTCString();
var rsaPrivateKey = KeyCertificate.getRSAPrivateKey(merchantConfig, logger);
var certificate = KeyCertificate.getX509CertificateInBase64(merchantConfig, logger, merchantConfig.getKeyAlias());
var requestType = merchantConfig.getRequestType().toLowerCase();
if (requestType === Constants.GET || requestType === Constants.DELETE) {
claimSet = "{\"iat\":\"" + date + "\"}";
}
else if (requestType === Constants.POST || requestType === Constants.PUT
|| requestType === Constants.PATCH) {
var digest = DigestGenerator.generateDigest(merchantConfig, logger);
claimSet = "{\"digest\":\""
+ digest + "\",\"digestAlgorithm\":\"SHA-256\",\"iat\":\""
+ date + "\"}";
}
else {
ApiException.ApiException(Constants.INVALID_REQUEST_TYPE_METHOD, logger);
}
var x5CList = [certificate];
var customHeader = {
'header': {
'v-c-merchant-id': merchantConfig.getMerchantID(),
'x5c': x5CList
}
};
var claimSetObj = JSON.parse(claimSet);
//Generating JWToken
var jwtToken = Jwt.encode(claimSetObj, rsaPrivateKey, 'RS256', customHeader);
return jwtToken;
} catch (err) {
throw err;
}
};
;