Mercurial > prosody-hg
view tools/dnsregistry.lua @ 13955:01f95f3de6fc
usermanager: More consistent method behaviour, errors, and (pre-)events
This commit refactors most of the exported usermanager methods substantially
to ensure that all of them correctly check for the presence of the host and
method they are calling and return consistent errors if either is incorrect or
missing.
It also unifies the event and logging code, so as a result there are more
events being fired than before this commit (it also adds pre- events so that
modules can block an action from going ahead).
We don't have good test coverage of this API, but some manual testing suggests
it seems to be working okay...
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 25 Sep 2025 16:53:35 +0100 |
| parents | 1868a757d16b |
| children |
line wrap: on
line source
-- Generate util/dnsregistry.lua from IANA HTTP status code registry if not pcall(require, "prosody.loader") then pcall(require, "loader"); end local xml = require "prosody.util.xml"; local registries = xml.parse(io.read("*a"), { allow_processing_instructions = true }); print("-- Source: https://www.iana.org/assignments/dns-parameters/dns-parameters.xml"); print(os.date("-- Generated on %Y-%m-%d")) local registry_mapping = { ["dns-parameters-2"] = "classes"; ["dns-parameters-4"] = "types"; ["dns-parameters-6"] = "errors"; }; print("return {"); for registry in registries:childtags("registry") do local registry_name = registry_mapping[registry.attr.id]; if registry_name then print("\t" .. registry_name .. " = {"); local duplicates = {}; for record in registry:childtags("record") do local record_name = record:get_child_text("name"); local record_type = record:get_child_text("type"); local record_desc = record:get_child_text("description"); local record_code = tonumber(record:get_child_text("value")); if tostring(record):lower():match("reserved") or tostring(record):lower():match("unassigned") then record_code = nil; end if registry_name == "classes" and record_code then record_type = record_desc and record_desc:match("%((%w+)%)$") if record_type then print(("\t\t[%q] = %d; [%d] = %q;"):format(record_type, record_code, record_code, record_type)) end elseif registry_name == "types" and record_type and record_code then print(("\t\t[%q] = %d; [%d] = %q;"):format(record_type, record_code, record_code, record_type)) elseif registry_name == "errors" and record_code and record_name then local dup = duplicates[record_code] and "-- " or ""; print(("\t\t%s[%d] = %q; [%q] = %q;"):format(dup, record_code, record_name, record_name, record_desc or record_name)); duplicates[record_code] = true; end end print("\t};"); end end print("};");
