Diff

mod_persisthosts/mod_persisthosts.lua @ 2446:c563f4d64302

mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
author Kim Alvefur <zash@zash.se>
date Wed, 18 Jan 2017 01:38:17 +0100
child 2447:366fadb5c6e5
line wrap: on
line diff
--- /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);
+