Software /
code /
prosody-modules
File
mod_fallback_vcard/mod_fallback_vcard.lua @ 5931:d194d1012fd3
Updating dox for mod_rest. Ideas expressed / clarified:
1) Making clear that mod_rest isn't to be installed under VirtualHosts AND as a component.
2) Understanding some of the implications of this choice:
A) Changes to user authentication
B) How it affects subdomains
3) More consistent use of domain names for clarity.
4) Using different heading sizes to show scope of section.
Essentially, I added all the tidbits I had to clarify in getting this to work in my
own example.
author | Ben Smith <bens@effortlessis.com> |
---|---|
date | Mon, 13 May 2024 13:25:13 -0700 |
parent | 1899:ceb594a14a18 |
line wrap: on
line source
local datamanager = require "util.datamanager"; local usermanager = require "core.usermanager"; local st = require "util.stanza"; local host = module.host; local jid_split = require "util.jid".split; local orgname = module:get_option_string("default_vcard_orgname"); local orgmail = module:get_option_boolean("default_vcard_orgmail"); module:hook("iq/bare/vcard-temp:vCard", function(event) local session, stanza = event.origin, event.stanza; local to = stanza.attr.to; local username = jid_split(to); if not username then return end local vcard = datamanager.load(username, host, "vcard"); local data = datamanager.load(username, host, "account_details"); local exists = usermanager.user_exists(username, host); module:log("debug", "has %s: %s", "vcard", tostring(vcard)); module:log("debug", "has %s: %s", "data", tostring(data)); module:log("debug", "has %s: %s", "exists", tostring(exists)); data = data or {}; if not(vcard) and data and exists then -- MAYBE -- first .. " " .. last -- first, last = name:match("^(%w+) (%w+)$") local vcard = st.reply(stanza):tag("vCard", { xmlns = "vcard-temp" }) :tag("VERSION"):text("3.0"):up() :tag("N") :tag("FAMILY"):text(data.last or ""):up() :tag("GIVEN"):text(data.first or ""):up() :up() :tag("FN"):text(data.name or ""):up() :tag("NICKNAME"):text(data.nick or username):up() :tag("JABBERID"):text(username.."@"..host):up(); if orgmail then vcard:tag("EMAIL"):tag("USERID"):text(username.."@"..host):up():up(); elseif data.email then vcard:tag("EMAIL"):tag("USERID"):text(data.email):up():up(); end if orgname then vcard:tag("ORG"):tag("ORGNAME"):text(orgname):up():up(); end session.send(vcard); return true; end end, 1);