You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by fd...@apache.org on 2010/12/01 18:48:07 UTC

svn commit: r1041103 - /couchdb/trunk/src/couchdb/couch_httpd.erl

Author: fdmanana
Date: Wed Dec  1 17:48:06 2010
New Revision: 1041103

URL: http://svn.apache.org/viewvc?rev=1041103&view=rev
Log:
Proper verification of the accepted content types plus some code cleaning.

Modified:
    couchdb/trunk/src/couchdb/couch_httpd.erl

Modified: couchdb/trunk/src/couchdb/couch_httpd.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd.erl?rev=1041103&r1=1041102&r2=1041103&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_httpd.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd.erl Wed Dec  1 17:48:06 2010
@@ -757,31 +757,24 @@ error_headers(#httpd{mochi_req=MochiReq}
                             % send the browser popup header no matter what if we are require_valid_user
                             {Code, [{"WWW-Authenticate", "Basic realm=\"server\""}]};
                         _False ->
-                            % if the accept header matches html, then do the redirect. else proceed as usual.
-                            Accepts = case MochiReq:get_header_value("Accept") of
-                            undefined ->
-                               % According to the HTTP 1.1 spec, if the Accept
-                               % header is missing, it means the client accepts
-                               % all media types.
-                               "html";
-                            Else ->
-                                Else
-                            end,
-                            case re:run(Accepts, "\\bhtml\\b",
-                                    [{capture, none}, caseless]) of
-                            nomatch ->
+                            case MochiReq:accepts_content_type("text/html") of
+                            false ->
                                 {Code, []};
-                            match ->
-                                AuthRedirectBin = ?l2b(AuthRedirect),
+                            true ->
                                 % Redirect to the path the user requested, not
                                 % the one that is used internally.
                                 UrlReturnRaw = case MochiReq:get_header_value("x-couchdb-vhost-path") of
-                                    undefined -> MochiReq:get(path);
-                                    VHostPath -> VHostPath
+                                undefined ->
+                                    MochiReq:get(path);
+                                VHostPath ->
+                                    VHostPath
                                 end,
-                                UrlReturn = ?l2b(couch_util:url_encode(UrlReturnRaw)),
-                                UrlReason = ?l2b(couch_util:url_encode(ReasonStr)),
-                                {302, [{"Location", couch_httpd:absolute_uri(Req, <<AuthRedirectBin/binary,"?return=",UrlReturn/binary,"&reason=",UrlReason/binary>>)}]}
+                                RedirectLocation = lists:flatten([
+                                    AuthRedirect,
+                                    "?return=", couch_util:url_encode(UrlReturnRaw),
+                                    "&reason=", couch_util:url_encode(ReasonStr)
+                                ]),
+                                {302, [{"Location", absolute_uri(Req, RedirectLocation)}]}
                             end
                         end
                     end;