]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #4010, refs #3927. Fixed elgg.security.addToken() to work with query strings...
authorBrett Profitt <brett.profitt@gmail.com>
Sun, 30 Oct 2011 01:44:54 +0000 (18:44 -0700)
committerBrett Profitt <brett.profitt@gmail.com>
Sun, 30 Oct 2011 01:44:54 +0000 (18:44 -0700)
js/lib/elgglib.js
js/lib/security.js

index 0f17eecedbba4b03e81d59662f490ab3c36a7982..628adccfcc2cffa3986cbb0b9fba43b09de2bbe2 100644 (file)
@@ -357,7 +357,7 @@ elgg.forward = function(url) {
  *
  * @param {String} url       The URL to parse
  * @param {Int}    component A component to return
- * @param {Bool}   expand Expand the query into an object? Else it's a string.
+ * @param {Bool}   expand    Expand the query into an object? Else it's a string.
  *
  * @return {Object} The parsed URL
  */
index d14ddff95ac60297082b0208135d5e19628da61e..726c6b767dfd7f6f294f66365f296346766347ad 100644 (file)
@@ -60,7 +60,7 @@ elgg.security.refreshToken = function() {
 
 
 /**
- * Add elgg action tokens to an object or string (assumed to be url data)
+ * Add elgg action tokens to an object, URL, or query string.
  *
  * @param {Object|string} data
  * @return {Object} The new data object including action tokens
@@ -70,22 +70,31 @@ elgg.security.addToken = function(data) {
 
        // 'http://example.com?data=sofar'
        if (elgg.isString(data)) {
-               var args = {},
+               // is this a full URL, relative URL, or just the query string?
+               var parts = elgg.parse_url(data),
+                       args = {},
                        base = '';
-
-               // check for query strings
-               if (data.indexOf('?') != -1) {
-                       var split = data.split('?');
-                       base = split[0];
-                       args = elgg.parse_str(split[1]);
+               
+               if (parts['host'] == data) {
+                       if (data.indexOf('=') > -1) {
+                               // query string
+                               args = elgg.parse_str(data);
+                       } else {
+                               // relative URL
+                               base = data + '?';
+                       }
                } else {
-                       base = data;
+                       // a URL
+                       if (typeof parts['query'] != 'undefined') {
+                               args = elgg.parse_str(parts['query']);
+                       }
+                       var split = data.split('?');
+                       base = split[0] + '?';
                }
-               
                args["__elgg_ts"] = elgg.security.token.__elgg_ts;
                args["__elgg_token"] = elgg.security.token.__elgg_token;
 
-               return base + '?' + jQuery.param(args);
+               return base + jQuery.param(args);
        }
 
        // no input!  acts like a getter