Mercurial > prosody-modules
comparison mod_muc_rtbl/mod_muc_rtbl.lua @ 5174:354832098f2f
mod_muc_rtbl: move use of "private" attributes to single function
This way, we reduce the scope where you can have a typo in the
attribute name to that function and we encourage users to
actually always call update_hashes.
| author | Jonas Schäfer <jonas@wielicki.name> |
|---|---|
| date | Tue, 21 Feb 2023 21:41:19 +0100 |
| parents | 460f78654864 |
| children | 432587ad1642 |
comparison
equal
deleted
inserted
replaced
| 5173:460f78654864 | 5174:354832098f2f |
|---|---|
| 90 end | 90 end |
| 91 | 91 |
| 92 module:hook("iq-result/host/rtbl-request", update_list); | 92 module:hook("iq-result/host/rtbl-request", update_list); |
| 93 | 93 |
| 94 function update_hashes(occupant) | 94 function update_hashes(occupant) |
| 95 local bare_hash, host_hash; | |
| 95 if not occupant.mod_muc_rtbl_bare_hash then | 96 if not occupant.mod_muc_rtbl_bare_hash then |
| 96 local bare_hash = sha256(jid.bare(event.stanza.attr.from), true); | 97 bare_hash = sha256(jid.bare(event.stanza.attr.from), true); |
| 97 occupant.mod_muc_rtbl_bare_hash = bare_hash; | 98 occupant.mod_muc_rtbl_bare_hash = bare_hash; |
| 99 else | |
| 100 bare_hash = occupant.mod_muc_rtbl_bare_hash; | |
| 98 end | 101 end |
| 99 if not occupant.mod_muc_rtbl_host_hash then | 102 if not occupant.mod_muc_rtbl_host_hash then |
| 100 local host_hash = sha256(jid.host(event.stanza.attr.from), true); | 103 host_hash = sha256(jid.host(event.stanza.attr.from), true); |
| 101 event.occupant.mod_muc_rtbl_host_hash = host_hash; | 104 event.occupant.mod_muc_rtbl_host_hash = host_hash; |
| 105 else | |
| 106 host_hash = event.occupant.mod_muc_rtbl_host_hash; | |
| 102 end | 107 end |
| 108 return bare_hash, host_hash | |
| 103 end | 109 end |
| 104 | 110 |
| 105 module:hook("muc-occupant-pre-join", function (event) | 111 module:hook("muc-occupant-pre-join", function (event) |
| 106 if next(banned_hashes) == nil then return end | 112 if next(banned_hashes) == nil then return end |
| 107 | 113 |
| 111 if affiliation and affiliation ~= "none" then | 117 if affiliation and affiliation ~= "none" then |
| 112 -- Skip check for affiliated users | 118 -- Skip check for affiliated users |
| 113 return; | 119 return; |
| 114 end | 120 end |
| 115 | 121 |
| 116 update_hashes(event.occupant); | 122 local bare_hash, host_hash = update_hashes(event.occupant); |
| 117 if banned_hashes[event.occupant.mod_muc_rtbl_bare_hash] or banned_hashes[event.occupant.mod_muc_rtbl_host_hash] then | 123 if banned_hashes[bare_hash] or banned_hashes[host_hash] then |
| 118 module:log("info", "Blocked user <%s> from room <%s> due to RTBL match", from_bare, event.stanza.attr.to); | 124 module:log("info", "Blocked user <%s> from room <%s> due to RTBL match", from_bare, event.stanza.attr.to); |
| 119 local error_reply = st.error_reply(event.stanza, "cancel", "forbidden", "You are banned from this service", event.room.jid); | 125 local error_reply = st.error_reply(event.stanza, "cancel", "forbidden", "You are banned from this service", event.room.jid); |
| 120 event.origin.send(error_reply); | 126 event.origin.send(error_reply); |
| 121 return true; | 127 return true; |
| 122 end | 128 end |
| 123 end); | 129 end); |
| 124 | 130 |
| 125 module:hook("muc-occupant-groupchat", function(event) | 131 module:hook("muc-occupant-groupchat", function(event) |
| 126 update_hashes(event.occupant); | 132 local bare_hash, host_hash = update_hashes(event.occupant); |
| 127 if banned_hashes[event.occupant.mod_muc_rtbl_bare_hash] or banned_hashes[event.occupant.mod_muc_rtbl_host_hash] then | 133 if banned_hashes[bare_hash] or banned_hashes[host_hash] then |
| 128 module:log("debug", "Blocked message from user <%s> to room <%s> due to RTBL match", event.stanza.attr.from, event.stanza.attr.to); | 134 module:log("debug", "Blocked message from user <%s> to room <%s> due to RTBL match", event.stanza.attr.from, event.stanza.attr.to); |
| 129 local error_reply = st.error_reply(event.stanza, "cancel", "forbidden", "You are banned from this service", event.room.jid); | 135 local error_reply = st.error_reply(event.stanza, "cancel", "forbidden", "You are banned from this service", event.room.jid); |
| 130 event.origin.send(error_reply); | 136 event.origin.send(error_reply); |
| 131 return true; | 137 return true; |
| 132 end | 138 end |
| 133 end); | 139 end); |
| 134 | 140 |
| 135 module:hook("muc-private-message", function(event) | 141 module:hook("muc-private-message", function(event) |
| 136 local occupant = event.room:get_occupant_by_nick(event.stanza.attr.from); | 142 local occupant = event.room:get_occupant_by_nick(event.stanza.attr.from); |
| 137 update_hashes(occupant); | 143 local bare_hash, host_hash = update_hashes(occupant); |
| 138 if banned_hashes[occupant.mod_muc_rtbl_bare_hash] or banned_hashes[occupant.mod_muc_rtbl_host_hash] then | 144 if banned_hashes[bare_hash] or banned_hashes[host_hash] then |
| 139 module:log("debug", "Blocked private message from user <%s> from room <%s> due to RTBL match", occupant.bare_jid, event.stanza.attr.to); | 145 module:log("debug", "Blocked private message from user <%s> from room <%s> due to RTBL match", occupant.bare_jid, event.stanza.attr.to); |
| 140 local error_reply = st.error_reply(event.stanza, "cancel", "forbidden", "You are banned from this service", event.room.jid); | 146 local error_reply = st.error_reply(event.stanza, "cancel", "forbidden", "You are banned from this service", event.room.jid); |
| 141 event.origin.send(error_reply); | 147 event.origin.send(error_reply); |
| 142 return true; | 148 return true; |
| 143 end | 149 end |
