From fb2603d3cdef98542f479764567b15c9c7777411 Mon Sep 17 00:00:00 2001 From: Mickael Remond Date: Sat, 30 Jul 2016 11:50:04 +0200 Subject: [PATCH] Return 409 conflict error code on register if user already exists --- src/ejabberd_admin.erl | 2 +- src/mod_http_api.erl | 34 ++++++++++++++++++---------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/ejabberd_admin.erl b/src/ejabberd_admin.erl index f20aeebf0..f40b99ea5 100644 --- a/src/ejabberd_admin.erl +++ b/src/ejabberd_admin.erl @@ -382,7 +382,7 @@ register(User, Host, Password) -> {atomic, exists} -> String = io_lib:format("User ~s@~s already registered at node ~p", [User, Host, node()]), - {exists, String}; + {conflict, String}; {error, Reason} -> String = io_lib:format("Can't register user ~s@~s at node ~p: ~p", [User, Host, node(), Reason]), diff --git a/src/mod_http_api.erl b/src/mod_http_api.erl index ba3a14cf8..f56a47666 100644 --- a/src/mod_http_api.erl +++ b/src/mod_http_api.erl @@ -444,22 +444,24 @@ ejabberd_command(Auth, Cmd, Args, Version, IP) -> format_command_result(Cmd, Auth, Result, Version) -> {_, ResultFormat} = ejabberd_commands:get_command_format(Cmd, Auth, Version), case {ResultFormat, Result} of - {{_, rescode}, V} when V == true; V == ok -> - {200, 0}; - {{_, rescode}, _} -> - {200, 1}; - {{_, restuple}, {V1, Text1}} when V1 == true; V1 == ok -> - {200, iolist_to_binary(Text1)}; - {{_, restuple}, {_, Text2}} -> - {500, iolist_to_binary(Text2)}; - {{_, {list, _}}, _V} -> - {_, L} = format_result(Result, ResultFormat), - {200, L}; - {{_, {tuple, _}}, _V} -> - {_, T} = format_result(Result, ResultFormat), - {200, T}; - _ -> - {200, {[format_result(Result, ResultFormat)]}} + {{_, rescode}, V} when V == true; V == ok -> + {200, 0}; + {{_, rescode}, _} -> + {200, 1}; + {{_, restuple}, {V, Text}} when V == true; V == ok -> + {200, iolist_to_binary(Text)}; + {{_, restuple}, {V, Text}} when V == conflict -> + {409, iolist_to_binary(Text)}; + {{_, restuple}, {_, Text2}} -> + {500, iolist_to_binary(Text2)}; + {{_, {list, _}}, _V} -> + {_, L} = format_result(Result, ResultFormat), + {200, L}; + {{_, {tuple, _}}, _V} -> + {_, T} = format_result(Result, ResultFormat), + {200, T}; + _ -> + {200, {[format_result(Result, ResultFormat)]}} end. format_result(Atom, {Name, atom}) ->