]> granicus.if.org Git - ejabberd/commitdiff
mod_pubsub: Improve PEP behavior for 'whitelist'
authorHolger Weiss <holger@zedat.fu-berlin.de>
Wed, 5 Dec 2018 17:25:40 +0000 (18:25 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Wed, 5 Dec 2018 17:25:40 +0000 (18:25 +0100)
If a PEP node's access_model is set to 'whitelist' (or 'authorize'),
send last PEP notifications to the node owner.

src/mod_pubsub.erl

index 3367c192ece27c60dc883615660cf19e6726d3d2..72edea9cec52358da2753a2a1f45ecefc4f97e19 100644 (file)
@@ -2990,6 +2990,7 @@ send_last_pep(From, To) ->
     Host = host(ServerHost),
     Publisher = jid:tolower(From),
     Owner = jid:remove_resource(Publisher),
+    RecipientIsOwner = jid:remove_resource(jid:tolower(To)) == Owner,
     lists:foreach(
       fun(#pubsub_node{nodeid = {_, Node}, type = Type, id = Nidx, options = Options}) ->
              case match_option(Options, send_last_published_item, on_sub_and_presence) of
@@ -2998,8 +2999,11 @@ send_last_pep(From, To) ->
                      Subscribed = case get_option(Options, access_model) of
                                       open -> true;
                                       presence -> true;
-                                      whitelist -> false; % subscribers are added manually
-                                      authorize -> false; % likewise
+                                      %% TODO: Fix the 'whitelist'/'authorize'
+                                      %% cases. Currently, only node owners
+                                      %% receive last PEP notifications.
+                                      whitelist -> RecipientIsOwner;
+                                      authorize -> RecipientIsOwner;
                                       roster ->
                                           Grps = get_option(Options, roster_groups_allowed, []),
                                           {OU, OS, _} = Owner,