Fix manage handlers ignoring multipart form bodies
The /manage page posts with FormData, i.e. multipart/form-data, but the edit, delete, tags, restore and empty-trash handlers parsed with r.ParseForm, which only reads urlencoded bodies. So every field came back empty: delete returned 200 with deleted:0 and moved nothing, edits saved nothing — while curl -d (urlencoded) worked, which is why tests and manual checks missed it. Parse with ParseMultipartForm (tolerating ErrNotMultipart so urlencoded still works), via a shared parseForm helper used by all manage handlers. handleUpload already did this. Also stop the UI reporting deleted:0 / updated:0 as success, and add a multipart regression test.
This commit is contained in:
1 parent
25384d3f3b
commit
bf75c9fe8e
4 files changed
+75
-9
No files matched your search
+11
-5
@@ -212,7 +212,9 @@
|
||||
const form = new FormData();
|
||||
form.append('slug', slug);
|
||||
try {
|
||||
await post('/api/delete', form);
|
||||
const res = await post('/api/delete', form);
|
||||
const j = await res.json().catch(() => ({}));
|
||||
if (!j.deleted) { flash('Not deleted — "' + slug + '" not found on the server', false); return; }
|
||||
el.remove();
|
||||
flash('Moved ' + slug + ' to trash', true);
|
||||
refreshBulk();
|
||||
@@ -233,8 +235,10 @@
|
||||
const form = new FormData();
|
||||
form.append('slugs', slugs.join(','));
|
||||
try {
|
||||
await post('/api/delete', form);
|
||||
flash('Moved ' + slugs.length + ' to trash', true);
|
||||
const res = await post('/api/delete', form);
|
||||
const j = await res.json().catch(() => ({}));
|
||||
if (!j.deleted) { flash('Nothing deleted — slugs not found on the server', false); return; }
|
||||
flash('Moved ' + j.deleted + ' to trash', true);
|
||||
await load();
|
||||
} catch (err) { flash('Delete failed: ' + err.message, false); }
|
||||
});
|
||||
@@ -247,9 +251,11 @@
|
||||
form.append('slugs', slugs.join(','));
|
||||
form.append(label, val);
|
||||
try {
|
||||
await post('/api/tags', form);
|
||||
const res = await post('/api/tags', form);
|
||||
const j = await res.json().catch(() => ({}));
|
||||
if (!j.updated) { flash('No posts updated', false); return; }
|
||||
document.getElementById(field).value = '';
|
||||
flash('Updated tags on ' + slugs.length + ' post(s)', true);
|
||||
flash('Updated tags on ' + j.updated + ' post(s)', true);
|
||||
await load();
|
||||
} catch (err) { flash('Tag update failed: ' + err.message, false); }
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user