diff options
author | Matthew Wild <mwild1@gmail.com> | 2021-11-12 13:26:05 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2021-11-12 13:26:05 +0000 |
commit | 1a64d5d876c401c2002c413d0ecf84c534196f81 (patch) | |
tree | 0916ea99a9470185036d69bd3e2a45274213e8a2 /plugins | |
parent | 3315a2f6164b5ed85e67bf61900c452fe23d2bc6 (diff) | |
download | prosody-1a64d5d876c401c2002c413d0ecf84c534196f81.tar.gz prosody-1a64d5d876c401c2002c413d0ecf84c534196f81.zip |
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.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mod_c2s.lua | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/plugins/mod_c2s.lua b/plugins/mod_c2s.lua index 298acc28..8a7c8306 100644 --- a/plugins/mod_c2s.lua +++ b/plugins/mod_c2s.lua @@ -239,27 +239,25 @@ local function session_close(session, reason) 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 |