Software /
code /
prosody
Changeset
4088:0e5585910583
Merge 0.8->trunk
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 07 Jan 2011 04:42:01 +0000 |
parents | 4082:eeab15f8aa35 (current diff) 4087:e239504d8fff (diff) |
children | 4092:d78d5038d144 |
files | |
diffstat | 4 files changed, 57 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/core/storagemanager.lua Fri Jan 07 03:18:40 2011 +0000 +++ b/core/storagemanager.lua Fri Jan 07 04:42:01 2011 +0000 @@ -1,5 +1,5 @@ -local error, type = error, type; +local error, type, pairs = error, type, pairs; local setmetatable = setmetatable; local config = require "core.configmanager"; @@ -9,12 +9,14 @@ local hosts = hosts; local log = require "util.logger".init("storagemanager"); -local olddm = {}; -- maintain old datamanager, for backwards compatibility -for k,v in pairs(datamanager) do olddm[k] = v; end local prosody = prosody; module("storagemanager") +local olddm = {}; -- maintain old datamanager, for backwards compatibility +for k,v in pairs(datamanager) do olddm[k] = v; end +_M.olddm = olddm; + local null_storage_method = function () return false, "no data storage active"; end local null_storage_driver = setmetatable( { @@ -27,15 +29,6 @@ } ); ---TODO: Move default driver to mod_auth_internal -local default_driver_mt = { name = "internal" }; -default_driver_mt.__index = default_driver_mt; -function default_driver_mt:open(store) - return setmetatable({ host = self.host, store = store }, default_driver_mt); -end -function default_driver_mt:get(user) return olddm.load(user, self.host, self.store); end -function default_driver_mt:set(user, data) return olddm.store(user, self.host, self.store, data); end - local stores_available = multitable.new(); function initialize_host(host) @@ -53,20 +46,16 @@ prosody.events.add_handler("host-activated", initialize_host, 101); local function load_driver(host, driver_name) - if not driver_name then - return; + if driver_name == "null" then + return null_storage_provider; end local driver = stores_available:get(host, driver_name); if driver then return driver; end - if driver_name ~= "internal" then - local ok, err = modulemanager.load(host, "storage_"..driver_name); - if not ok then - log("error", "Failed to load storage driver plugin %s on %s: %s", driver_name, host, err); - end - return stores_available:get(host, driver_name); - else - return setmetatable({host = host}, default_driver_mt); + local ok, err = modulemanager.load(host, "storage_"..driver_name); + if not ok then + log("error", "Failed to load storage driver plugin %s on %s: %s", driver_name, host, err); end + return stores_available:get(host, driver_name); end function open(host, store, typ) @@ -78,22 +67,15 @@ elseif option_type == "table" then driver_name = storage[store]; end + if not driver_name then + driver_name = config.get(host, "core", "default_storage") or "internal"; + end local driver = load_driver(host, driver_name); if not driver then - driver_name = config.get(host, "core", "default_storage"); - driver = load_driver(host, driver_name); - if not driver then - if driver_name or (type(storage) == "string" - or type(storage) == "table" and storage[store]) then - log("warn", "Falling back to null driver for %s storage on %s", store, host); - driver_name = "null"; - driver = null_storage_driver; - else - driver_name = "internal"; - driver = load_driver(host, driver_name); - end - end + log("warn", "Falling back to null driver for %s storage on %s", store, host); + driver_name = "null"; + driver = null_storage_driver; end local ret, err = driver:open(store, typ);
--- a/plugins/mod_motd.lua Fri Jan 07 03:18:40 2011 +0000 +++ b/plugins/mod_motd.lua Fri Jan 07 04:42:01 2011 +0000 @@ -13,6 +13,8 @@ local st = require "util.stanza"; +motd_text = motd_text:gsub("^%s*(.-)%s*$", "%1"):gsub("\n%s+", "\n"); -- Strip indentation from the config + module:hook("resource-bind", function (event) local session = event.session;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/mod_storage_internal.lua Fri Jan 07 04:42:01 2011 +0000 @@ -0,0 +1,19 @@ +local datamanager = require "core.storagemanager".olddm; + +local host = module.host; + +local driver = { name = "internal" }; +local driver_mt = { __index = driver }; + +function driver:open(store) + return setmetatable({ store = store }, driver_mt); +end +function driver:get(user) + return datamanager.load(user, host, self.store); +end + +function driver:set(user, data) + return datamanager.store(user, host, self.store, data); +end + +module:add_item("data-driver", driver);
--- a/prosody.cfg.lua.dist Fri Jan 07 03:18:40 2011 +0000 +++ b/prosody.cfg.lua.dist Fri Jan 07 04:42:01 2011 +0000 @@ -66,6 +66,7 @@ --"announce"; -- Send announcement to all online users --"welcome"; -- Welcome users who register accounts --"watchregistrations"; -- Alert admins of registrations + --"motd"; -- Send a message to users when they log in }; -- These modules are auto-loaded, should you @@ -88,10 +89,27 @@ certificate = "certs/localhost.cert"; } --- Require encryption on client/server connections? +-- Only allow encrypted streams? Encryption is already used when +-- available. These options will cause Prosody to deny connections that +-- are not encrypted. Note that some servers do not support s2s +-- encryption or have it disabled, including gmail.com and Google Apps +-- domains. + --c2s_require_encryption = false --s2s_require_encryption = false +-- Select the storage backend to use. By default Prosody uses flat files +-- in its configured data directory, but it also supports more backends +-- through modules. An "sql" backend is included by default, but requires +-- additional dependencies. See http://prosody.im/doc/storage for more info. + +--storage = "sql" -- Default is "internal" + +-- For the "sql" backend, you can uncomment *one* of the below to configure: +--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename. +--sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" } +--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" } + -- Logging configuration -- For advanced logging see http://prosody.im/doc/logging log = {