comparison mod_storage_s3/mod_storage_s3.lua @ 5672:c74a96dc5d58

mod_storage_s3: Implement iteration of keyvalue keys (users usually)
author Kim Alvefur <zash@zash.se>
date Sat, 14 Oct 2023 21:41:01 +0200
parents c8322c64a548
children b17ba149b7c5
comparison
equal deleted inserted replaced
5671:c8322c64a548 5672:c74a96dc5d58
149 149
150 return async.wait_for(new_request("PUT", self:_path(user), nil, data)); 150 return async.wait_for(new_request("PUT", self:_path(user), nil, data));
151 end 151 end
152 152
153 function keyval:users() 153 function keyval:users()
154 return nil, "not-implemented"; 154 local bucket_path = url.build_path({ is_absolute = true; bucket; is_directory = true });
155 local prefix = url.build_path({ jid.escape(module.host); jid.escape(self.store); is_directory = true });
156 local list_result, err = async.wait_for(new_request("GET", bucket_path, { prefix = prefix }))
157 if err or list_result.code ~= 200 then
158 return nil, err;
159 end
160 local list_bucket_result = xml.parse(list_result.body);
161 if list_bucket_result:get_child_text("IsTruncated") == "true" then
162 local max_keys = list_bucket_result:get_child_text("MaxKeys");
163 module:log("warn", "Paging truncated results not implemented, max %s %s returned", max_keys, self.store);
164 end
165 local keys = array();
166 for content in list_bucket_result:childtags("Contents") do
167 local key = url.parse_path(content:get_child_text("Key"));
168 keys:push(jid.unescape(key[3]));
169 end
170 return function()
171 return keys:pop();
172 end
155 end 173 end
156 174
157 module:provides("storage", driver); 175 module:provides("storage", driver);