aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2019-08-22 17:12:52 +0200
committerBadlop <badlop@process-one.net>2019-08-22 17:13:18 +0200
commit12c4dfd955984ab2674bbe0d2cd672ce3db0e971 (patch)
tree4705d9b2dc453eff2c712e485f5b93468b1fe9b7 /src
parentCheck account auth provided in WebAdmin is a local host (#3000) (diff)
Provide meaningful error when adding non-local users to shared roster (#3000)
Diffstat (limited to 'src')
-rw-r--r--src/mod_shared_roster.erl25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl
index 47dffca80..55fa3ec11 100644
--- a/src/mod_shared_roster.erl
+++ b/src/mod_shared_roster.erl
@@ -542,8 +542,16 @@ is_user_in_group(US, Group, Host) ->
true
end.
-%% @spec (Host::string(), {User::string(), Server::string()}, Group::string()) -> {atomic, ok}
+%% @spec (Host::string(), {User::string(), Server::string()}, Group::string()) -> {atomic, ok} | error
add_user_to_group(Host, US, Group) ->
+ {_LUser, LServer} = US,
+ case lists:member(LServer, ejabberd_config:get_myhosts()) of
+ true -> add_user_to_group2(Host, US, Group);
+ false ->
+ ?INFO_MSG("Attempted adding to shared roster user of inexistent vhost ~s", [LServer]),
+ error
+ end.
+add_user_to_group2(Host, US, Group) ->
{LUser, LServer} = US,
case ejabberd_regexp:run(LUser, <<"^@.+@\$">>) of
match ->
@@ -871,6 +879,12 @@ shared_roster_group(Host, Group, Query, Lang) ->
[?XC(<<"h2">>, <<(translate:translate(Lang, ?T("Group ")))/binary, Group/binary>>)] ++
case Res of
ok -> [?XREST(?T("Submitted"))];
+ {error_jids, NonAddedList1} ->
+ NonAddedList2 = [jid:encode({U,S,<<>>}) || {U,S} <- NonAddedList1],
+ NonAddedList3 = str:join(NonAddedList2, <<", ">>),
+ NonAddedText1 = translate:translate(Lang, ?T("Members not added (inexistent vhost): ")),
+ NonAddedText2 = str:concat(NonAddedText1, NonAddedList3),
+ [?XRES(NonAddedText2)];
error -> [?XREST(?T("Bad format"))];
nothing -> []
end
@@ -951,12 +965,15 @@ shared_roster_group_parse_query(Host, Group, Query) ->
Group)
end,
RemovedMembers),
- lists:foreach(fun (US) ->
- mod_shared_roster:add_user_to_group(Host, US,
+ NonAddedMembers = lists:filter(fun (US) ->
+ error == mod_shared_roster:add_user_to_group(Host, US,
Group)
end,
AddedMembers),
- ok
+ case NonAddedMembers of
+ [] -> ok;
+ _ -> {error_jids, NonAddedMembers}
+ end
end;
_ -> nothing
end.