Skip to content

Commit ed6c041

Browse files
author
Devendra
committed
changing pam sign input generation logic , and adding random parameter test
1 parent 243c1de commit ed6c041

File tree

28 files changed

+1357
-1030
lines changed

28 files changed

+1357
-1030
lines changed

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.6.2
1+
3.6.3

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pubnub",
3-
"version": "3.6.2",
3+
"version": "3.6.3",
44
"main": "web/pubnub.min.js",
55
"license": "https://github.com/pubnub/javascript/blob/master/LICENSE",
66
"ignore" : [ "**/*", "!web/pubnub.js", "!web/pubnub.min.js"],

core/pubnub-common.js

+66-41
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,6 @@ function PN_API(setup) {
205205
, SUBSCRIBE_KEY = setup['subscribe_key'] || 'demo'
206206
, AUTH_KEY = setup['auth_key'] || ''
207207
, SECRET_KEY = setup['secret_key'] || ''
208-
, PNSDK = setup['PNSDK'] || ''
209208
, hmac_SHA256 = setup['hmac_SHA256']
210209
, SSL = setup['ssl'] ? 's' : ''
211210
, ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')
@@ -230,6 +229,7 @@ function PN_API(setup) {
230229
, NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']
231230
, COMPATIBLE_35 = setup['compatible_3.5'] || false
232231
, xdr = setup['xdr']
232+
, params = setup['params'] || {}
233233
, error = setup['error'] || function() {}
234234
, _is_online = setup['_is_online'] || function() { return 1 }
235235
, jsonp_cb = setup['jsonp_cb'] || function() { return 0 }
@@ -243,6 +243,37 @@ function PN_API(setup) {
243243
'decrypt' : function(b,key){return b}
244244
};
245245

246+
function _get_url_params(data) {
247+
if (!data) data = {};
248+
each( params , function( key, value ) {
249+
data[key] = value;
250+
});
251+
return data;
252+
}
253+
254+
function _object_to_key_list(o) {
255+
var l = []
256+
each( o , function( key, value ) {
257+
l.push(key);
258+
});
259+
return l;
260+
}
261+
function _object_to_key_list_sorted(o) {
262+
return _object_to_key_list(o).sort();
263+
}
264+
265+
function _get_pam_sign_input_from_params(params) {
266+
var si = "";
267+
var l = _object_to_key_list_sorted(params);
268+
269+
for (var i in l) {
270+
var k = l[i]
271+
si += k + "=" + encode(params[k]) ;
272+
if (i != l.length - 1) si += "&"
273+
}
274+
return si;
275+
}
276+
246277
function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {
247278
var err = false;
248279

@@ -379,7 +410,7 @@ function PN_API(setup) {
379410
blocking : blocking || SSL,
380411
timeout : 2000,
381412
callback : jsonp,
382-
data : data,
413+
data : _get_url_params(data),
383414
success : function(response) {
384415
_invoke_callback(response, callback, err);
385416
},
@@ -427,6 +458,9 @@ function PN_API(setup) {
427458
'get_version' : function() {
428459
return SDK_VER;
429460
},
461+
'_add_param' : function(key,val) {
462+
params[key] = val;
463+
},
430464

431465
/*
432466
PUBNUB.history({
@@ -467,7 +501,7 @@ function PN_API(setup) {
467501
// Send Message
468502
xdr({
469503
callback : jsonp,
470-
data : params,
504+
data : _get_url_params(params),
471505
success : function(response) {
472506
if (typeof response == 'object' && response['error']) {
473507
err({'message' : response['message'], 'payload' : response['payload']});
@@ -546,7 +580,7 @@ function PN_API(setup) {
546580
},
547581
fail : function() { callback([ 0, 'Disconnected' ]) },
548582
url : url,
549-
data : data
583+
data : _get_url_params(data)
550584
});
551585
},
552586

@@ -565,7 +599,7 @@ function PN_API(setup) {
565599
var jsonp = jsonp_cb();
566600
xdr({
567601
callback : jsonp,
568-
data : { 'uuid' : UUID, 'auth' : AUTH_KEY },
602+
data : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),
569603
timeout : SECOND * 5,
570604
url : [STD_ORIGIN, 'time', jsonp],
571605
success : function(response) { callback(response[0]) },
@@ -613,7 +647,7 @@ function PN_API(setup) {
613647
callback : jsonp,
614648
timeout : SECOND * 5,
615649
url : url,
616-
data : { 'uuid' : UUID, 'auth' : auth_key },
650+
data : _get_url_params({ 'uuid' : UUID, 'auth' : auth_key }),
617651
fail : function(response){
618652
_invoke_error(response, err);
619653
publish(1);
@@ -802,7 +836,7 @@ function PN_API(setup) {
802836
// Connect to PubNub Subscribe Servers
803837
_reset_offline();
804838

805-
var data = { 'uuid' : UUID, 'auth' : auth_key };
839+
var data = _get_url_params({ 'uuid' : UUID, 'auth' : auth_key });
806840

807841
var st = JSON.stringify(STATE);
808842
if (st.length > 2) data['state'] = JSON.stringify(STATE);
@@ -818,7 +852,7 @@ function PN_API(setup) {
818852
//SUB_RECEIVER = null;
819853
SELF['time'](_test_connection);
820854
},
821-
data : data,
855+
data : _get_url_params(data),
822856
url : [
823857
SUB_ORIGIN, 'subscribe',
824858
SUBSCRIBE_KEY, encode(channels),
@@ -946,7 +980,7 @@ function PN_API(setup) {
946980

947981
xdr({
948982
callback : jsonp,
949-
data : data,
983+
data : _get_url_params(data),
950984
success : function(response) {
951985
_invoke_callback(response, callback, err);
952986
},
@@ -976,7 +1010,7 @@ function PN_API(setup) {
9761010

9771011
xdr({
9781012
callback : jsonp,
979-
data : data,
1013+
data : _get_url_params(data),
9801014
success : function(response) {
9811015
_invoke_callback(response, callback, err);
9821016
},
@@ -1000,7 +1034,7 @@ function PN_API(setup) {
10001034
, uuid = args['uuid'] || UUID
10011035
, channel = args['channel']
10021036
, url
1003-
, data = { 'auth' : auth_key };
1037+
, data = _get_url_params({ 'auth' : auth_key });
10041038

10051039
// Make sure we have a Channel
10061040
if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');
@@ -1031,7 +1065,7 @@ function PN_API(setup) {
10311065

10321066
xdr({
10331067
callback : jsonp,
1034-
data : data,
1068+
data : _get_url_params(data),
10351069
success : function(response) {
10361070
_invoke_callback(response, callback, err);
10371071
},
@@ -1076,27 +1110,9 @@ function PN_API(setup) {
10761110
, sign_input = SUBSCRIBE_KEY + "\n" + PUBLISH_KEY + "\n"
10771111
+ "grant" + "\n";
10781112

1079-
1080-
if (auth_key) sign_input += ("auth=" + encode(auth_key) + "&");
1081-
if (jsonp != '0') sign_input += ("callback=" + encode(jsonp) + "&") ;
1082-
if (channel) sign_input += ("channel=" + encode(channel) + "&") ;
1083-
1084-
sign_input += "pnsdk=" + encode(PNSDK) + "&"
1085-
+ "r=" + r + "&"
1086-
+ "timestamp=" + encode(timestamp);
1087-
1088-
if (ttl || ttl === 0) sign_input += "&" + "ttl=" + ttl;
1089-
1090-
sign_input += "&" + "w=" + w;
1091-
var signature = hmac_SHA256( sign_input, SECRET_KEY );
1092-
1093-
signature = signature.replace( /\+/g, "-" );
1094-
signature = signature.replace( /\//g, "_" );
1095-
10961113
var data = {
10971114
'w' : w,
10981115
'r' : r,
1099-
'signature' : signature,
11001116
'channel' : channel,
11011117
'timestamp' : timestamp
11021118
};
@@ -1105,6 +1121,17 @@ function PN_API(setup) {
11051121
if (ttl || ttl === 0) data['ttl'] = ttl;
11061122
if (auth_key) data['auth'] = auth_key;
11071123

1124+
data = _get_url_params(data)
1125+
1126+
sign_input += _get_pam_sign_input_from_params(data);
1127+
1128+
var signature = hmac_SHA256( sign_input, SECRET_KEY );
1129+
1130+
signature = signature.replace( /\+/g, "-" );
1131+
signature = signature.replace( /\//g, "_" );
1132+
1133+
data['signature'] = signature;
1134+
11081135
xdr({
11091136
callback : jsonp,
11101137
data : data,
@@ -1149,23 +1176,21 @@ function PN_API(setup) {
11491176
+ PUBLISH_KEY + "\n"
11501177
+ "audit" + "\n";
11511178

1152-
if (auth_key) sign_input += ("auth=" + encode(auth_key) + "&");
1153-
if (jsonp != '0') sign_input += ("callback=" + encode(jsonp) + "&") ;
1154-
if (channel) sign_input += ("channel=" + encode(channel) + "&") ;
1179+
var data = {'timestamp' : timestamp };
1180+
if (jsonp != '0') { data['callback'] = jsonp; }
1181+
if (channel) data['channel'] = channel;
1182+
if (auth_key) data['auth'] = auth_key;
1183+
1184+
data = _get_url_params(data)
11551185

1156-
sign_input += "pnsdk=" + encode(PNSDK) + "&" + "timestamp=" + timestamp;
1186+
sign_input += _get_pam_sign_input_from_params(data);
11571187

11581188
var signature = hmac_SHA256( sign_input, SECRET_KEY );
11591189

11601190
signature = signature.replace( /\+/g, "-" );
11611191
signature = signature.replace( /\//g, "_" );
11621192

1163-
var data = { 'signature' : signature, 'timestamp' : timestamp };
1164-
1165-
if (jsonp != '0') { data['callback'] = jsonp; }
1166-
if (channel) data['channel'] = channel;
1167-
if (auth_key) data['auth'] = auth_key;
1168-
1193+
data['signature'] = signature;
11691194
xdr({
11701195
callback : jsonp,
11711196
data : data,
@@ -1215,7 +1240,7 @@ function PN_API(setup) {
12151240

12161241
xdr({
12171242
callback : jsonp,
1218-
data : data,
1243+
data : _get_url_params(data),
12191244
timeout : SECOND * 5,
12201245
url : [
12211246
STD_ORIGIN, 'v2', 'presence',

0 commit comments

Comments
 (0)