Mercurial > prosody-modules
view mod_atom/mod_atom.lua @ 2570:548b68ae793b
mod_saslname: Declare module Stable since it does one simple thing very well
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 24 Feb 2017 16:41:48 +0100 |
parents | 4915b8223b07 |
children | 4b52cafd5811 |
line wrap: on
line source
-- HTTP Access to PEP -> microblog -- By Kim Alvefur <zash@zash.se> module:depends"http"; module:depends"pep"; local nodeprep = require "util.encodings".stringprep.nodeprep; local st = require "util.stanza"; local host, hosts = module.host, hosts; local function handle_request(event, path) local response = event.response; local user = nodeprep(path); if not user then return 400 end local jid = user .. "@" .. host; local pep_data = hosts[host].modules.pep.module.save(); if not pep_data.data[jid] or not pep_data.data[jid]["urn:xmpp:microblog:0"] then return 404; end local microblogdata = pep_data.data[jid]["urn:xmpp:microblog:0"][2]:get_child("entry", "http://www.w3.org/2005/Atom"); if not microblogdata then return 404; end local feed = st.stanza("feed", { xmlns="http://www.w3.org/2005/Atom" } ); local source = microblogdata:get_child("source"); if source then for i = 1,#source do feed:add_child(source[i]):up(); end for i = 1,#microblogdata do if microblogdata[i].name == "source" then table.remove(microblogdata, i); break end end end feed:add_child(microblogdata); response.headers.content_type = "application/atom+xml"; return "<?xml version='1.0' encoding='utf-8'?>" .. tostring(feed) .. "\n"; end module:provides("http", { route = { ["GET /*"] = handle_request; }; });