Fix message routing from subscribers

This commit is contained in:
Evgeniy Khramtsov 2016-09-08 16:39:34 +03:00
parent 6c943aa293
commit 36ab9cc2ea
1 changed files with 13 additions and 6 deletions

View File

@ -139,7 +139,8 @@ normal_state({route, From, <<"">>,
StateData) -> StateData) ->
Lang = fxml:get_attr_s(<<"xml:lang">>, Attrs), Lang = fxml:get_attr_s(<<"xml:lang">>, Attrs),
case is_user_online(From, StateData) orelse case is_user_online(From, StateData) orelse
is_user_allowed_message_nonparticipant(From, StateData) is_subscriber(From, StateData) orelse
is_user_allowed_message_nonparticipant(From, StateData)
of of
true -> true ->
case fxml:get_attr_s(<<"type">>, Attrs) of case fxml:get_attr_s(<<"type">>, Attrs) of
@ -527,7 +528,8 @@ normal_state({route, From, ToNick,
continue_delivery -> continue_delivery ->
case case
{(StateData#state.config)#config.allow_private_messages, {(StateData#state.config)#config.allow_private_messages,
is_user_online(From, StateData)} is_user_online(From, StateData) orelse
is_subscriber(From, StateData)}
of of
{true, true} -> {true, true} ->
case Type of case Type of
@ -562,9 +564,7 @@ normal_state({route, From, ToNick,
PmFromVisitors == anyone; PmFromVisitors == anyone;
(PmFromVisitors == moderators) and (PmFromVisitors == moderators) and
DstIsModerator -> DstIsModerator ->
{ok, #user{nick = FromNick}} = {FromNick, _} = get_participant_data(From, StateData),
(?DICT):find(jid:tolower(From),
StateData#state.users),
FromNickJID = FromNickJID =
jid:replace_resource(StateData#state.jid, jid:replace_resource(StateData#state.jid,
FromNick), FromNick),
@ -1067,7 +1067,14 @@ get_participant_data(From, StateData) ->
of of
{ok, #user{nick = FromNick, role = Role}} -> {ok, #user{nick = FromNick, role = Role}} ->
{FromNick, Role}; {FromNick, Role};
error -> {<<"">>, moderator} error ->
case ?DICT:find(jid:tolower(jid:remove_resource(From)),
StateData#state.subscribers) of
{ok, #subscriber{nick = FromNick}} ->
{FromNick, none};
error ->
{<<"">>, moderator}
end
end. end.
process_presence(From, Nick, process_presence(From, Nick,