Mercurial > prosody-modules
annotate mod_atom/mod_atom.lua @ 6319:04c3273cb81f
mod_auth_cyrus: Add empty 'profile' table to SASL handler objects
This is for compatibility with Prosody's built-in util.sasl objects.
A SASL profile table usually includes methods supported by the backend, which
can be used by SASL mechanism handlers to perform operations (such as testing
the password). It also optionally contains a 'cb' field with channel binding
method handlers.
The Cyrus backend doesn't support channel binding, and doesn't have the same
concept of auth backend methods (it handles all that internally, and Prosody
has no insight or control over it).
Thus, we create an empty profile which informs Prosody that the SASL handler
does not support any of the auth or channel binding methods. Some features
will not work, but they didn't work anyway. This just makes it explicit.
This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to
always contain a 'profile' field.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 04 Sep 2025 10:14:46 +0100 |
| parents | 5dd505c39c4b |
| children |
| rev | line source |
|---|---|
|
2294
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- HTTP Access to PEP -> microblog |
|
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- By Kim Alvefur <zash@zash.se> |
|
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
|
3241
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
4 local mod_pep = module:depends"pep"; |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
5 |
|
3424
6ae875c98daf
mod_atom: Check whether user exists
Kim Alvefur <zash@zash.se>
parents:
3423
diff
changeset
|
6 local um = require "core.usermanager"; |
|
2294
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local nodeprep = require "util.encodings".stringprep.nodeprep; |
|
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local st = require "util.stanza"; |
|
3432
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
9 local urlencode = require "util.http".urlencode; |
|
2294
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
|
3241
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
11 module:depends("http") |
|
2294
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 module:provides("http", { |
|
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 route = { |
|
3241
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
14 ["GET /*"] = function (event, user) |
|
3573
5dd505c39c4b
mod_atom: Return a message instead of 404 for root path
Kim Alvefur <zash@zash.se>
parents:
3432
diff
changeset
|
15 if user == "" then |
|
5dd505c39c4b
mod_atom: Return a message instead of 404 for root path
Kim Alvefur <zash@zash.se>
parents:
3432
diff
changeset
|
16 return [[<h1>Hello from mod_atom</h1><p>This module provides access to public microblogs of local users.</p>]]; |
|
5dd505c39c4b
mod_atom: Return a message instead of 404 for root path
Kim Alvefur <zash@zash.se>
parents:
3432
diff
changeset
|
17 end; |
|
5dd505c39c4b
mod_atom: Return a message instead of 404 for root path
Kim Alvefur <zash@zash.se>
parents:
3432
diff
changeset
|
18 |
| 3423 | 19 local request, response = event.request, event.response; |
| 20 local actor = request.ip; | |
|
3241
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
21 |
|
3432
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
22 local prepped = nodeprep(user); |
|
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
23 if not prepped then return 400; end |
|
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
24 if prepped ~= user then |
|
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
25 response.headers.location = module:http_url() .. "/" .. urlencode(prepped); |
|
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
26 return 302; |
|
61368aec97d6
mod_atom: Apply nodeprep via redirect for cache-friendlyness
Kim Alvefur <zash@zash.se>
parents:
3424
diff
changeset
|
27 end |
|
3424
6ae875c98daf
mod_atom: Check whether user exists
Kim Alvefur <zash@zash.se>
parents:
3423
diff
changeset
|
28 if not um.user_exists(user, module.host) then |
|
6ae875c98daf
mod_atom: Check whether user exists
Kim Alvefur <zash@zash.se>
parents:
3423
diff
changeset
|
29 return 404; |
|
6ae875c98daf
mod_atom: Check whether user exists
Kim Alvefur <zash@zash.se>
parents:
3423
diff
changeset
|
30 end |
|
3241
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
31 |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
32 local pubsub_service = mod_pep.get_pep_service(user); |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
33 local ok, items = pubsub_service:get_items("urn:xmpp:microblog:0", actor); |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
34 if ok then |
| 3423 | 35 response.headers.content_type = "application/xml"; |
|
3272
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
36 local feed = st.stanza("feed", { xmlns = "http://www.w3.org/2005/Atom" }) |
|
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
37 :text_tag("generator", "Prosody", { uri = "xmpp:prosody.im", version = prosody.version }) |
|
3274
2acfb45fd9ec
mod_atom: Expose title and description from node metadata in feed
Kim Alvefur <zash@zash.se>
parents:
3273
diff
changeset
|
38 :text_tag("title", pubsub_service.nodes["urn:xmpp:microblog:0"].config.title or "Microblog feed") |
|
2acfb45fd9ec
mod_atom: Expose title and description from node metadata in feed
Kim Alvefur <zash@zash.se>
parents:
3273
diff
changeset
|
39 :text_tag("subtitle", pubsub_service.nodes["urn:xmpp:microblog:0"].config.description) |
|
3272
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
40 :tag("author") |
|
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
41 :text_tag("name", user) |
|
3273
78888f4ec7e3
mod_atom: Add node as portablecontacts preferredUsername
Kim Alvefur <zash@zash.se>
parents:
3272
diff
changeset
|
42 :text_tag("preferredUsername", user, { xmlns = "http://portablecontacts.net/spec/1.0" }); |
|
3275
25b4cad8fee4
mod_atom: Include User Nickname (if configured to be public)
Kim Alvefur <zash@zash.se>
parents:
3274
diff
changeset
|
43 local ok, _, nick = pubsub_service:get_last_item("http://jabber.org/protocol/nick", actor); |
|
25b4cad8fee4
mod_atom: Include User Nickname (if configured to be public)
Kim Alvefur <zash@zash.se>
parents:
3274
diff
changeset
|
44 if ok and nick then |
|
25b4cad8fee4
mod_atom: Include User Nickname (if configured to be public)
Kim Alvefur <zash@zash.se>
parents:
3274
diff
changeset
|
45 feed:text_tag("displayName", nick.tags[1][1], { xmlns = "http://portablecontacts.net/spec/1.0" }); |
|
25b4cad8fee4
mod_atom: Include User Nickname (if configured to be public)
Kim Alvefur <zash@zash.se>
parents:
3274
diff
changeset
|
46 end |
|
3272
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
47 |
|
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
48 feed:reset(); |
|
119e22ccd64a
mod_atom: Add some basic metadata to feed
Kim Alvefur <zash@zash.se>
parents:
3241
diff
changeset
|
49 |
|
3241
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
50 for i = #items, 1, -1 do |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
51 feed:add_direct_child(items[items[i]].tags[1]); |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
52 end |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
53 return tostring(feed); |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
54 elseif items == "forbidden" then |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
55 return 403; |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
56 elseif items == "item-not-found" then |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
57 return 404; |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
58 end |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
59 end; |
|
4b52cafd5811
mod_atom: Update to the new mod_pep
Kim Alvefur <zash@zash.se>
parents:
2294
diff
changeset
|
60 } |
|
2294
4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 }); |
