You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2014/02/06 18:32:18 UTC
[08/12] couch-httpd commit: updated refs/heads/import-rcouch to
5b12577
Move addition of qs params after normalization
This refactor executes normalize_path/1 before appending the bound query
string parameters.
COUCHDB-2031
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/e57f0a90
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/e57f0a90
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/e57f0a90
Branch: refs/heads/import-rcouch
Commit: e57f0a90717cef367b67a4fea8d13403eb5441df
Parents: 4c82f6a
Author: Adam Kocoloski <ad...@cloudant.com>
Authored: Sat Jan 18 00:31:49 2014 -0500
Committer: Paul J. Davis <pa...@gmail.com>
Committed: Thu Feb 6 11:31:04 2014 -0600
----------------------------------------------------------------------
src/couch_httpd_rewrite.erl | 58 +++++++++++++++++++---------------------
1 file changed, 27 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/e57f0a90/src/couch_httpd_rewrite.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_rewrite.erl b/src/couch_httpd_rewrite.erl
index 997992f..011c3c8 100644
--- a/src/couch_httpd_rewrite.erl
+++ b/src/couch_httpd_rewrite.erl
@@ -143,36 +143,32 @@ handle_rewrite_req(#httpd{
DispatchList = [make_rule(Rule) || {Rule} <- Rules],
Method1 = couch_util:to_binary(Method),
- %% get raw path by matching url to a rule.
- RawPath = case try_bind_path(DispatchList, Method1,
- PathParts, QueryList) of
- no_dispatch_path ->
- throw(not_found);
- {NewPathParts, Bindings} ->
- Parts = [quote_plus(X) || X <- NewPathParts],
-
- % build new path, reencode query args, eventually convert
- % them to json
- Bindings1 = maybe_encode_bindings(Bindings),
- Path = binary_to_list(
- iolist_to_binary([
- string:join(Parts, [?SEPARATOR]),
- [["?", mochiweb_util:urlencode(Bindings1)]
- || Bindings1 =/= [] ]
- ])),
-
- % if path is relative detect it and rewrite path
- case mochiweb_util:safe_relative_path(Path) of
- undefined ->
- ?b2l(Prefix) ++ "/" ++ Path;
- P1 ->
- ?b2l(Prefix) ++ "/" ++ P1
- end
-
- end,
-
- % normalize final path (fix levels "." and "..")
- RawPath1 = ?b2l(iolist_to_binary(normalize_path(RawPath))),
+ % get raw path by matching url to a rule. Throws not_found.
+ {NewPathParts0, Bindings0} =
+ try_bind_path(DispatchList, Method1, PathParts, QueryList),
+ NewPathParts = [quote_plus(X) || X <- NewPathParts0],
+ Bindings = maybe_encode_bindings(Bindings0),
+
+ Path0 = string:join(NewPathParts, [?SEPARATOR]),
+
+ % if path is relative detect it and rewrite path
+ Path1 = case mochiweb_util:safe_relative_path(Path0) of
+ undefined ->
+ ?b2l(Prefix) ++ "/" ++ Path0;
+ P1 ->
+ ?b2l(Prefix) ++ "/" ++ P1
+ end,
+
+ Path2 = normalize_path(Path1),
+
+ Path3 = case Bindings of
+ [] ->
+ Path2;
+ _ ->
+ [Path2, "?", mochiweb_util:urlencode(Bindings)]
+ end,
+
+ RawPath1 = ?b2l(iolist_to_binary(Path3)),
% In order to do OAuth correctly, we have to save the
% requested path. We use default so chained rewriting
@@ -216,7 +212,7 @@ quote_plus(X) ->
%% @doc Try to find a rule matching current url. If none is found
%% 404 error not_found is raised
try_bind_path([], _Method, _PathParts, _QueryList) ->
- no_dispatch_path;
+ throw(not_found);
try_bind_path([Dispatch|Rest], Method, PathParts, QueryList) ->
[{PathParts1, Method1}, RedirectPath, QueryArgs, Formats] = Dispatch,
case bind_method(Method1, Method) of