File

mod_measure_client_identities/mod_measure_client_identities.lua @ 5390:f2363e6d9a64

mod_http_oauth2: Advertise the currently supported id_token signing algorithm This field is REQUIRED. The algorithm RS256 MUST be included, but isn't because we don't implement it, as that would require implementing a pile of additional cryptography and JWT stuff. Instead the id_token is signed using the client secret, which allows verification by the client, since it's a shared secret per OpenID Connect Core 1.0 § 10.1 under Symmetric Signatures. OpenID Connect Discovery 1.0 has a lot of REQUIRED and MUST clauses that are not supported here, but that's okay because this is served from the RFC 8414 OAuth 2.0 Authorization Server Metadata .well-known endpoint!
author Kim Alvefur <zash@zash.se>
date Sun, 30 Apr 2023 16:13:40 +0200
parent 3136:fdbf7c2aed7b
line wrap: on
line source

module:set_global();

local measure = require"core.statsmanager".measure;

local counters = {
	unknown = measure("amount", "client_identities.unknown"),
};

module:hook("stats-update", function ()
	local buckets = {
		unknown = 0,
	};
	for _, session in pairs(prosody.full_sessions) do
		if session.caps_cache ~= nil then
			local node_string = session.caps_cache.attr.node;
			local node = node_string:match("([^#]+)");
			if buckets[node] == nil then
				buckets[node] = 0;
			end
			buckets[node] = buckets[node] + 1;
		else
			buckets.unknown = buckets.unknown + 1;
		end
	end
	local visited = {};
	for bucket, count in pairs(buckets) do
		if counters[bucket] == nil then
			counters[bucket] = measure("amount", "client_identities."..bucket);
		end
		counters[bucket](count);
		visited[bucket] = true;
	end
	for bucket, counter in pairs(counters) do
		if not visited[bucket] then
			counter(0);
		end
	end
end)