Software /
code /
prosody-modules
Annotate
mod_persisthosts/mod_persisthosts.lua @ 6228:b74ec363de08
mod_jsxc: Remove compatibility with 0.11
author | Link Mauve <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 09 Apr 2025 19:05:21 +0200 |
parent | 6148:c90aab23fb9b |
rev | line source |
---|---|
2446
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- mod_persisthosts |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 module:set_global(); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
6146
dde2803f7678
mod_persisthosts: Retrieve hosts from config instead of Prosody state
Kim Alvefur <zash@zash.se>
parents:
2447
diff
changeset
|
4 local cm = require "core.configmanager"; |
2446
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local set = require"util.set"; |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 local stat = require"lfs".attributes; |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local resolve_relative_path = require"core.configmanager".resolve_relative_path; |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 local vhost_path = module:get_option_string("persisthosts_path", "conf.d"); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local path_pattern = resolve_relative_path(prosody.paths.config, vhost_path) .. "/%s.cfg.lua"; |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local original = set.new(); |
6146
dde2803f7678
mod_persisthosts: Retrieve hosts from config instead of Prosody state
Kim Alvefur <zash@zash.se>
parents:
2447
diff
changeset
|
13 for host, config in pairs(cm.getconfig()) do |
6148
c90aab23fb9b
mod_persisthosts: Also skip defined Components (thanks gtech1)
Kim Alvefur <zash@zash.se>
parents:
6146
diff
changeset
|
14 if config["defined"] or config["component_module"] then |
6146
dde2803f7678
mod_persisthosts: Retrieve hosts from config instead of Prosody state
Kim Alvefur <zash@zash.se>
parents:
2447
diff
changeset
|
15 original:add(host); |
dde2803f7678
mod_persisthosts: Retrieve hosts from config instead of Prosody state
Kim Alvefur <zash@zash.se>
parents:
2447
diff
changeset
|
16 end |
dde2803f7678
mod_persisthosts: Retrieve hosts from config instead of Prosody state
Kim Alvefur <zash@zash.se>
parents:
2447
diff
changeset
|
17 end |
2446
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 module:hook("host-activated", function(host) |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 if not original:contains(host) then |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 local path = path_pattern:format(host); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 if not stat(path) then |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 local fh, err = io.open(path, "w"); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 if fh then |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 fh:write(("VirtualHost%q\n"):format(host)); |
2447
366fadb5c6e5
mod_persisthosts: Fire an event to allow other modules a chance to write to the new config file
Kim Alvefur <zash@zash.se>
parents:
2446
diff
changeset
|
26 module:fire_event("host-persisted", { host = host, file = fh }); |
2446
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 fh:close(); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 module:log("info", "Config file for host '%s' created", host); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 else |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 module:log("error", "Could not open '%s' for writing: %s", path, err or "duno"); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 end |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 else |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 module:log("debug", "File '%s' existed already", path); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 end |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 else |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 module:log("debug", "VirtualHost '%s' existed already", host); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 end |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 end); |
c563f4d64302
mod_persisthosts: Module that dynamically creates stub configuration files for dynamically activated hosts
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |