24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-02 21:17:12 +02:00

Corrected mod_blocking hooks return value, activate "Blocked Contacts" privacy list after it is changed

This commit is contained in:
Alexey Shchepin 2011-12-21 16:20:59 +02:00
parent 919cdc27db
commit 94350ddb3a

View File

@ -64,7 +64,7 @@ process_iq_get(_, From, _To,
sub_el = {xmlelement, "blocklist", _, _}}, sub_el = {xmlelement, "blocklist", _, _}},
_) -> _) ->
#jid{luser = LUser, lserver = LServer} = From, #jid{luser = LUser, lserver = LServer} = From,
process_blocklist_get(LUser, LServer); {stop, process_blocklist_get(LUser, LServer)};
process_iq_get(Acc, _, _, _, _) -> process_iq_get(Acc, _, _, _, _) ->
Acc. Acc.
@ -72,20 +72,22 @@ process_iq_get(Acc, _, _, _, _) ->
process_iq_set(_, From, _To, #iq{xmlns = ?NS_BLOCKING, process_iq_set(_, From, _To, #iq{xmlns = ?NS_BLOCKING,
sub_el = {xmlelement, SubElName, _, SubEls}}) -> sub_el = {xmlelement, SubElName, _, SubEls}}) ->
#jid{luser = LUser, lserver = LServer} = From, #jid{luser = LUser, lserver = LServer} = From,
case {SubElName, xml:remove_cdata(SubEls)} of Res =
{"block", []} -> case {SubElName, xml:remove_cdata(SubEls)} of
{error, ?ERR_BAD_REQUEST}; {"block", []} ->
{"block", Els} -> {error, ?ERR_BAD_REQUEST};
JIDs = parse_blocklist_items(Els, []), {"block", Els} ->
process_blocklist_block(LUser, LServer, JIDs); JIDs = parse_blocklist_items(Els, []),
{"unblock", []} -> process_blocklist_block(LUser, LServer, JIDs);
process_blocklist_unblock_all(LUser, LServer); {"unblock", []} ->
{"unblock", Els} -> process_blocklist_unblock_all(LUser, LServer);
JIDs = parse_blocklist_items(Els, []), {"unblock", Els} ->
process_blocklist_unblock(LUser, LServer, JIDs); JIDs = parse_blocklist_items(Els, []),
_ -> process_blocklist_unblock(LUser, LServer, JIDs);
{error, ?ERR_BAD_REQUEST} _ ->
end; {error, ?ERR_BAD_REQUEST}
end,
{stop, Res};
process_iq_set(Acc, _, _, _) -> process_iq_set(Acc, _, _, _) ->
Acc. Acc.
@ -196,9 +198,10 @@ process_blocklist_block(LUser, LServer, JIDs) ->
{atomic, {error, _} = Error} -> {atomic, {error, _} = Error} ->
Error; Error;
{atomic, {ok, Default, List}} -> {atomic, {ok, Default, List}} ->
UserList = make_userlist(Default, List),
broadcast_list_update(LUser, LServer, Default, List), broadcast_list_update(LUser, LServer, Default, List),
broadcast_blocklist_event(LUser, LServer, {block, JIDs}), broadcast_blocklist_event(LUser, LServer, {block, JIDs}),
{result, []}; {result, [], UserList};
_ -> _ ->
{error, ?ERR_INTERNAL_SERVER_ERROR} {error, ?ERR_INTERNAL_SERVER_ERROR}
end. end.
@ -238,9 +241,10 @@ process_blocklist_unblock_all(LUser, LServer) ->
{atomic, ok} -> {atomic, ok} ->
{result, []}; {result, []};
{atomic, {ok, Default, List}} -> {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), broadcast_blocklist_event(LUser, LServer, unblock_all),
{result, []}; {result, [], UserList};
_ -> _ ->
{error, ?ERR_INTERNAL_SERVER_ERROR} {error, ?ERR_INTERNAL_SERVER_ERROR}
end. end.
@ -284,22 +288,24 @@ process_blocklist_unblock(LUser, LServer, JIDs) ->
{atomic, ok} -> {atomic, ok} ->
{result, []}; {result, []};
{atomic, {ok, Default, List}} -> {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}), broadcast_blocklist_event(LUser, LServer, {unblock, JIDs}),
{result, []}; {result, [], UserList};
_ -> _ ->
{error, ?ERR_INTERNAL_SERVER_ERROR} {error, ?ERR_INTERNAL_SERVER_ERROR}
end. end.
broadcast_list_update(LUser, LServer, Name, List) -> make_userlist(Name, List) ->
NeedDb = is_list_needdb(List), NeedDb = is_list_needdb(List),
#userlist{name = Name, list = List, needdb = NeedDb}.
broadcast_list_update(LUser, LServer, Name, UserList) ->
ejabberd_router:route( ejabberd_router:route(
jlib:make_jid(LUser, LServer, ""), jlib:make_jid(LUser, LServer, ""),
jlib:make_jid(LUser, LServer, ""), jlib:make_jid(LUser, LServer, ""),
{xmlelement, "broadcast", [], {xmlelement, "broadcast", [],
[{privacy_list, [{privacy_list, UserList, Name}]}).
#userlist{name = Name, list = List, needdb = NeedDb},
Name}]}).
broadcast_blocklist_event(LUser, LServer, Event) -> broadcast_blocklist_event(LUser, LServer, Event) ->
JID = jlib:make_jid(LUser, LServer, ""), JID = jlib:make_jid(LUser, LServer, ""),