Mercurial > prosody-modules
comparison mod_http_upload/mod_http_upload.lua @ 2467:290fef768a81
mod_http_upload: Forget upload slot under some error conditions
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 29 Jan 2017 17:22:37 +0100 |
| parents | e822900c87d4 |
| children | 3bff2848af12 |
comparison
equal
deleted
inserted
replaced
| 2466:349008f9452d | 2467:290fef768a81 |
|---|---|
| 101 return true; | 101 return true; |
| 102 end); | 102 end); |
| 103 | 103 |
| 104 -- http service | 104 -- http service |
| 105 local function upload_data(event, path) | 105 local function upload_data(event, path) |
| 106 if not pending_slots[path] then | 106 local uploader = pending_slots[path]; |
| 107 if not uploader then | |
| 107 module:log("warn", "Attempt to upload to unknown slot %q", path); | 108 module:log("warn", "Attempt to upload to unknown slot %q", path); |
| 108 return; -- 404 | 109 return; -- 404 |
| 109 end | 110 end |
| 110 local random, filename = path:match("^([^/]+)/([^/]+)$"); | 111 local random, filename = path:match("^([^/]+)/([^/]+)$"); |
| 111 if not random then | 112 if not random then |
| 119 local dirname = join_path(storage_path, random); | 120 local dirname = join_path(storage_path, random); |
| 120 if not lfs.mkdir(dirname) then | 121 if not lfs.mkdir(dirname) then |
| 121 module:log("warn", "Could not create directory %s for upload", dirname); | 122 module:log("warn", "Could not create directory %s for upload", dirname); |
| 122 return 500; | 123 return 500; |
| 123 end | 124 end |
| 125 pending_slots[path] = nil; | |
| 124 local full_filename = join_path(dirname, filename); | 126 local full_filename = join_path(dirname, filename); |
| 125 local fh, ferr = io.open(full_filename, "w"); | 127 local fh, ferr = io.open(full_filename, "w"); |
| 126 if not fh then | 128 if not fh then |
| 127 module:log("error", "Could not open file %s for upload: %s", full_filename, ferr); | 129 module:log("error", "Could not open file %s for upload: %s", full_filename, ferr); |
| 128 return 500; | 130 return 500; |
| 137 if not ok then | 139 if not ok then |
| 138 module:log("error", "Could not write to file %s for upload: %s", full_filename, err); | 140 module:log("error", "Could not write to file %s for upload: %s", full_filename, err); |
| 139 os.remove(full_filename); | 141 os.remove(full_filename); |
| 140 return 500; | 142 return 500; |
| 141 end | 143 end |
| 142 module:log("info", "File uploaded by %s to slot %s", pending_slots[path], random); | 144 module:log("info", "File uploaded by %s to slot %s", uploader, random); |
| 143 pending_slots[path] = nil; | |
| 144 return 200; | 145 return 200; |
| 145 end | 146 end |
| 146 | 147 |
| 147 -- FIXME Duplicated from net.http.server | 148 -- FIXME Duplicated from net.http.server |
| 148 | 149 |
