Maybe return bad_content_type on _session POST
Currently, when POSTing to `/_session` with a Content-Type header
other than either `application/x-www-form-urlencoded` or
`application/json`, the error response can be surprising.
This changes the response to 415 `bad_content_type` when it's not one
of the above.
diff --git a/src/couch/src/couch_httpd_auth.erl b/src/couch/src/couch_httpd_auth.erl
index cc02a1e..c308549 100644
--- a/src/couch/src/couch_httpd_auth.erl
+++ b/src/couch/src/couch_httpd_auth.erl
@@ -459,7 +459,13 @@
Pairs
);
_ ->
- []
+ throw(
+ {bad_ctype, <<
+ "Content-Type must be "
+ "'application/x-www-form-urlencoded' or "
+ "'application/json'"
+ >>}
+ )
end,
UserName = ?l2b(extract_username(Form)),
Password = ?l2b(couch_util:get_value("password", Form, "")),
diff --git a/src/couch/test/eunit/couchdb_auth_tests.erl b/src/couch/test/eunit/couchdb_auth_tests.erl
index dfb22dc..bc5caab 100644
--- a/src/couch/test/eunit/couchdb_auth_tests.erl
+++ b/src/couch/test/eunit/couchdb_auth_tests.erl
@@ -34,6 +34,7 @@
Tests = [
fun should_return_username_on_post_to_session/2,
fun should_not_return_authenticated_field/2,
+ fun should_return_bad_content_type_appropriately/2,
fun should_return_list_of_handlers/2
],
RequireValidUserTests = [
@@ -85,6 +86,20 @@
end
).
+should_return_bad_content_type_appropriately(_PortType, Url) ->
+ ?_assertEqual(
+ <<"bad_content_type">>,
+ begin
+ {ok, 415, _, Body} = test_request:post(
+ Url,
+ [{"Content-Type", ""}],
+ []
+ ),
+ #{<<"error">> := Error} = jiffy:decode(Body, [return_maps]),
+ Error
+ end
+ ).
+
should_not_return_authenticated_field(_PortType, Url) ->
?_assertThrow(
{not_found, _},