Mercurial > prosody-hg
comparison core/configmanager.lua @ 5776:bd0ff8ae98a8
Remove all trailing whitespace
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Fri, 09 Aug 2013 17:48:21 +0200 |
| parents | 0bf5e90be086 |
| children | 5cf1c08805fb |
comparison
equal
deleted
inserted
replaced
| 5775:a6c2b8933507 | 5776:bd0ff8ae98a8 |
|---|---|
| 1 -- Prosody IM | 1 -- Prosody IM |
| 2 -- Copyright (C) 2008-2010 Matthew Wild | 2 -- Copyright (C) 2008-2010 Matthew Wild |
| 3 -- Copyright (C) 2008-2010 Waqas Hussain | 3 -- Copyright (C) 2008-2010 Waqas Hussain |
| 4 -- | 4 -- |
| 5 -- This project is MIT/X11 licensed. Please see the | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 local _G = _G; | 9 local _G = _G; |
| 71 function resolve_relative_path(parent_path, path) | 71 function resolve_relative_path(parent_path, path) |
| 72 if path then | 72 if path then |
| 73 -- Some normalization | 73 -- Some normalization |
| 74 parent_path = parent_path:gsub("%"..path_sep.."+$", ""); | 74 parent_path = parent_path:gsub("%"..path_sep.."+$", ""); |
| 75 path = path:gsub("^%.%"..path_sep.."+", ""); | 75 path = path:gsub("^%.%"..path_sep.."+", ""); |
| 76 | 76 |
| 77 local is_relative; | 77 local is_relative; |
| 78 if path_sep == "/" and path:sub(1,1) ~= "/" then | 78 if path_sep == "/" and path:sub(1,1) ~= "/" then |
| 79 is_relative = true; | 79 is_relative = true; |
| 80 elseif path_sep == "\\" and (path:sub(1,1) ~= "/" and (path:sub(2,3) ~= ":\\" or path:sub(2,3) ~= ":/")) then | 80 elseif path_sep == "\\" and (path:sub(1,1) ~= "/" and (path:sub(2,3) ~= ":\\" or path:sub(2,3) ~= ":/")) then |
| 81 is_relative = true; | 81 is_relative = true; |
| 83 if is_relative then | 83 if is_relative then |
| 84 return parent_path..path_sep..path; | 84 return parent_path..path_sep..path; |
| 85 end | 85 end |
| 86 end | 86 end |
| 87 return path; | 87 return path; |
| 88 end | 88 end |
| 89 end | 89 end |
| 90 | 90 |
| 91 -- Helper function to convert a glob to a Lua pattern | 91 -- Helper function to convert a glob to a Lua pattern |
| 92 local function glob_to_pattern(glob) | 92 local function glob_to_pattern(glob) |
| 93 return "^"..glob:gsub("[%p*?]", function (c) | 93 return "^"..glob:gsub("[%p*?]", function (c) |
| 165 end, | 165 end, |
| 166 __newindex = function (t, k, v) | 166 __newindex = function (t, k, v) |
| 167 set(config, env.__currenthost or "*", k, v); | 167 set(config, env.__currenthost or "*", k, v); |
| 168 end | 168 end |
| 169 }); | 169 }); |
| 170 | 170 |
| 171 rawset(env, "__currenthost", "*") -- Default is global | 171 rawset(env, "__currenthost", "*") -- Default is global |
| 172 function env.VirtualHost(name) | 172 function env.VirtualHost(name) |
| 173 if rawget(config, name) and rawget(config[name], "component_module") then | 173 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", | 174 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); | 175 name, config[name].component_module:gsub("^%a+$", { component = "external", muc = "MUC"}), name, name), 0); |
| 183 set(config, name or "*", option_name, option_value); | 183 set(config, name or "*", option_name, option_value); |
| 184 end | 184 end |
| 185 end; | 185 end; |
| 186 end | 186 end |
| 187 env.Host, env.host = env.VirtualHost, env.VirtualHost; | 187 env.Host, env.host = env.VirtualHost, env.VirtualHost; |
| 188 | 188 |
| 189 function env.Component(name) | 189 function env.Component(name) |
| 190 if rawget(config, name) and rawget(config[name], "defined") and not rawget(config[name], "component_module") then | 190 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", | 191 error(format("Component %q clashes with previously defined Host %q, for services use a sub-domain like conference.%s", |
| 192 name, name, name), 0); | 192 name, name, name), 0); |
| 193 end | 193 end |
| 199 rawset(env, "__currenthost", "*"); -- Return to global scope | 199 rawset(env, "__currenthost", "*"); -- Return to global scope |
| 200 for option_name, option_value in pairs(config_options) do | 200 for option_name, option_value in pairs(config_options) do |
| 201 set(config, name or "*", option_name, option_value); | 201 set(config, name or "*", option_name, option_value); |
| 202 end | 202 end |
| 203 end | 203 end |
| 204 | 204 |
| 205 return function (module) | 205 return function (module) |
| 206 if type(module) == "string" then | 206 if type(module) == "string" then |
| 207 set(config, name, "component_module", module); | 207 set(config, name, "component_module", module); |
| 208 return handle_config_options; | 208 return handle_config_options; |
| 209 end | 209 end |
| 210 return handle_config_options(module); | 210 return handle_config_options(module); |
| 211 end | 211 end |
| 212 end | 212 end |
| 213 env.component = env.Component; | 213 env.component = env.Component; |
| 214 | 214 |
| 215 function env.Include(file) | 215 function env.Include(file) |
| 216 if file:match("[*?]") then | 216 if file:match("[*?]") then |
| 217 local path_pos, glob = file:match("()([^"..path_sep.."]+)$"); | 217 local path_pos, glob = file:match("()([^"..path_sep.."]+)$"); |
| 218 local path = file:sub(1, math_max(path_pos-2,0)); | 218 local path = file:sub(1, math_max(path_pos-2,0)); |
| 219 local config_path = config_file:gsub("[^"..path_sep.."]+$", ""); | 219 local config_path = config_file:gsub("[^"..path_sep.."]+$", ""); |
| 238 if not f then error("Error loading included "..file..": "..err, 0); end | 238 if not f then error("Error loading included "..file..": "..err, 0); end |
| 239 return f, err; | 239 return f, err; |
| 240 end | 240 end |
| 241 end | 241 end |
| 242 env.include = env.Include; | 242 env.include = env.Include; |
| 243 | 243 |
| 244 function env.RunScript(file) | 244 function env.RunScript(file) |
| 245 return dofile(resolve_relative_path(config_file:gsub("[^"..path_sep.."]+$", ""), file)); | 245 return dofile(resolve_relative_path(config_file:gsub("[^"..path_sep.."]+$", ""), file)); |
| 246 end | 246 end |
| 247 | 247 |
| 248 local chunk, err = envload(data, "@"..config_file, env); | 248 local chunk, err = envload(data, "@"..config_file, env); |
| 249 | 249 |
| 250 if not chunk then | 250 if not chunk then |
| 251 return nil, err; | 251 return nil, err; |
| 252 end | 252 end |
| 253 | 253 |
| 254 local ok, err = pcall(chunk); | 254 local ok, err = pcall(chunk); |
| 255 | 255 |
| 256 if not ok then | 256 if not ok then |
| 257 return nil, err; | 257 return nil, err; |
| 258 end | 258 end |
| 259 | 259 |
| 260 return true; | 260 return true; |
| 261 end | 261 end |
| 262 | 262 |
| 263 end | 263 end |
| 264 | 264 |
| 265 return _M; | 265 return _M; |
