Mercurial > prosody-modules
annotate mod_slack_webhooks/mod_slack_webhooks.lua @ 3146:662423cea3f4
mod_slack_webhooks: Add support for buttons
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 03 Jun 2018 02:02:51 +0200 |
parents | c7f4e3987ed0 |
children | 82689acd1294 |
rev | line source |
---|---|
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
1 -- Allow Slack-style incoming and outgoing hooks to MUC rooms |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
2 -- Based on mod_muc_intercom and mod_post_msg |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
3 -- Copyright 2016-2017 Nathan Whitehorn <nwhitehorn@physics.ucla.edu> |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
4 -- |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
5 -- This file is MIT/X11 licensed. |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
6 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
7 module:depends"http" |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
8 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
9 local host_session = prosody.hosts[module.host]; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
10 local msg = require "util.stanza".message; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
11 local jid = require "util.jid"; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
12 local now = require "util.datetime".datetime; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
13 local json = require "util.json" |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
14 local formdecode = require "net.http".formdecode; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
15 local http = require "net.http"; |
3146
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
16 local dataform = require "util.dataforms"; |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
17 |
3093
7ed0589eff3c
mod_slack_webhooks: Rename variables no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3092
diff
changeset
|
18 local function get_room_from_jid(mod_muc, room_jid) |
3071
b6cac9d72255
mod_slack_webhooks: Use the correct MUC API
Kim Alvefur <zash@zash.se>
parents:
3000
diff
changeset
|
19 if mod_muc.get_room_from_jid then |
3093
7ed0589eff3c
mod_slack_webhooks: Rename variables no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3092
diff
changeset
|
20 return mod_muc.get_room_from_jid(room_jid); |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
21 elseif mod_muc.rooms then |
3093
7ed0589eff3c
mod_slack_webhooks: Rename variables no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3092
diff
changeset
|
22 return mod_muc.rooms[room_jid]; -- COMPAT 0.9, 0.10 |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
23 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
24 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
25 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
26 local routing = module:get_option("outgoing_webhook_routing") or {}; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
27 local listen_path = module:get_option("incoming_webhook_path") or "/webhook"; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
28 local default_from_nick = module:get_option("incoming_webhook_default_nick") or "Bot"; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
29 |
3092
0f63e999d0e4
mod_slack_webhooks: Remove unused locals [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3071
diff
changeset
|
30 function postcallback(_, code) |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
31 module:log("debug", "HTTP result %d", code) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
32 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
33 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
34 function check_message(data) |
3092
0f63e999d0e4
mod_slack_webhooks: Remove unused locals [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3071
diff
changeset
|
35 local stanza = data.stanza; |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
36 local mod_muc = host_session.muc; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
37 if not mod_muc then return; end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
38 |
3071
b6cac9d72255
mod_slack_webhooks: Use the correct MUC API
Kim Alvefur <zash@zash.se>
parents:
3000
diff
changeset
|
39 local this_room = get_room_from_jid(mod_muc, stanza.attr.to); |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
40 if not this_room then return; end -- no such room |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
41 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
42 local from_room_jid = this_room._jid_nick[stanza.attr.from]; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
43 if not from_room_jid then return; end -- no such nick |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
44 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
45 local from_room, from_host, from_nick = jid.split(from_room_jid); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
46 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
47 local body = stanza:get_child("body"); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
48 if not body then return; end -- No body, like topic changes |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
49 body = body and body:get_text(); -- I feel like I want to do `or ""` there :/ |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
50 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
51 if not routing[from_room] then |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
52 return; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
53 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
54 |
3094
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
55 local json_out = { |
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
56 channel_name = from_room, |
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
57 timestamp = now(), |
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
58 text = body, |
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
59 team_domain = from_host, |
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
60 user_name = from_nick, |
39d714abbc2b
mod_slack_webhooks: Split long line to improve readability [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3093
diff
changeset
|
61 }; |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
62 local stanzaid = stanza:get_child("id"); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
63 if stanzaid and string.sub(stanzaid,1,string.len("webhookbot"))=="webhookbot" then |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
64 json_out["bot_id"] = "webhookbot"; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
65 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
66 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
67 json_out = json.encode(json_out) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
68 local url = routing[from_room]; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
69 module:log("debug", "message from %s in %s to %s", from_nick, from_room, url); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
70 local headers = { |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
71 ["Content-Type"] = "application/json", |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
72 }; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
73 http.request(url, { method = "POST", body = json_out, headers = headers }, postcallback) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
74 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
75 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
76 module:hook("message/bare", check_message, 10); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
77 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
78 local function route_post(f) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
79 return function(event, path) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
80 local bare_room = jid.join(path, module.host); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
81 local mod_muc = host_session.muc; |
3071
b6cac9d72255
mod_slack_webhooks: Use the correct MUC API
Kim Alvefur <zash@zash.se>
parents:
3000
diff
changeset
|
82 if not get_room_from_jid(mod_muc, bare_room) then |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
83 module:log("warn", "mod_slack_webhook: invalid JID: %s", bare_room); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
84 return 404; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
85 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
86 -- Check secret? |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
87 return f(event, path) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
88 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
89 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
90 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
91 local function handle_post(event, path) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
92 local mod_muc = host_session.muc; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
93 local request = event.request; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
94 local headers = request.headers; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
95 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
96 local body_type = headers.content_type; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
97 local post_body; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
98 if body_type == "application/x-www-form-urlencoded" then |
3096
420391fd56e5
mod_slack_webhooks: Fix handling of form-urlencoded
Kim Alvefur <zash@zash.se>
parents:
3095
diff
changeset
|
99 post_body = formdecode(request.body); |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
100 elseif body_type == "application/json" then |
3097
c7f4e3987ed0
mod_slack_webhooks: Fix error handling for JSON parsing
Kim Alvefur <zash@zash.se>
parents:
3096
diff
changeset
|
101 post_body = json.decode(request.body) |
c7f4e3987ed0
mod_slack_webhooks: Fix error handling for JSON parsing
Kim Alvefur <zash@zash.se>
parents:
3096
diff
changeset
|
102 if not post_body then |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
103 return 420; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
104 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
105 else |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
106 return 422; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
107 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
108 local bare_room = jid.join(path, module.host); |
3071
b6cac9d72255
mod_slack_webhooks: Use the correct MUC API
Kim Alvefur <zash@zash.se>
parents:
3000
diff
changeset
|
109 local dest_room = get_room_from_jid(mod_muc, bare_room); |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
110 local from_nick = default_from_nick; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
111 if post_body["username"] then |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
112 from_nick = post_body["username"]; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
113 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
114 local sender = jid.join(path, module.host, from_nick); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
115 module:log("debug", "message to %s from %s", bare_room, sender); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
116 module:log("debug", "body: %s", post_body["text"]); |
3095
3a6a48b83b4f
mod_slack_webhooks: Reduce scope of variable
Kim Alvefur <zash@zash.se>
parents:
3094
diff
changeset
|
117 local message = msg({ to = bare_room, from = sender, type = "groupchat", id="webhookbot" .. now()},post_body["text"]); |
3146
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
118 |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
119 if type(post_body["attachments"]) == "table" then -- Buttons? |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
120 -- luacheck: ignore 631 |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
121 -- defensive against JSON having whatever data in it, enjoy |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
122 |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
123 for _, attachment in ipairs(post_body["attachments"]) do |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
124 if type(attachment) == "table" and type(attachment.actions) == "table" and type(attachment.callback_id) == "string" then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
125 local buttons = {}; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
126 local button_name; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
127 for _, action in ipairs(attachment.actions) do |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
128 if type(attachment.text) == "string" then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
129 buttons.label = attachment.text; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
130 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
131 if type(action) == "table" and action.type == "button" and type(action.name) == "string" and type(action.value) == "string" then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
132 if not button_name then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
133 button_name = action.name; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
134 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
135 if button_name == action.name then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
136 local button = { |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
137 value = action.value; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
138 }; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
139 if type(action.text) == "string" then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
140 button.label = action.text; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
141 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
142 table.insert(buttons, button); |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
143 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
144 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
145 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
146 if button_name then |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
147 message:add_direct_child(dataform.new({ |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
148 { |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
149 type = "hidden", name = "FORM_TYPE", |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
150 value = "xmpp:prosody.im/community/mod_slack_webhooks#buttons", |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
151 }, |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
152 { |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
153 type = "hidden", name = "callback_id", |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
154 value = attachment.callback_id, |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
155 }, |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
156 { |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
157 type = "hidden", name = "button_name", |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
158 value = button_name, |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
159 }, |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
160 { |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
161 type = "list-single", name = "buttons", |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
162 value = "", -- FIXME util.dataforms can't do options without a value |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
163 options = buttons; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
164 } |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
165 }):form()); |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
166 break; |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
167 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
168 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
169 end |
662423cea3f4
mod_slack_webhooks: Add support for buttons
Kim Alvefur <zash@zash.se>
parents:
3097
diff
changeset
|
170 end |
3000
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
171 dest_room:broadcast_message(message, true); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
172 return 201; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
173 end |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
174 |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
175 module:provides("http", { |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
176 default_path = listen_path; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
177 route = { |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
178 ["POST /*"] = route_post(handle_post); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
179 OPTIONS = function(e) |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
180 local headers = e.response.headers; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
181 headers.allow = "POST"; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
182 headers.accept = "application/x-www-form-urlencoded, application/json"; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
183 return 200; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
184 end; |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
185 } |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
186 }); |
02fc3b64cbb7
Initial commit of mod_slack_webhooks.
Nathan Whitehorn <nwhitehorn@physics.ucla.edu>
parents:
diff
changeset
|
187 |