You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by jc...@apache.org on 2010/05/19 23:14:28 UTC

svn commit: r946400 - in /couchdb/trunk: etc/couchdb/default.ini.tpl.in share/www/script/test/changes.js share/www/script/test/jsonp.js src/couchdb/couch_httpd.erl

Author: jchris
Date: Wed May 19 21:14:28 2010
New Revision: 946400

URL: http://svn.apache.org/viewvc?rev=946400&view=rev
Log:
jsonp callbacks are ignored unless jsonp is configured to true

Modified:
    couchdb/trunk/etc/couchdb/default.ini.tpl.in
    couchdb/trunk/share/www/script/test/changes.js
    couchdb/trunk/share/www/script/test/jsonp.js
    couchdb/trunk/src/couchdb/couch_httpd.erl

Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=946400&r1=946399&r2=946400&view=diff
==============================================================================
--- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
+++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Wed May 19 21:14:28 2010
@@ -24,6 +24,7 @@ vhost_global_handlers = _utils
  _session
  _oauth
  _users
+jsonp = false
 
 [log]
 file = %localstatelogdir%/couch.log

Modified: couchdb/trunk/share/www/script/test/changes.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/changes.js?rev=946400&r1=946399&r2=946400&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/test/changes.js (original)
+++ couchdb/trunk/share/www/script/test/changes.js Wed May 19 21:14:28 2010
@@ -39,12 +39,18 @@ couchTests.changes = function(debug) {
   T(resp.results[0].changes[0].rev == docFoo._rev)
 
   // test with callback
-  var xhr = CouchDB.request("GET", "/test_suite_db/_changes?callback=jsonp");
-  T(xhr.status == 200);
-  jsonp_flag = 0;
-  eval(xhr.responseText);
-  T(jsonp_flag == 1);
-
+  
+  run_on_modified_server(
+    [{section: "httpd",
+      key: "jsonp",
+      value: "true"}],
+  function() {
+    var xhr = CouchDB.request("GET", "/test_suite_db/_changes?callback=jsonp");
+    T(xhr.status == 200);
+    jsonp_flag = 0;
+    eval(xhr.responseText);
+    T(jsonp_flag == 1);
+  });
 
   req = CouchDB.request("GET", "/test_suite_db/_changes?feed=continuous&timeout=10");
   var lines = req.responseText.split("\n");

Modified: couchdb/trunk/share/www/script/test/jsonp.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/jsonp.js?rev=946400&r1=946399&r2=946400&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/test/jsonp.js (original)
+++ couchdb/trunk/share/www/script/test/jsonp.js Wed May 19 21:14:28 2010
@@ -32,38 +32,51 @@ couchTests.jsonp = function(debug) {
   db.deleteDb();
   db.createDb();
   if (debug) debugger;
-
+  
   var doc = {_id:"0",a:0,b:0};
   T(db.save(doc).ok);
+  
+  // callback param is ignored unless jsonp is configured
+  var xhr = CouchDB.request("GET", "/test_suite_db/0?callback=jsonp_not_configured");
+  JSON.parse(xhr.responseText);
 
-  // Test unchunked callbacks.
-  var xhr = CouchDB.request("GET", "/test_suite_db/0?callback=jsonp_no_chunk");
-  T(xhr.status == 200);
-  jsonp_flag = 0;
-  eval(xhr.responseText);
-  T(jsonp_flag == 1);
-  xhr = CouchDB.request("GET", "/test_suite_db/0?callback=foo\"");
-  T(xhr.status == 400);
+  run_on_modified_server(
+    [{section: "httpd",
+      key: "jsonp",
+      value: "true"}],
+  function() {
 
-  // Test chunked responses
-  var doc = {_id:"1",a:1,b:1};
-  T(db.save(doc).ok);
+    // Test unchunked callbacks.
+    var xhr = CouchDB.request("GET", "/test_suite_db/0?callback=jsonp_no_chunk");
+    T(xhr.status == 200);
+    jsonp_flag = 0;
+    eval(xhr.responseText);
+    T(jsonp_flag == 1);
+    xhr = CouchDB.request("GET", "/test_suite_db/0?callback=foo\"");
+    T(xhr.status == 400);
+
+    // Test chunked responses
+    var doc = {_id:"1",a:1,b:1};
+    T(db.save(doc).ok);
 
-  var designDoc = {
-    _id:"_design/test",
-    language: "javascript",
-    views: {
-      all_docs: {map: "function(doc) {if(doc.a) emit(null, doc.a);}"}
+    var designDoc = {
+      _id:"_design/test",
+      language: "javascript",
+      views: {
+        all_docs: {map: "function(doc) {if(doc.a) emit(null, doc.a);}"}
+      }
     }
-  }
-  T(db.save(designDoc).ok);
+    T(db.save(designDoc).ok);
+
+    var url = "/test_suite_db/_design/test/_view/all_docs?callback=jsonp_chunk";
+    xhr = CouchDB.request("GET", url);
+    T(xhr.status == 200);
+    jsonp_flag = 0;
+    eval(xhr.responseText);
+    T(jsonp_flag == 1);
+    xhr = CouchDB.request("GET", url + "\'");
+    T(xhr.status == 400);
+  });
+
 
-  var url = "/test_suite_db/_design/test/_view/all_docs?callback=jsonp_chunk";
-  xhr = CouchDB.request("GET", url);
-  T(xhr.status == 200);
-  jsonp_flag = 0;
-  eval(xhr.responseText);
-  T(jsonp_flag == 1);
-  xhr = CouchDB.request("GET", url + "\'");
-  T(xhr.status == 400);
 };

Modified: couchdb/trunk/src/couchdb/couch_httpd.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd.erl?rev=946400&r1=946399&r2=946400&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_httpd.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd.erl Wed May 19 21:14:28 2010
@@ -593,8 +593,18 @@ start_jsonp(Req) ->
         [] -> [];
         CallBack ->
             try
-                validate_callback(CallBack),
-                CallBack ++ "("
+                % make sure jsonp is configured on (default off)
+                case couch_config:get("httpd", "jsonp", "false") of
+                "true" -> 
+                    validate_callback(CallBack),
+                    CallBack ++ "(";
+                _Else -> 
+                    % this could throw an error message, but instead we just ignore the 
+                    % jsonp parameter
+                    % throw({bad_request, <<"JSONP must be configured before using.">>})
+                    put(jsonp, no_jsonp),
+                    []
+                end
             catch
                 Error ->
                     put(jsonp, no_jsonp),