Skip to content

Commit

Permalink
bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
robrighter committed Mar 14, 2011
1 parent 8df5fd5 commit dabb46d
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 26 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -0,0 +1 @@
config.js
4 changes: 4 additions & 0 deletions example-config.js
@@ -0,0 +1,4 @@
module.exports = {
AWS_ACCESS_KEY_ID: 'YOUR ACCESS KEY HERE',
AWS_SECRET_ACCESS_KEY: 'YOUR SECRET HERE'
};
12 changes: 12 additions & 0 deletions example.js
@@ -0,0 +1,12 @@
var PipeLine = require('./lib/amazon-fps-cbui-pipeline');
var config = require('./config.js');

var singleUse = new PipeLine('SingleUse', config.AWS_ACCESS_KEY_ID, config.AWS_SECRET_ACCESS_KEY);

singleUse.addParameter("callerReference","callerReferenceSingleUse");
singleUse.addParameter("returnURL","http://www.mysite.com/call_back.jsp");
singleUse.addParameter("transactionAmount","5");
singleUse.addParameter("currencyCode", "USD");
singleUse.addParameter("paymentReason", "HarryPotter 1-5 DVD set");

console.log("Sample CBUI url for SingleUse pipeline : " + singleUse.getURL());
57 changes: 31 additions & 26 deletions lib/amazon-fps-cbui-pipeline.js
Expand Up @@ -36,13 +36,29 @@
parameters["signatureVersion"] = SIGNATURE_VERSION; parameters["signatureVersion"] = SIGNATURE_VERSION;
parameters["signatureMethod"] = SIGNATURE_METHOD; parameters["signatureMethod"] = SIGNATURE_METHOD;


this.addParameter = function(key, value){ parameters[key] }; this.addParameter = function(key, value){
parameters[key] = value;
};


this.addOptionalParameters = function(params) { this.addOptionalParameters = function(params) {
Object.keys(params).forEach(function(key){ Object.keys(params).forEach(function(key){
parameters[key] = params[key]; parameters[key] = params[key];
}); });
} }

/**
* Constructs the query string for the parameters added to this class
*
* This function also calculates the signature of the all the name value pairs
* added to the class.
*
* @return string URL
*/
this.getURL = function() {
validateParameters('all',parameters);
validateParameters(parameters.pipelineName,parameters);
return constructUrl(parameters);
}


/** /**
* Computes RFC 2104-compliant HMAC signature for request parameters * Computes RFC 2104-compliant HMAC signature for request parameters
Expand Down Expand Up @@ -72,9 +88,9 @@
* Pairs of parameter and values are separated by the '&' character (ASCII code 38). * Pairs of parameter and values are separated by the '&' character (ASCII code 38).
* *
*/ */
this.signParameters = function(parameters, httpMethod, host, requestURI){ signParameters = function(parameters, httpMethod, host, requestURI){
signatureVersion = parameters[SIGNATURE_VERSION_KEYNAME]; var signatureVersion = parameters[SIGNATURE_VERSION_KEYNAME];
algorithm HMAC_SHA1_ALGORITHM; var algorithm = HMAC_SHA1_ALGORITHM;
var stringToSign = null; var stringToSign = null;
if (2 === signatureVersion) { if (2 === signatureVersion) {
algorithm = parameters[SIGNATURE_METHOD_KEYNAME]; algorithm = parameters[SIGNATURE_METHOD_KEYNAME];
Expand All @@ -91,8 +107,8 @@
* @return String to Sign * @return String to Sign
*/ */
var calculateStringToSignV1 = function(parameters) { var calculateStringToSignV1 = function(parameters) {
data = ''; var data = '';
parameters = makeSortedObject(parameters,false); var parameters = makeSortedObject(parameters,false);
parameters.forEach(function(param){ parameters.forEach(function(param){
data += (param['key'] + param['value']); data += (param['key'] + param['value']);
}); });
Expand Down Expand Up @@ -123,8 +139,6 @@


var uriencoded = requestURI.split('/').map(escape).join('/'); var uriencoded = requestURI.split('/').map(escape).join('/');


var uriencoded = implode("/", array_map(array("Amazon_FPS_CBUIPipeline", "_urlencode"), explode("/", $requestURI)));

data += uriencoded; data += uriencoded;
data += "\n"; data += "\n";


Expand Down Expand Up @@ -166,7 +180,7 @@
} }
var hostHeader = getHostHeader(CBUI_URL); var hostHeader = getHostHeader(CBUI_URL);
var requestURI = getRequestURI(CBUI_URL); var requestURI = getRequestURI(CBUI_URL);
var signature = this.signParameters(parameters, HTTP_GET_METHOD, hostHeader, requestURI); var signature = signParameters(parameters, HTTP_GET_METHOD, hostHeader, requestURI);
parameters["signature"] = signature; parameters["signature"] = signature;
return CBUI_URL + "?" + buildQueryString(parameters); return CBUI_URL + "?" + buildQueryString(parameters);
} }
Expand Down Expand Up @@ -215,36 +229,27 @@
}); });
} }


/**
* Constructs the query string for the parameters added to this class
*
* This function also calculates the signature of the all the name value pairs
* added to the class.
*
* @return string URL
*/
this.getURL = function() {
validateParameters('all',parameters);
validateParameters(parameters.pipelineName,parameters);
return constructUrl(parameters);
}


////////////////////////////////////////////// //////////////////////////////////////////////
// UTILS // // UTILS //
////////////////////////////////////////////// //////////////////////////////////////////////
function urlEncode(toencode){
return escape(toencode).replace(/\//g,'%2F');
}



function buildQueryString(params){ function buildQueryString(params){
Object.keys(params).map(function(p){ return Object.keys(params).map(function(p){
return escape(p) + "=" + escape(params[p]) + '&'; return escape(p) + "=" + urlEncode(params[p]);
}); }).join('&');
} }


/** /**
* Convert paremeters to Url encoded query string * Convert paremeters to Url encoded query string
*/ */
function getParametersAsString(parameters) { function getParametersAsString(parameters) {
return parameters.map(function(param){ return parameters.map(function(param){
return (param.key + '=' + escape(param.value)); return (param.key + '=' + urlEncode(param.value));
}).join('&'); }).join('&');
} }


Expand Down

0 comments on commit dabb46d

Please sign in to comment.