Software /
code /
prosody
Changeset
11899:6d06068363aa
mod_c2s: Disconnect user sessions on a role change event
The overlapping logic for deletion and password changed has been merged into
a single function.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 12 Nov 2021 13:26:05 +0000 |
parents | 11898:89aa591bb895 |
children | 11900:60676b607b6d |
files | plugins/mod_c2s.lua |
diffstat | 1 files changed, 16 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_c2s.lua Fri Nov 12 13:25:09 2021 +0000 +++ b/plugins/mod_c2s.lua Fri Nov 12 13:26:05 2021 +0000 @@ -239,27 +239,25 @@ end end -module:hook_global("user-deleted", function(event) - local username, host = event.username, event.host; - local user = hosts[host].sessions[username]; - if user and user.sessions then - for _, session in pairs(user.sessions) do - session:close{ condition = "not-authorized", text = "Account deleted" }; - end - end -end, 200); - -module:hook_global("user-password-changed", function(event) - local username, host, resource = event.username, event.host, event.resource; - local user = hosts[host].sessions[username]; - if user and user.sessions then - for r, session in pairs(user.sessions) do - if r ~= resource then - session:close{ condition = "reset", text = "Password changed" }; +-- Close all user sessions with the specified reason. If leave_resource is +-- true, the resource named by event.resource will not be closed. +local function disconnect_user_sessions(reason, leave_resource) + return function (event) + local username, host, resource = event.username, event.host, event.resource; + local user = hosts[host].sessions[username]; + if user and user.sessions then + for r, session in pairs(user.sessions) do + if not leave_resource or r ~= resource then + session:close(reason); + end end end end -end, 200); +end + +module:hook_global("user-password-changed", disconnect_user_sessions({ condition = "reset", text = "Password changed" }, true), 200); +module:hook_global("user-roles-changed", disconnect_user_sessions({ condition = "reset", text = "Roles changed" }), 200); +module:hook_global("user-deleted", disconnect_user_sessions({ condition = "not-authorized", text = "Account deleted" }), 200); function runner_callbacks:ready() if self.data.conn then