From 8f8f431d4d4a352555ec36221c4cc0928a1f7576 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Sat, 20 Jun 2026 20:02:32 +0800 Subject: [PATCH] =?UTF-8?q?plugins(files):=20Feature=2011=20=E2=80=94=20Re?= =?UTF-8?q?name=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Invalid chars: \ / : * ? " < > | and control chars (0x00-0x1f) - Invalid names: '.', '..', leading/trailing spaces, trailing dot - Collision check via api.files.metadata before rename - Special case for case-only difference - Errors shown in renameInput.placeholder --- plugins/files/frontend/src/index.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/plugins/files/frontend/src/index.js b/plugins/files/frontend/src/index.js index 9c2aff5..175c40c 100644 --- a/plugins/files/frontend/src/index.js +++ b/plugins/files/frontend/src/index.js @@ -609,15 +609,31 @@ cancelRename(); return; } + if (/[\\/:*?"<>|\x00-\x1f]/.test(newName)) { + renameInput.placeholder = 'Invalid characters in name'; + return; + } + if (newName === '.' || newName === '..' || newName[0] === ' ' || newName[newName.length - 1] === ' ' || newName[newName.length - 1] === '.') { + renameInput.placeholder = 'Invalid name'; + return; + } var from = renameTarget.relativePath; var targetParent = parentPath(from); var to = targetParent ? targetParent + '/' + newName : newName; - api.files.move(from, to, { overwrite: false }).then(function () { - cancelRename(); - loadEntries(); - }).catch(function (err) { - renameInput.value = renameTarget.name; - renameInput.placeholder = 'Error: ' + ((err && err.message) ? err.message : String(err)); + api.files.metadata(to).then(function () { + if (to.toLowerCase() === from.toLowerCase() && to !== from) { + renameInput.placeholder = 'Name differs only by case'; + return; + } + renameInput.placeholder = 'A file with that name already exists'; + }, function () { + api.files.move(from, to, { overwrite: false }).then(function () { + cancelRename(); + loadEntries(); + }).catch(function (err) { + renameInput.value = renameTarget.name; + renameInput.placeholder = 'Error: ' + ((err && err.message) ? err.message : String(err)); + }); }); }