From 94350ddb3a37f4aa253f25231b8dfbd38ae8a064 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Wed, 21 Dec 2011 16:20:59 +0200 Subject: [PATCH] Corrected mod_blocking hooks return value, activate "Blocked Contacts" privacy list after it is changed --- src/mod_blocking.erl | 54 ++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/mod_blocking.erl b/src/mod_blocking.erl index ea2c19cfb..00977e631 100644 --- a/src/mod_blocking.erl +++ b/src/mod_blocking.erl @@ -64,7 +64,7 @@ process_iq_get(_, From, _To, sub_el = {xmlelement, "blocklist", _, _}}, _) -> #jid{luser = LUser, lserver = LServer} = From, - process_blocklist_get(LUser, LServer); + {stop, process_blocklist_get(LUser, LServer)}; process_iq_get(Acc, _, _, _, _) -> Acc. @@ -72,20 +72,22 @@ process_iq_get(Acc, _, _, _, _) -> process_iq_set(_, From, _To, #iq{xmlns = ?NS_BLOCKING, sub_el = {xmlelement, SubElName, _, SubEls}}) -> #jid{luser = LUser, lserver = LServer} = From, - case {SubElName, xml:remove_cdata(SubEls)} of - {"block", []} -> - {error, ?ERR_BAD_REQUEST}; - {"block", Els} -> - JIDs = parse_blocklist_items(Els, []), - process_blocklist_block(LUser, LServer, JIDs); - {"unblock", []} -> - process_blocklist_unblock_all(LUser, LServer); - {"unblock", Els} -> - JIDs = parse_blocklist_items(Els, []), - process_blocklist_unblock(LUser, LServer, JIDs); - _ -> - {error, ?ERR_BAD_REQUEST} - end; + Res = + case {SubElName, xml:remove_cdata(SubEls)} of + {"block", []} -> + {error, ?ERR_BAD_REQUEST}; + {"block", Els} -> + JIDs = parse_blocklist_items(Els, []), + process_blocklist_block(LUser, LServer, JIDs); + {"unblock", []} -> + process_blocklist_unblock_all(LUser, LServer); + {"unblock", Els} -> + JIDs = parse_blocklist_items(Els, []), + process_blocklist_unblock(LUser, LServer, JIDs); + _ -> + {error, ?ERR_BAD_REQUEST} + end, + {stop, Res}; process_iq_set(Acc, _, _, _) -> Acc. @@ -196,9 +198,10 @@ process_blocklist_block(LUser, LServer, JIDs) -> {atomic, {error, _} = Error} -> Error; {atomic, {ok, Default, List}} -> + UserList = make_userlist(Default, List), broadcast_list_update(LUser, LServer, Default, List), broadcast_blocklist_event(LUser, LServer, {block, JIDs}), - {result, []}; + {result, [], UserList}; _ -> {error, ?ERR_INTERNAL_SERVER_ERROR} end. @@ -238,9 +241,10 @@ process_blocklist_unblock_all(LUser, LServer) -> {atomic, ok} -> {result, []}; {atomic, {ok, Default, List}} -> - broadcast_list_update(LUser, LServer, Default, List), + UserList = make_userlist(Default, List), + broadcast_list_update(LUser, LServer, Default, UserList), broadcast_blocklist_event(LUser, LServer, unblock_all), - {result, []}; + {result, [], UserList}; _ -> {error, ?ERR_INTERNAL_SERVER_ERROR} end. @@ -284,22 +288,24 @@ process_blocklist_unblock(LUser, LServer, JIDs) -> {atomic, ok} -> {result, []}; {atomic, {ok, Default, List}} -> - broadcast_list_update(LUser, LServer, Default, List), + UserList = make_userlist(Default, List), + broadcast_list_update(LUser, LServer, Default, UserList), broadcast_blocklist_event(LUser, LServer, {unblock, JIDs}), - {result, []}; + {result, [], UserList}; _ -> {error, ?ERR_INTERNAL_SERVER_ERROR} end. -broadcast_list_update(LUser, LServer, Name, List) -> +make_userlist(Name, List) -> NeedDb = is_list_needdb(List), + #userlist{name = Name, list = List, needdb = NeedDb}. + +broadcast_list_update(LUser, LServer, Name, UserList) -> ejabberd_router:route( jlib:make_jid(LUser, LServer, ""), jlib:make_jid(LUser, LServer, ""), {xmlelement, "broadcast", [], - [{privacy_list, - #userlist{name = Name, list = List, needdb = NeedDb}, - Name}]}). + [{privacy_list, UserList, Name}]}). broadcast_blocklist_event(LUser, LServer, Event) -> JID = jlib:make_jid(LUser, LServer, ""),