Mercurial > prosody-modules
annotate mod_pubsub_post/mod_pubsub_post.lua @ 2494:d300ae5dba87
mod_smacks: Fix some bugs with smacks-ack-delayed event triggering.
The old code had several flaws which are addressed here.
First of all this fixes the if statement guarding the event generation
There where some timing glitches addressed by this commit as well.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Sun, 12 Feb 2017 21:23:22 +0100 |
parents | 43c54a27bab2 |
children | 8bfba31a1f8b |
rev | line source |
---|---|
1619
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 module:depends("http"); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local st = require "util.stanza"; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local json = require "util.json"; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local formdecode = require "net.http".formdecode; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local uuid_generate = require "util.uuid".generate; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local timestamp_generate = require "util.datetime".datetime; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local pubsub_service = module:depends("pubsub").service; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 function handle_POST(event, path) |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local data = event.request.body; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local item_id = "default"; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local post_item = st.stanza("item", { id = item_id, xmlns = "http://jabber.org/protocol/pubsub" }) |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 :tag("entry", { xmlns = "http://www.w3.org/2005/Atom" }) |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 :tag("id"):text(uuid_generate()):up() |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 :tag("title"):text(data):up() |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 :tag("author") |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 :tag("name"):text(event.request.conn:ip()):up() |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 :up() |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 :tag("published"):text(timestamp_generate()):up(); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 local ok, err = pubsub_service:publish(path, true, item_id, post_item); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 module:log("debug", "Handled POST: \n%s\n", tostring(event.request.body)); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 return ok and "Posted" or ("Error: "..err); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 end |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 module:provides("http", { |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 route = { |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 ["POST /*"] = handle_POST; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 }; |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 }); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 function module.load() |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 module:log("debug", "Loaded at %s", module:http_url()); |
43c54a27bab2
mod_pubsub_post: Module to publish to pubsub nodes from a simple HTTP POST
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |