From 5fa79a85bcb2eea059fd948e89433965f8160b1f Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Mon, 4 Jul 2011 14:35:13 +0000 Subject: Backport r1142685 from trunk: Allow "/" as vhost target. Includes a one-line whitespace fix. git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1142689 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_httpd_vhost.erl | 8 ++++++-- test/etap/160-vhosts.t | 14 +++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/couchdb/couch_httpd_vhost.erl b/src/couchdb/couch_httpd_vhost.erl index 9bfb5951..a9517600 100644 --- a/src/couchdb/couch_httpd_vhost.erl +++ b/src/couchdb/couch_httpd_vhost.erl @@ -216,15 +216,19 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}. +append_path("/"=_Target, "/"=_Path) -> + "/"; +append_path(Target, Path) -> + Target ++ Path. % default redirect vhost handler redirect_to_vhost(MochiReq, VhostTarget) -> Path = MochiReq:get(raw_path), - Target = VhostTarget ++ Path, + Target = append_path(VhostTarget, Path), ?LOG_DEBUG("Vhost Target: '~p'~n", [Target]), - + Headers = mochiweb_headers:enter("x-couchdb-vhost-path", Path, MochiReq:get(headers)), diff --git a/test/etap/160-vhosts.t b/test/etap/160-vhosts.t index 8dac53e5..4bb8e926 100755 --- a/test/etap/160-vhosts.t +++ b/test/etap/160-vhosts.t @@ -52,7 +52,7 @@ admin_user_ctx() -> {user_ctx, #user_ctx{roles=[<<"_admin">>]}}. main(_) -> test_util:init_code_path(), - etap:plan(14), + etap:plan(15), case (catch test()) of ok -> etap:end_tests(); @@ -115,6 +115,7 @@ test() -> ok = couch_config:set("vhosts", "*.example2.com/test", "/*", false), ok = couch_config:set("vhosts", "*/test1", "/etap-test-db/_design/doc1/_show/test", false), + ok = couch_config:set("vhosts", "example3.com", "/", false), % let couch_httpd restart timer:sleep(100), @@ -133,6 +134,7 @@ test() -> test_vhost_request_path1(), test_vhost_request_path2(), test_vhost_request_path3(), + test_vhost_request_to_root(), %% restart boilerplate couch_db:close(Db), @@ -289,3 +291,13 @@ test_vhost_request_path3() -> end, true, <<"path in req ok">>); _Else -> etap:is(false, true, <<"ibrowse fail">>) end. + +test_vhost_request_to_root() -> + Uri = server(), + case ibrowse:send_req(Uri, [], get, [], []) of + {ok, _, _, Body} -> + {JsonBody} = couch_util:json_decode(Body), + HasCouchDBWelcome = proplists:is_defined(<<"couchdb">>, JsonBody), + etap:is(HasCouchDBWelcome, true, "should allow redirect to /"); + _Else -> etap:is(false, true, <<"ibrowse fail">>) + end. -- cgit v1.2.3