plugins/mod_storage_xep0227.lua
changeset 12188 326f5466ddc7
parent 12187 e77c938ed92b
child 12189 708769a4c5da
equal deleted inserted replaced
12187:e77c938ed92b 12188:326f5466ddc7
   686 		instance._get_user_xml = assert(options.get_user_xml);
   686 		instance._get_user_xml = assert(options.get_user_xml);
   687 	end
   687 	end
   688 	return instance;
   688 	return instance;
   689 end
   689 end
   690 
   690 
       
   691 local function get_store_names_from_xml(self, user_xml)
       
   692 	local stores = set.new();
       
   693 	for handler_name, handler_funcs in pairs(handlers) do
       
   694 		if handler_funcs._stores then
       
   695 			stores:include(handler_funcs._stores(self, user_xml));
       
   696 		else
       
   697 			stores:include(handler_name);
       
   698 		end
       
   699 	end
       
   700 	return stores;
       
   701 end
       
   702 
   691 local function get_store_names(self, path)
   703 local function get_store_names(self, path)
   692 	local stores = set.new();
   704 	local stores = set.new();
   693 	local f, err = io_open(paths.join(prosody.paths.data, path));
   705 	local f, err = io_open(paths.join(prosody.paths.data, path));
   694 	if not f then
   706 	if not f then
   695 		module:log("warn", "Unable to load XML file for <%s>: %s", "store listing", err);
   707 		module:log("warn", "Unable to load XML file for <%s>: %s", "store listing", err);
   696 		return stores;
   708 		return stores;
   697 	end
   709 	end
   698 	module:log("info", "Loaded %s", path);
   710 	module:log("info", "Loaded %s", path);
   699 	local s = f:read("*a");
   711 	local s = f:read("*a");
   700 	f:close();
   712 	f:close();
   701 	local xml = parse_xml_real(s);
   713 	local user_xml = parse_xml_real(s);
   702 	for _, handler_funcs in pairs(handlers) do
   714 	return get_store_names_from_xml(self, user_xml);
   703 		if handler_funcs._stores then
       
   704 			stores:include(handler_funcs._stores(self, xml));
       
   705 		end
       
   706 	end
       
   707 	return stores;
       
   708 end
   715 end
   709 
   716 
   710 function driver:stores(username)
   717 function driver:stores(username)
   711 	local store_dir = prosody.paths.data;
   718 	local store_dir = prosody.paths.data;
   712 
   719 
   731 	end
   738 	end
   732 
   739 
   733 	return store_names:items();
   740 	return store_names:items();
   734 end
   741 end
   735 
   742 
       
   743 function driver:xep0227_user_stores(username, host)
       
   744 	local user_xml = self:_get_user_xml(username, host);
       
   745 	if not user_xml then
       
   746 		return nil;
       
   747 	end
       
   748 	local store_names = get_store_names_from_xml(username, host);
       
   749 	return store_names:items();
       
   750 end
       
   751 
   736 module:provides("storage", driver);
   752 module:provides("storage", driver);