annotate mod_oidc_userinfo_vcard4/mod_oidc_userinfo_vcard4.lua @ 6562:5da6fb562df9 default tip

mod_unified_push: Fix push error handling (fixes #2000) Use the error object that send_iq() passes as an argument to it's reject callback instead of attempting and failing to do the parsing in the callback itself.
author kmq
date Mon, 06 Jul 2026 14:23:57 +0200
parents 9111c7b24d12
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5350
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- Provide OpenID UserInfo data to mod_http_oauth2
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 -- Alternatively, separate module for the whole HTTP endpoint?
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 --
6293
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
4 module:add_item("openid-claim", { claim = "address"; title = "Address";
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
5 description = "Address details, if any, given in your user profile."; });
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
6 module:add_item("openid-claim", { claim = "email"; title = "Email";
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
7 description = "Email address entered in your user profile." });
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
8 module:add_item("openid-claim", { claim = "phone"; title = "Phone Number";
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
9 description = "Phone number entered in your user profile."; });
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
10 module:add_item("openid-claim", { claim = "profile"; title = "Profile";
9111c7b24d12 mod_oidc_userinfo_vcard4: Add verbose oidc claim details
Kim Alvefur <zash@zash.se>
parents: 5556
diff changeset
11 description = "Complete profile details" });
5503
320593cf7d90 mod_oidc_userinfo_vcard4: Advertise OpenID scopes via new mechanism
Kim Alvefur <zash@zash.se>
parents: 5361
diff changeset
12
5350
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local mod_pep = module:depends "pep";
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
5555
34b63d0144c3 mod_oidc_userinfo_vcard4: Fix typo
Kim Alvefur <zash@zash.se>
parents: 5503
diff changeset
15 local gender_map = { M = "male"; F = "female"; O = "other"; N = "not applicable"; U = "unknown" }
5350
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 module:hook("token/userinfo", function(event)
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local pep_service = mod_pep.get_pep_service(event.username);
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 local vcard4 = select(3, pep_service:get_last_item("urn:xmpp:vcard4", true));
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local userinfo = event.userinfo;
5360
f05de5ac219f mod_oidc_userinfo_vcard4: Unpack <vcard> from PubSub <item>
Kim Alvefur <zash@zash.se>
parents: 5350
diff changeset
23 vcard4 = vcard4 and vcard4:get_child("vcard", "urn:ietf:params:xml:ns:vcard-4.0");
5350
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 if vcard4 and event.claims:contains("profile") then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 userinfo.name = vcard4:find("fn/text#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 userinfo.family_name = vcard4:find("n/surname#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 userinfo.given_name = vcard4:find("n/given#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 userinfo.middle_name = vcard4:find("n/additional#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 userinfo.nickname = vcard4:find("nickname/text#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 if not userinfo.nickname then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true);
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 if ok and nick_item then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 userinfo.nickname = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 userinfo.preferred_username = event.username;
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 -- profile -- page? not their website
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 -- picture -- mod_http_pep_avatar?
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 userinfo.website = vcard4:find("url/uri#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 userinfo.birthdate = vcard4:find("bday/date#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 userinfo.zoneinfo = vcard4:find("tz/text#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 userinfo.locale = vcard4:find("lang/language-tag#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 userinfo.gender = gender_map[vcard4:find("gender/sex#")] or vcard4:find("gender/text#");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 -- updated_at -- we don't keep a vcard change timestamp?
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 if not userinfo.nickname and event.claims:contains("profile") then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true);
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 if ok and nick_item then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 userinfo.nickname = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 if vcard4 and event.claims:contains("email") then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 userinfo.email = vcard4:find("email/text#")
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 if userinfo.email then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 userinfo.email_verified = false;
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 if vcard4 and event.claims:contains("address") then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 local adr = vcard4:get_child("adr");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 if adr then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 userinfo.address = {
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 formatted = nil;
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 street_address = adr:get_child_text("street");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 locality = adr:get_child_text("locality");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 region = adr:get_child_text("region");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 postal_code = adr:get_child_text("code");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 country = adr:get_child_text("country");
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 }
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 if vcard4 and event.claims:contains("phone") then
5361
cec1b0b0adef mod_oidc_userinfo_vcard4: Fix phone number claim
Kim Alvefur <zash@zash.se>
parents: 5360
diff changeset
81 userinfo.phone = vcard4:find("tel/text#")
5350
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 if userinfo.phone then
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 userinfo.phone_number_verified = false;
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 end
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87
f8ec43db580b mod_oidc_userinfo_vcard4: Provide profile details in mod_http_oauth2
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 end, 10);