79 if not uploads then return true; end |
79 if not uploads then return true; end |
80 uploads = array(uploads); |
80 uploads = array(uploads); |
81 local expiry = os.time() - max_age; |
81 local expiry = os.time() - max_age; |
82 local upload_window = os.time() - 900; |
82 local upload_window = os.time() - 900; |
83 uploads:filter(function (item) |
83 uploads:filter(function (item) |
|
84 local filename = item.filename; |
|
85 if item.dir then |
|
86 filename = join_path(storage_path, item.dir, item.filename); |
|
87 end |
84 if item.time < expiry then |
88 if item.time < expiry then |
85 local deleted, whynot = os.remove(item.filename); |
89 local deleted, whynot = os.remove(filename); |
86 if not deleted then |
90 if not deleted then |
87 module:log("warn", "Could not delete expired upload %s: %s", item.filename, whynot or "delete failed"); |
91 module:log("warn", "Could not delete expired upload %s: %s", filename, whynot or "delete failed"); |
88 end |
92 end |
89 return false; |
93 return false; |
90 elseif item.time < upload_window and not lfs.attributes(item.filename) then |
94 elseif item.time < upload_window and not lfs.attributes(filename) then |
91 return false; -- File was not uploaded or has been deleted since |
95 return false; -- File was not uploaded or has been deleted since |
92 end |
96 end |
93 return true; |
97 return true; |
94 end); |
98 end); |
95 return datamanager.list_store(username, host, module.name, uploads); |
99 return datamanager.list_store(username, host, module.name, uploads); |
159 repeat random_dir = uuid(); |
163 repeat random_dir = uuid(); |
160 until lfs.mkdir(join_path(storage_path, random_dir)) |
164 until lfs.mkdir(join_path(storage_path, random_dir)) |
161 or not lfs.attributes(join_path(storage_path, random_dir, filename)) |
165 or not lfs.attributes(join_path(storage_path, random_dir, filename)) |
162 |
166 |
163 local ok = datamanager.list_append(username, host, module.name, { |
167 local ok = datamanager.list_append(username, host, module.name, { |
164 filename = join_path(storage_path, random_dir, filename), size = filesize, time = os.time() }); |
168 filename = filename, dir = random_dir, size = filesize, time = os.time() }); |
|
169 |
165 if not ok then |
170 if not ok then |
166 origin.send(st.error_reply(stanza, "wait", "internal-server-failure")); |
171 origin.send(st.error_reply(stanza, "wait", "internal-server-failure")); |
167 return true; |
172 return true; |
168 end |
173 end |
169 |
174 |