braintree
Version:
A library for integrating with Braintree.
116 lines (91 loc) • 4.21 kB
JavaScript
//@ sourceMappingURL=transparent_redirect_gateway.map
// Generated by CoffeeScript 1.6.1
var CreditCardGateway, CustomerGateway, Digest, Environment, SignatureService, TransactionGateway, TransparentRedirectGateway, Util, dateFormat, exceptions, querystring;
Environment = require('./environment').Environment;
Digest = require('./digest').Digest;
Util = require('./util').Util;
querystring = require('../../vendor/querystring.node.js.511d6a2/querystring');
dateFormat = require('dateformat');
CreditCardGateway = require('./credit_card_gateway').CreditCardGateway;
CustomerGateway = require('./customer_gateway').CustomerGateway;
TransactionGateway = require('./transaction_gateway').TransactionGateway;
SignatureService = require('./signature_service').SignatureService;
exceptions = require('./exceptions');
TransparentRedirectGateway = (function() {
var KIND;
KIND = {
CREATE_CUSTOMER: 'create_customer',
UPDATE_CUSTOMER: 'update_customer',
CREATE_CREDIT_CARD: 'create_payment_method',
UPDATE_CREDIT_CARD: 'update_payment_method',
CREATE_TRANSACTION: 'create_transaction'
};
function TransparentRedirectGateway(gateway) {
this.gateway = gateway;
this.url = "" + (this.gateway.config.baseMerchantUrl()) + "/transparent_redirect_requests";
}
TransparentRedirectGateway.prototype.generateTrData = function(inputData) {
var data, dataSegment;
data = Util.convertObjectKeysToUnderscores(inputData);
data.api_version = this.gateway.config.apiVersion;
data.time = dateFormat(new Date(), 'yyyymmddHHMMss', true);
data.public_key = this.gateway.config.publicKey;
dataSegment = querystring.stringify(data);
return new SignatureService(this.gateway.config.privateKey, Digest.Sha1hexdigest).sign(dataSegment);
};
TransparentRedirectGateway.prototype.createCreditCardData = function(data) {
data.kind = KIND.CREATE_CREDIT_CARD;
return this.generateTrData(data);
};
TransparentRedirectGateway.prototype.updateCreditCardData = function(data) {
data.kind = KIND.UPDATE_CREDIT_CARD;
return this.generateTrData(data);
};
TransparentRedirectGateway.prototype.createCustomerData = function(data) {
data.kind = KIND.CREATE_CUSTOMER;
return this.generateTrData(data);
};
TransparentRedirectGateway.prototype.updateCustomerData = function(data) {
data.kind = KIND.UPDATE_CUSTOMER;
return this.generateTrData(data);
};
TransparentRedirectGateway.prototype.transactionData = function(data) {
data.kind = KIND.CREATE_TRANSACTION;
return this.generateTrData(data);
};
TransparentRedirectGateway.prototype.validateQueryString = function(queryString) {
var matches;
matches = queryString.match(/^(.+)&hash=(.+?)$/);
return Digest.Sha1hexdigest(this.gateway.config.privateKey, matches[1]) === matches[2];
};
TransparentRedirectGateway.prototype.confirm = function(queryString, callback) {
var confirmCallback, error, params, statusMatch;
statusMatch = queryString.match(/http_status=(\d+)/);
if (statusMatch && statusMatch[1]) {
error = this.gateway.http.checkHttpStatus(statusMatch[1]);
if (error) {
return callback(error, null);
}
}
if (!this.validateQueryString(queryString)) {
return callback(exceptions.InvalidTransparentRedirectHashError("The transparent redirect hash is invalid"), null);
}
params = querystring.parse(queryString);
confirmCallback = null;
switch (params.kind) {
case KIND.CREATE_CUSTOMER:
case KIND.UPDATE_CUSTOMER:
confirmCallback = new CustomerGateway(this.gateway).responseHandler(callback);
break;
case KIND.CREATE_CREDIT_CARD:
case KIND.UPDATE_CREDIT_CARD:
confirmCallback = new CreditCardGateway(this.gateway).responseHandler(callback);
break;
case KIND.CREATE_TRANSACTION:
confirmCallback = new TransactionGateway(this.gateway).responseHandler(callback);
}
return this.gateway.http.post('/transparent_redirect_requests/' + params.id + '/confirm', null, confirmCallback);
};
return TransparentRedirectGateway;
})();
exports.TransparentRedirectGateway = TransparentRedirectGateway;