diff options
Diffstat (limited to 'src/mod_configure.erl')
-rw-r--r-- | src/mod_configure.erl | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/mod_configure.erl b/src/mod_configure.erl index 95bf4e417..18cdbdc90 100644 --- a/src/mod_configure.erl +++ b/src/mod_configure.erl @@ -665,13 +665,16 @@ set_form(["config", "remusers"], Lang, XData) -> fun({Var, Vals}) -> case Vals of ["1"] -> - ejabberd_sm ! {route, {"", "", ""}, {Var, "", ""}, + ejabberd_sm ! {route, + jlib:make_jid("", "", ""), + jlib:make_jid(Var, "", ""), {xmlelement, "broadcast", [], [{exit, "User removed"}]}}, catch ejabberd_auth:remove_user(Var), catch mod_roster:remove_user(Var), catch mod_offline:remove_user(Var), - catch mod_vcard:remove_user(Var); + catch mod_vcard:remove_user(Var), + catch mod_private:remove_user(Var); _ -> ok end @@ -703,7 +706,7 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) -> deny -> {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]}; allow -> - {User, _, _} = To, + #jid{user = User} = To, Lang = xml:get_tag_attr_s("xml:lang", SubEl), case Type of set -> @@ -790,5 +793,24 @@ get_sm_form(_, _, Lang) -> {error, ?ERR_SERVICE_UNAVAILABLE}. +set_sm_form(User, [], Lang, XData) -> + case lists:keysearch("action", 1, XData) of + {value, {_, ["edit"]}} -> + {error, ?ERR_FEATURE_NOT_IMPLEMENTED}; + {value, {_, ["remove"]}} -> + ejabberd_sm ! {route, + jlib:make_jid("", "", ""), + jlib:make_jid(User, "", ""), + {xmlelement, "broadcast", [], + [{exit, "User removed"}]}}, + catch ejabberd_auth:remove_user(User), + catch mod_roster:remove_user(User), + catch mod_offline:remove_user(User), + catch mod_vcard:remove_user(User), + catch mod_private:remove_user(User), + {result, []}; + _ -> + {error, ?ERR_BAD_REQUEST} + end; set_sm_form(_, _, Lang, XData) -> {error, ?ERR_SERVICE_UNAVAILABLE}. |