diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-17 14:47:35 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-17 14:47:35 +0300 |
commit | f782955c069f1091cd56cc9d139ec0b0e2d62780 (patch) | |
tree | cbde7d13046bdc4bdc302511db04331b69d812e0 /src/mod_block_strangers.erl | |
parent | Fix use_cache/1 callback (diff) |
Implement cache for roster
Diffstat (limited to 'src/mod_block_strangers.erl')
-rw-r--r-- | src/mod_block_strangers.erl | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/src/mod_block_strangers.erl b/src/mod_block_strangers.erl index 6a4a96bf9..636d5077b 100644 --- a/src/mod_block_strangers.erl +++ b/src/mod_block_strangers.erl @@ -57,39 +57,40 @@ filter_packet({#message{} = Msg, State} = Acc) -> From = xmpp:get_from(Msg), LFrom = jid:tolower(From), LBFrom = jid:remove_resource(LFrom), - #{pres_a := PresA, - pres_t := PresT, - pres_f := PresF} = State, + #{pres_a := PresA, jid := JID, lserver := LServer} = State, case (Msg#message.body == [] andalso Msg#message.subject == []) orelse ejabberd_router:is_my_route(From#jid.lserver) orelse (?SETS):is_element(LFrom, PresA) orelse (?SETS):is_element(LBFrom, PresA) - orelse sets_bare_member(LBFrom, PresA) - orelse (?SETS):is_element(LFrom, PresT) - orelse (?SETS):is_element(LBFrom, PresT) - orelse (?SETS):is_element(LFrom, PresF) - orelse (?SETS):is_element(LBFrom, PresF) of - true -> - Acc; + orelse sets_bare_member(LBFrom, PresA) of false -> - #{lserver := LServer} = State, - Drop = gen_mod:get_module_opt(LServer, ?MODULE, drop, true), - Log = gen_mod:get_module_opt(LServer, ?MODULE, log, false), - if - Log -> - ?INFO_MSG("Drop packet: ~s", - [fxml:element_to_binary( - xmpp:encode(Msg, ?NS_CLIENT))]); - true -> - ok - end, - if - Drop -> - {stop, {drop, State}}; - true -> - Acc - end + {Sub, _} = ejabberd_hooks:run_fold( + roster_get_jid_info, LServer, + {none, []}, [JID#jid.luser, LServer, From]), + case Sub of + none -> + Drop = gen_mod:get_module_opt(LServer, ?MODULE, drop, true), + Log = gen_mod:get_module_opt(LServer, ?MODULE, log, false), + if + Log -> + ?INFO_MSG("Drop packet: ~s", + [fxml:element_to_binary( + xmpp:encode(Msg, ?NS_CLIENT))]); + true -> + ok + end, + if + Drop -> + {stop, {drop, State}}; + true -> + Acc + end; + _ -> + Acc + end; + true -> + Acc end; filter_packet(Acc) -> Acc. |