# HG changeset patch # User Kim Alvefur # Date 1484699897 -3600 # Node ID c563f4d643020b63ba359be637e62c1b3f4d8c29 # Parent e822900c87d426563ec54c65c3b57746cbfa7a59 mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts diff -r e822900c87d4 -r c563f4d64302 mod_persisthosts/README.markdown --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_persisthosts/README.markdown Wed Jan 18 01:38:17 2017 +0100 @@ -0,0 +1,14 @@ +Introduction +============ + +This module creates stub configuration files for newly activated hosts. + +Configuration +============= + +A single option exists, `persisthosts_path`, which is the path where new +stub configuration files are created. It defaults to `"conf.d"`, and is +treated as relative to the configuration directiory [^1] unless set to +an absolute path. + +[^1]: usually \`/etc/prosody on \*nix systems diff -r e822900c87d4 -r c563f4d64302 mod_persisthosts/mod_persisthosts.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_persisthosts/mod_persisthosts.lua Wed Jan 18 01:38:17 2017 +0100 @@ -0,0 +1,33 @@ +-- mod_persisthosts +module:set_global(); + +local set = require"util.set"; +local stat = require"lfs".attributes; +local resolve_relative_path = require"core.configmanager".resolve_relative_path; + +local vhost_path = module:get_option_string("persisthosts_path", "conf.d"); +local path_pattern = resolve_relative_path(prosody.paths.config, vhost_path) .. "/%s.cfg.lua"; + +local original = set.new(); +original:include(prosody.hosts); + +module:hook("host-activated", function(host) + if not original:contains(host) then + local path = path_pattern:format(host); + if not stat(path) then + local fh, err = io.open(path, "w"); + if fh then + fh:write(("VirtualHost%q\n"):format(host)); + fh:close(); + module:log("info", "Config file for host '%s' created", host); + else + module:log("error", "Could not open '%s' for writing: %s", path, err or "duno"); + end + else + module:log("debug", "File '%s' existed already", path); + end + else + module:log("debug", "VirtualHost '%s' existed already", host); + end +end); +