Mercurial > prosody-modules
comparison mod_slack_webhooks/mod_slack_webhooks.lua @ 3443:284d8c18060e
mod_slack_webhooks: Fix use with 0.11+ MUC API
Copied from mod_muc_badge
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 15 Jan 2019 16:41:58 +0100 |
| parents | 8c7b8b2c3237 |
| children | 724003f24308 |
comparison
equal
deleted
inserted
replaced
| 3442:05725785e3a6 | 3443:284d8c18060e |
|---|---|
| 4 -- | 4 -- |
| 5 -- This file is MIT/X11 licensed. | 5 -- This file is MIT/X11 licensed. |
| 6 | 6 |
| 7 module:depends"http" | 7 module:depends"http" |
| 8 | 8 |
| 9 local host_session = prosody.hosts[module.host]; | |
| 10 local msg = require "util.stanza".message; | 9 local msg = require "util.stanza".message; |
| 11 local jid = require "util.jid"; | 10 local jid = require "util.jid"; |
| 12 local now = require "util.datetime".datetime; | 11 local now = require "util.datetime".datetime; |
| 13 local json = require "util.json" | 12 local json = require "util.json" |
| 14 local formdecode = require "net.http".formdecode; | 13 local formdecode = require "net.http".formdecode; |
| 15 local http = require "net.http"; | 14 local http = require "net.http"; |
| 16 local dataform = require "util.dataforms"; | 15 local dataform = require "util.dataforms"; |
| 17 | 16 |
| 18 local function get_room_from_jid(mod_muc, room_jid) | 17 local mod_muc = module:depends"muc"; |
| 19 if mod_muc.get_room_from_jid then | 18 local rooms = rawget(mod_muc, "rooms"); |
| 20 return mod_muc.get_room_from_jid(room_jid); | 19 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or |
| 21 elseif mod_muc.rooms then | 20 function (room_jid) |
| 22 return mod_muc.rooms[room_jid]; -- COMPAT 0.9, 0.10 | 21 return rooms[room_jid]; |
| 23 end | 22 end |
| 24 end | |
| 25 | 23 |
| 26 local button_ns = "xmpp:prosody.im/community/mod_slack_webhooks#buttons"; | 24 local button_ns = "xmpp:prosody.im/community/mod_slack_webhooks#buttons"; |
| 27 local routing = module:get_option("outgoing_webhook_routing") or {}; | 25 local routing = module:get_option("outgoing_webhook_routing") or {}; |
| 28 local listen_path = module:get_option("incoming_webhook_path") or "/webhook"; | 26 local listen_path = module:get_option("incoming_webhook_path") or "/webhook"; |
| 29 local default_from_nick = module:get_option("incoming_webhook_default_nick") or "Bot"; | 27 local default_from_nick = module:get_option("incoming_webhook_default_nick") or "Bot"; |
| 32 module:log("debug", "HTTP result %d", code) | 30 module:log("debug", "HTTP result %d", code) |
| 33 end | 31 end |
| 34 | 32 |
| 35 function check_message(data) | 33 function check_message(data) |
| 36 local stanza = data.stanza; | 34 local stanza = data.stanza; |
| 37 local mod_muc = host_session.muc; | 35 |
| 38 if not mod_muc then return; end | 36 local this_room = get_room_from_jid(stanza.attr.to); |
| 39 | |
| 40 local this_room = get_room_from_jid(mod_muc, stanza.attr.to); | |
| 41 if not this_room then return; end -- no such room | 37 if not this_room then return; end -- no such room |
| 42 | 38 |
| 43 local from_room_jid = this_room._jid_nick[stanza.attr.from]; | 39 local from_room_jid = this_room._jid_nick[stanza.attr.from]; |
| 44 if not from_room_jid then return; end -- no such nick | 40 if not from_room_jid then return; end -- no such nick |
| 45 | 41 |
| 103 module:hook("message/bare", check_message, 10); | 99 module:hook("message/bare", check_message, 10); |
| 104 | 100 |
| 105 local function route_post(f) | 101 local function route_post(f) |
| 106 return function(event, path) | 102 return function(event, path) |
| 107 local bare_room = jid.join(path, module.host); | 103 local bare_room = jid.join(path, module.host); |
| 108 local mod_muc = host_session.muc; | 104 if not get_room_from_jid(bare_room) then |
| 109 if not get_room_from_jid(mod_muc, bare_room) then | |
| 110 module:log("warn", "mod_slack_webhook: invalid JID: %s", bare_room); | 105 module:log("warn", "mod_slack_webhook: invalid JID: %s", bare_room); |
| 111 return 404; | 106 return 404; |
| 112 end | 107 end |
| 113 -- Check secret? | 108 -- Check secret? |
| 114 return f(event, path) | 109 return f(event, path) |
| 115 end | 110 end |
| 116 end | 111 end |
| 117 | 112 |
| 118 local function handle_post(event, path) | 113 local function handle_post(event, path) |
| 119 local mod_muc = host_session.muc; | |
| 120 local request = event.request; | 114 local request = event.request; |
| 121 local headers = request.headers; | 115 local headers = request.headers; |
| 122 | 116 |
| 123 local body_type = headers.content_type; | 117 local body_type = headers.content_type; |
| 124 local post_body; | 118 local post_body; |
| 131 end | 125 end |
| 132 else | 126 else |
| 133 return 422; | 127 return 422; |
| 134 end | 128 end |
| 135 local bare_room = jid.join(path, module.host); | 129 local bare_room = jid.join(path, module.host); |
| 136 local dest_room = get_room_from_jid(mod_muc, bare_room); | 130 local dest_room = get_room_from_jid(bare_room); |
| 137 local from_nick = default_from_nick; | 131 local from_nick = default_from_nick; |
| 138 if post_body["username"] then | 132 if post_body["username"] then |
| 139 from_nick = post_body["username"]; | 133 from_nick = post_body["username"]; |
| 140 end | 134 end |
| 141 local sender = jid.join(path, module.host, from_nick); | 135 local sender = jid.join(path, module.host, from_nick); |
