Software /
code /
prosody
Diff
core/certmanager.lua @ 12104:29765ac7f72f
prosodyctl cert: use the indexing functions for better UX
These provide (a) a way to deal with random assortments of certs
and (b) avoid unnecessary error messages and warnings, according
to #1669 anyway, which this fixes.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Tue, 21 Dec 2021 21:20:21 +0100 |
parent | 12099:b344edad61d3 |
child | 12105:47c9a76cce7d |
line wrap: on
line diff
--- a/core/certmanager.lua Tue Dec 21 14:23:09 2021 +0100 +++ b/core/certmanager.lua Tue Dec 21 21:20:21 2021 +0100 @@ -167,12 +167,10 @@ local cert_index; -local function find_host_cert(host) +local function find_cert_in_index(index, host) if not host then return nil; end - if not cert_index then - cert_index = index_certs(resolve_path(config_path, global_certificates)); - end - local certs = cert_index[host]; + if not index then return nil; end + local certs = index[host]; if certs then local cert_filename, services = next(certs); if services["*"] then @@ -183,8 +181,16 @@ } end end + return nil +end - return find_cert(configmanager.get(host, "certificate"), host) or find_host_cert(host:match("%.(.+)$")); +local function find_host_cert(host) + if not host then return nil; end + if not cert_index then + cert_index = index_certs(resolve_path(config_path, global_certificates)); + end + + return find_cert_in_index(cert_index, host) or find_cert(configmanager.get(host, "certificate"), host) or find_host_cert(host:match("%.(.+)$")); end local function find_service_cert(service, port) @@ -439,5 +445,7 @@ create_context = create_context; reload_ssl_config = reload_ssl_config; find_cert = find_cert; + index_certs = index_certs; find_host_cert = find_host_cert; + find_cert_in_index = find_cert_in_index; };