diff options
Diffstat (limited to 'src/mod_privilege.erl')
-rw-r--r-- | src/mod_privilege.erl | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/mod_privilege.erl b/src/mod_privilege.erl index c65119d4c..c320afd57 100644 --- a/src/mod_privilege.erl +++ b/src/mod_privilege.erl @@ -36,7 +36,7 @@ -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -export([component_connected/1, component_disconnected/2, - roster_access/2, process_message/3, + roster_access/2, process_message/1, process_presence_out/1, process_presence_in/1]). -include("ejabberd.hrl"). @@ -80,10 +80,10 @@ component_disconnected(Host, _Reason) -> gen_server:cast(Proc, {component_disconnected, Host}) end, ?MYHOSTS). --spec process_message(jid(), jid(), stanza()) -> stop | ok. -process_message(#jid{luser = <<"">>, lresource = <<"">>} = From, - #jid{lresource = <<"">>} = To, - #message{lang = Lang, type = T} = Msg) when T /= error -> +-spec process_message(stanza()) -> stop | ok. +process_message(#message{from = #jid{luser = <<"">>, lresource = <<"">>} = From, + to = #jid{lresource = <<"">>} = To, + lang = Lang, type = T} = Msg) when T /= error -> Host = From#jid.lserver, ServerHost = To#jid.lserver, Permissions = get_permissions(ServerHost), @@ -91,18 +91,18 @@ process_message(#jid{luser = <<"">>, lresource = <<"">>} = From, {ok, Access} -> case proplists:get_value(message, Access, none) of outgoing -> - forward_message(From, To, Msg); + forward_message(Msg); none -> Txt = <<"Insufficient privilege">>, Err = xmpp:err_forbidden(Txt, Lang), - ejabberd_router:route_error(To, From, Msg, Err) + ejabberd_router:route_error(Msg, Err) end, stop; error -> %% Component is disconnected ok end; -process_message(_From, _To, _Stanza) -> +process_message(_Stanza) -> ok. -spec roster_access(boolean(), iq()) -> boolean(). @@ -137,7 +137,7 @@ process_presence_out({#presence{ if Permission == roster; Permission == managed_entity -> To = jid:make(Host), ejabberd_router:route( - From, To, xmpp:set_from_to(Pres, From, To)); + xmpp:set_from_to(Pres, From, To)); true -> ok end @@ -162,7 +162,7 @@ process_presence_in({#presence{ if Permission == both; Permission == get -> To = jid:make(Host), ejabberd_router:route( - From, To, xmpp:set_from_to(Pres, From, To)); + xmpp:set_from_to(Pres, From, To)); true -> ok end; @@ -218,7 +218,7 @@ handle_cast({component_connected, Host}, State) -> "message = ~s", [Host, RosterPerm, PresencePerm, MessagePerm]), Msg = #message{from = From, to = To, sub_els = [Priv]}, - ejabberd_router:route(From, To, Msg), + ejabberd_router:route(Msg), Permissions = dict:store(Host, [{roster, RosterPerm}, {presence, PresencePerm}, {message, MessagePerm}], @@ -267,7 +267,7 @@ get_permissions(ServerHost) -> dict:new() end. -forward_message(From, To, Msg) -> +forward_message(#message{to = To} = Msg) -> ServerHost = To#jid.lserver, Lang = xmpp:get_lang(Msg), case xmpp:get_subtag(Msg, #privilege{}) of @@ -276,27 +276,26 @@ forward_message(From, To, Msg) -> #message{} = NewMsg -> case NewMsg#message.from of #jid{lresource = <<"">>, lserver = ServerHost} -> - ejabberd_router:route( - xmpp:get_from(NewMsg), xmpp:get_to(NewMsg), NewMsg); + ejabberd_router:route(NewMsg); _ -> Lang = xmpp:get_lang(Msg), Txt = <<"Invalid 'from' attribute in forwarded message">>, Err = xmpp:err_forbidden(Txt, Lang), - ejabberd_router:route_error(To, From, Msg, Err) + ejabberd_router:route_error(Msg, Err) end; _ -> Txt = <<"Message not found in forwarded payload">>, Err = xmpp:err_bad_request(Txt, Lang), - ejabberd_router:route_error(To, From, Msg, Err) + ejabberd_router:route_error(Msg, Err) catch _:{xmpp_codec, Why} -> Txt = xmpp:format_error(Why), Err = xmpp:err_bad_request(Txt, Lang), - ejabberd_router:route_error(To, From, Msg, Err) + ejabberd_router:route_error(Msg, Err) end; _ -> Txt = <<"Invalid <forwarded/> element">>, Err = xmpp:err_bad_request(Txt, Lang), - ejabberd_router:route_error(To, From, Msg, Err) + ejabberd_router:route_error(Msg, Err) end. get_roster_permission(ServerHost, Host) -> |