mod_s2s: Log certificate identity validation result
[prosody.git] / core / moduleapi.lua
index fa20c3cdd9fd179e4e6e0d5acec774fb5b68b666..ed75669b60b64f6c90e5c19f9ee843328f20ec55 100644 (file)
@@ -270,6 +270,22 @@ function api:get_option_set(name, ...)
        return set.new(value);
 end
 
+function api:get_option_inherited_set(name, ...)
+       local value = self:get_option_set(name, ...);
+       local global_value = self:context("*"):get_option_set(name, ...);
+       if not value then
+               return global_value;
+       elseif not global_value then
+               return value;
+       end
+       value:include(global_value);
+       return value;
+end
+
+function api:context(host)
+       return setmetatable({host=host or "*"}, {__index=self,__newindex=self});
+end
+
 function api:add_item(key, value)
        self.items = self.items or {};
        self.items[key] = self.items[key] or {};
@@ -303,7 +319,13 @@ function api:handle_items(type, added_cb, removed_cb, existing)
 end
 
 function api:provides(name, item)
-       if not item then item = self.environment; end
+       -- if not item then item = setmetatable({}, { __index = function(t,k) return rawget(self.environment, k); end }); end
+       if not item then
+               item = {}
+               for k,v in pairs(self.environment) do
+                       if k ~= "module" then item[k] = v; end
+               end
+       end
        if not item.name then
                local item_name = self.name;
                -- Strip a provider prefix to find the item name
@@ -313,6 +335,7 @@ function api:provides(name, item)
                end
                item.name = item_name;
        end
+       item._provided_by = self.name;
        self:add_item(name.."-provider", item);
 end
 
@@ -337,4 +360,8 @@ function api:load_resource(path, mode)
        return io.open(path, mode);
 end
 
+function api:open_store(name, type)
+       return storagemanager.open(self.host, name or self.name, type);
+end
+
 return api;