Software /
code /
prosody-modules
Comparison
mod_client_management/mod_client_management.lua @ 5311:d4a0d2b5343a
mod_client_management: Add support for revoking client access via XMPP
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 06 Apr 2023 16:09:56 +0100 |
parent | 5310:5806e05346b8 |
child | 5312:22e6b9f09439 |
comparison
equal
deleted
inserted
replaced
5310:5806e05346b8 | 5311:d4a0d2b5343a |
---|---|
367 | 367 |
368 origin.send(reply); | 368 origin.send(reply); |
369 return true; | 369 return true; |
370 end); | 370 end); |
371 | 371 |
372 local revocation_errors = require "util.errors".init(module.name, xmlns_manage_clients, { | |
373 ["item-not-found"] = { "cancel", "item-not-found", "Client not found" }; | |
374 ["internal-server-error"] = { "wait", "internal-server-error", "Unable to revoke client access" }; | |
375 ["password-reset-required"] = { "cancel", "service-unavailable", "Password reset required", "password-reset-required" }; | |
376 }); | |
377 | |
378 module:hook("iq-set/self/xmpp:prosody.im/protocol/manage-clients:revoke", function (event) | |
379 local origin, stanza = event.origin, event.stanza; | |
380 | |
381 if not module:may(":manage-clients", event) then | |
382 origin.send(st.error_reply(stanza, "auth", "forbidden")); | |
383 return true; | |
384 end | |
385 | |
386 local client_id = stanza.tags[1].attr.id; | |
387 | |
388 local ok, err = revocation_errors.coerce(revoke_client_access(origin.username, client_id)); | |
389 if not ok then | |
390 origin.send(st.error_reply(stanza, err)); | |
391 return true; | |
392 end | |
393 | |
394 origin.send(st.reply(stanza)); | |
395 return true; | |
396 end); | |
397 | |
398 | |
372 -- Command | 399 -- Command |
373 | 400 |
374 module:once(function () | 401 module:once(function () |
375 local console_env = module:shared("/*/admin_shell/env"); | 402 local console_env = module:shared("/*/admin_shell/env"); |
376 if not console_env.user then return; end -- admin_shell probably not loaded | 403 if not console_env.user then return; end -- admin_shell probably not loaded |