]> granicus.if.org Git - ejabberd/commitdiff
Better error report when command is not exposed through API
authorMickael Remond <mremond@process-one.net>
Wed, 30 Mar 2016 13:59:29 +0000 (15:59 +0200)
committerMickael Remond <mremond@process-one.net>
Wed, 30 Mar 2016 13:59:29 +0000 (15:59 +0200)
src/mod_http_api.erl
test/mod_http_api_test.exs

index bbd4a28de635971b3f8b13682ecb0bf9d210ebcc..c2b7d110030967323e1ad8d7943480c0c994f045 100644 (file)
@@ -279,6 +279,7 @@ handle2(Call, Auth, Args) when is_atom(Call), is_list(Args) ->
         0 -> {200, <<"OK">>};
         1 -> {500, <<"500 Internal server error">>};
         400 -> {400, <<"400 Bad Request">>};
+        401 -> {401, <<"401 Unauthorized">>};
         404 -> {404, <<"404 Not found">>};
         Res -> format_command_result(Call, Auth, Res)
     end.
@@ -366,6 +367,7 @@ ejabberd_command(Auth, Cmd, Args, Default) ->
              end,
     case catch ejabberd_commands:execute_command(Access, Auth, Cmd, Args) of
         {'EXIT', _} -> Default;
+        {error, account_unprivileged} -> 401;
         {error, _} -> Default;
         Result -> Result
     end.
index adcb47061f7d4930c92ffae4289d4129823f412e..cc5aed5a87fd649f821cbd3c84c57c0aa1b1a2cd 100644 (file)
@@ -43,7 +43,15 @@ defmodule ModHttpApiTest do
     {200, _, _} = :mod_http_api.process(["open_cmd"], request)
   end
 
-  test "Call to user, admin, restricted commands without authentication are rejected" do
+  # This related to the commands config file option
+  test "Attempting to access a command that is not exposed as HTTP API returns 401" do
+    :ejabberd_config.add_local_option(:commands, [])
+    request = request(method: :POST, data: "[]")
+    {401, _, _} = :mod_http_api.process(["open_cmd"], request)
+  end
+
+  test "Call to user commands without authentication are rejected" do
+    :ejabberd_config.add_local_option(:commands, [[{:add_commands, [:user_cmd]}]])
     request = request(method: :POST, data: "[]")
     {401, _, _} = :mod_http_api.process(["user_cmd"], request)
   end