diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/couchdb/couch_httpd.erl | 39 | 
1 files changed, 22 insertions, 17 deletions
| diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl index 73d214e8..7c7781f6 100644 --- a/src/couchdb/couch_httpd.erl +++ b/src/couchdb/couch_httpd.erl @@ -764,24 +764,29 @@ error_headers(#httpd{mochi_req=MochiReq}=Req, Code, ErrorStr, ReasonStr) ->                              % send the browser popup header no matter what if we are require_valid_user                              {Code, [{"WWW-Authenticate", "Basic realm=\"server\""}]};                          _False -> -                            case MochiReq:accepts_content_type("text/html") of -                            false -> -                                {Code, []}; +                            case MochiReq:accepts_content_type("application/json") of                              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 -                                end, -                                RedirectLocation = lists:flatten([ -                                    AuthRedirect, -                                    "?return=", couch_util:url_encode(UrlReturnRaw), -                                    "&reason=", couch_util:url_encode(ReasonStr) -                                ]), -                                {302, [{"Location", absolute_uri(Req, RedirectLocation)}]} +                                {Code, []}; +                            false -> +                                case MochiReq:accepts_content_type("text/html") of +                                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 +                                    end, +                                    RedirectLocation = lists:flatten([ +                                        AuthRedirect, +                                        "?return=", couch_util:url_encode(UrlReturnRaw), +                                        "&reason=", couch_util:url_encode(ReasonStr) +                                    ]), +                                    {302, [{"Location", absolute_uri(Req, RedirectLocation)}]}; +                                false -> +                                    {Code, []} +                                end                              end                          end                      end; | 
