mod_groups_oidc/mod_groups_oidc.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Feb 2024 22:47:05 +0000
changeset 5846 ed82916e5796
parent 5508 7d9dce4e7dd0
permissions -rw-r--r--
mod_server_info: Rewrite/backport from Prosody 1ce18cb3e6cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5508
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local array = require "util.array";
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
module:add_item("openid-claim", "groups");
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local group_memberships = module:open_store("groups", "map");
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local function user_groups(username)
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	return pairs(group_memberships:get_all(username) or {});
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
end
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
module:hook("token/userinfo", function(event)
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
	local userinfo = event.userinfo;
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	if event.claims:contains("groups") then
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
		userinfo.groups = array(user_groups(event.username));
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	end
7d9dce4e7dd0 mod_groups_oidc: Expose groups to OAuth clients
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
end);