diff options
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | share/www/script/test/rewrite.js | 20 | ||||
-rw-r--r-- | src/couchdb/couch_httpd_rewrite.erl | 7 |
4 files changed, 30 insertions, 3 deletions
@@ -10,6 +10,11 @@ Source Repository: * The source repository was migrated from SVN to Git. +HTTP Interface: + + * No longer rewrites the X-CouchDB-Requested-Path during recursive + calls to the rewriter. + Storage System: * Fixed unnecessary conflict when deleting and creating a @@ -18,6 +18,7 @@ This version has not been released yet. * Fixed unnecessary conflict when deleting and creating a document in the same batch. * New and updated passwords are hashed using PBKDF2. + * Fix various bugs in the URL rewriter when recursion is involved. Version 1.2.1 ------------- diff --git a/share/www/script/test/rewrite.js b/share/www/script/test/rewrite.js index 845429221..aaf8b69e9 100644 --- a/share/www/script/test/rewrite.js +++ b/share/www/script/test/rewrite.js @@ -437,4 +437,24 @@ couchTests.rewrite = function(debug) { var res = CouchDB.request("GET", "/test_suite_db/_design/invalid/_rewrite/foo"); TEquals(400, res.status, "should return 400"); + var ddoc_requested_path = { + _id: "_design/requested_path", + rewrites:[ + {"from": "show", "to": "_show/origin/0"}, + {"from": "show_rewritten", "to": "_rewrite/show"} + ], + shows: { + origin: stringFun(function(doc, req) { + return req.headers["x-couchdb-requested-path"]; + })} + }; + + db.save(ddoc_requested_path); + var url = "/test_suite_db/_design/requested_path/_rewrite/show"; + var res = CouchDB.request("GET", url); + TEquals(url, res.responseText, "should return the original url"); + + var url = "/test_suite_db/_design/requested_path/_rewrite/show_rewritten"; + var res = CouchDB.request("GET", url); + TEquals(url, res.responseText, "returned the original url"); } diff --git a/src/couchdb/couch_httpd_rewrite.erl b/src/couchdb/couch_httpd_rewrite.erl index c8cab85d7..cb164cd1f 100644 --- a/src/couchdb/couch_httpd_rewrite.erl +++ b/src/couchdb/couch_httpd_rewrite.erl @@ -165,9 +165,10 @@ handle_rewrite_req(#httpd{ % normalize final path (fix levels "." and "..") RawPath1 = ?b2l(iolist_to_binary(normalize_path(RawPath))), - % in order to do OAuth correctly, - % we have to save the requested path - Headers = mochiweb_headers:enter("x-couchdb-requested-path", + % In order to do OAuth correctly, we have to save the + % requested path. We use default so chained rewriting + % wont replace the original header. + Headers = mochiweb_headers:default("x-couchdb-requested-path", MochiReq:get(raw_path), MochiReq:get(headers)), |