From 0e93f70e386d1513c1809f38352053ee289cce14 Mon Sep 17 00:00:00 2001 From: Robert Schuh Date: Thu, 8 Apr 2021 16:33:54 +0200 Subject: [PATCH] allow shared roster group placeholder in mqtt topic --- src/acl.erl | 1 + src/mod_mqtt.erl | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/acl.erl b/src/acl.erl index 64a88269b..5db79eba9 100644 --- a/src/acl.erl +++ b/src/acl.erl @@ -25,6 +25,7 @@ -export([match_rules/4, match_acls/3]). -export([access_rules_validator/0, access_validator/0]). -export([validator/1, validators/0]). +-export([loaded_shared_roster_module/1]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). diff --git a/src/mod_mqtt.erl b/src/mod_mqtt.erl index 24d033892..8734c778d 100644 --- a/src/mod_mqtt.erl +++ b/src/mod_mqtt.erl @@ -600,6 +600,23 @@ match([H|T1], [<<"%c">>|T2], U, S, R) -> R -> match(T1, T2, U, S, R); _ -> false end; +match([H|T1], [<<"%g">>|T2], U, S, R) -> + case jid:resourceprep(H) of + H -> + case acl:loaded_shared_roster_module(S) of + undefined -> false; + Mod -> + case Mod:get_group_opts(S, H) of + error -> false; + _ -> + case Mod:is_user_in_group({U, S}, H, S) of + true -> match(T1, T2, U, S, R); + _ -> false + end + end + end; + _ -> false + end; match([H|T1], [H|T2], U, S, R) -> match(T1, T2, U, S, R); match([], [], _, _, _) ->