MUC: Hide new MUC room storage format behind an off-by-default option
[prosody.git] / plugins / muc / muc.lib.lua
index baa72a56f6da07648e8445581737c86377942797..ac8ebaddfb746525a9cb3747511e62bec844e8f8 100644 (file)
@@ -872,7 +872,8 @@ function room_mt:handle_admin_query_get_command(origin, stanza)
                -- You need to be at least an admin, and be requesting info about your affifiliation or lower
                -- e.g. an admin can't ask for a list of owners
                local affiliation_rank = valid_affiliations[affiliation or "none"];
-               if affiliation_rank >= valid_affiliations.admin and affiliation_rank >= _aff_rank then
+               if affiliation_rank >= valid_affiliations.admin and affiliation_rank >= _aff_rank
+               or self:get_members_only() and self:get_whois() == "anyone" and affiliation_rank >= valid_affiliations.member then
                        local reply = st.reply(stanza):query("http://jabber.org/protocol/muc#admin");
                        for jid in self:each_affiliation(_aff or "none") do
                                reply:tag("item", {affiliation = _aff, jid = jid}):up();
@@ -1303,13 +1304,24 @@ function _M.new_room(jid, config)
        }, room_mt);
 end
 
+local new_format = module:get_option_boolean("new_muc_storage_format", false);
+
 function room_mt:freeze(live)
-       local frozen, state = {
-               _jid = self.jid;
-               _data = self._data;
-       };
-       for user, affiliation in pairs(self._affiliations) do
-               frozen[user] = affiliation;
+       local frozen, state;
+       if new_format then
+               frozen = {
+                       _jid = self.jid;
+                       _data = self._data;
+               };
+               for user, affiliation in pairs(self._affiliations) do
+                       frozen[user] = affiliation;
+               end
+       else
+               frozen = {
+                       jid = self.jid;
+                       _data = self._data;
+                       _affiliations = self._affiliations;
+               };
        end
        if live then
                state = {};