Mercurial > prosody-modules
comparison mod_pubsub_github/mod_pubsub_github.lua @ 860:1c886affb375
mod_pubsub_github: Receive Github web hooks (generated on pushes to a repository) and forward to a local pubsub node
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 22 Nov 2012 00:02:28 -0500 |
parents | |
children | 7dbde05b48a9 |
comparison
equal
deleted
inserted
replaced
859:9922e8cdf4a4 | 860:1c886affb375 |
---|---|
1 module:depends("http"); | |
2 | |
3 local st = require "util.stanza"; | |
4 local json = require "util.json"; | |
5 local formdecode = require "net.http".formdecode; | |
6 | |
7 local pubsub_service = module:depends("pubsub").service; | |
8 local node = module:get_option("github_node", "github"); | |
9 | |
10 function handle_POST(event) | |
11 local data = json.decode(formdecode(event.request.body).payload); | |
12 if not data then | |
13 return "Invalid JSON. From you of all people..."; | |
14 end | |
15 | |
16 for _, commit in ipairs(data.commits) do | |
17 local ok, err = pubsub_service:publish(node, true, data.repository.name, | |
18 st.stanza("item", { id = data.repository.name, xmlns = "http://jabber.org/protocol/pubsub" }) | |
19 :tag("entry", { xmlns = "http://www.w3.org/2005/Atom" }) | |
20 :tag("id"):text(commit.id):up() | |
21 :tag("title"):text(commit.message):up() | |
22 :tag("link", { rel = "alternate", href = commit.url }):up() | |
23 :tag("published"):text(commit.timestamp):up() | |
24 :tag("author") | |
25 :tag("name"):text(commit.author.name):up() | |
26 :tag("email"):text(commit.author.email):up() | |
27 :up() | |
28 ); | |
29 end | |
30 | |
31 module:log("debug", "Handled POST: \n%s\n", tostring(event.request.body)); | |
32 return "Thank you Github!"; | |
33 end | |
34 | |
35 module:provides("http", { | |
36 route = { | |
37 POST = handle_POST; | |
38 }; | |
39 }); | |
40 | |
41 function module.load() | |
42 if not pubsub_service.nodes[node] then | |
43 local ok, err = pubsub_service:create(node, true); | |
44 if not ok then | |
45 module:log("error", "Error creating node: %s", err); | |
46 else | |
47 module:log("debug", "Node %q created", node); | |
48 end | |
49 end | |
50 end |