Mercurial > prosody-hg
comparison core/configmanager.lua @ 6323:5926f01e5cd2
configmanager: nameprep VirtualHost and Component names
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 31 Jul 2014 06:56:21 +0100 |
| parents | 46cb87d531a7 |
| children | a3b9496673ee |
comparison
equal
deleted
inserted
replaced
| 6314:8029b8a5f37a | 6323:5926f01e5cd2 |
|---|---|
| 14 local fire_event = prosody and prosody.events.fire_event or function () end; | 14 local fire_event = prosody and prosody.events.fire_event or function () end; |
| 15 | 15 |
| 16 local envload = require"util.envload".envload; | 16 local envload = require"util.envload".envload; |
| 17 local deps = require"util.dependencies"; | 17 local deps = require"util.dependencies"; |
| 18 local path_sep = package.config:sub(1,1); | 18 local path_sep = package.config:sub(1,1); |
| 19 | |
| 20 local have_encodings, encodings = pcall(require, "util.encodings"); | |
| 21 local nameprep = have_encodings and encodings.stringprep.nameprep or function (host) return host:lower(); end | |
| 19 | 22 |
| 20 module "configmanager" | 23 module "configmanager" |
| 21 | 24 |
| 22 local parsers = {}; | 25 local parsers = {}; |
| 23 | 26 |
| 168 end | 171 end |
| 169 }); | 172 }); |
| 170 | 173 |
| 171 rawset(env, "__currenthost", "*") -- Default is global | 174 rawset(env, "__currenthost", "*") -- Default is global |
| 172 function env.VirtualHost(name) | 175 function env.VirtualHost(name) |
| 176 name = nameprep(name); | |
| 173 if rawget(config, name) and rawget(config[name], "component_module") then | 177 if rawget(config, name) and rawget(config[name], "component_module") then |
| 174 error(format("Host %q clashes with previously defined %s Component %q, for services use a sub-domain like conference.%s", | 178 error(format("Host %q clashes with previously defined %s Component %q, for services use a sub-domain like conference.%s", |
| 175 name, config[name].component_module:gsub("^%a+$", { component = "external", muc = "MUC"}), name, name), 0); | 179 name, config[name].component_module:gsub("^%a+$", { component = "external", muc = "MUC"}), name, name), 0); |
| 176 end | 180 end |
| 177 rawset(env, "__currenthost", name); | 181 rawset(env, "__currenthost", name); |
| 185 end; | 189 end; |
| 186 end | 190 end |
| 187 env.Host, env.host = env.VirtualHost, env.VirtualHost; | 191 env.Host, env.host = env.VirtualHost, env.VirtualHost; |
| 188 | 192 |
| 189 function env.Component(name) | 193 function env.Component(name) |
| 194 name = nameprep(name); | |
| 190 if rawget(config, name) and rawget(config[name], "defined") and not rawget(config[name], "component_module") then | 195 if rawget(config, name) and rawget(config[name], "defined") and not rawget(config[name], "component_module") then |
| 191 error(format("Component %q clashes with previously defined Host %q, for services use a sub-domain like conference.%s", | 196 error(format("Component %q clashes with previously defined Host %q, for services use a sub-domain like conference.%s", |
| 192 name, name, name), 0); | 197 name, name, name), 0); |
| 193 end | 198 end |
| 194 set(config, name, "component_module", "component"); | 199 set(config, name, "component_module", "component"); |
