Skip to content

Commit c0e1f8e

Browse files
committed
working UX for inode name with invalid characters
1 parent c30cd15 commit c0e1f8e

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

client/admin/Item.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ export function ListItem(props) {
152152
props.folderTabsRef.current.setFavoriteFolders(body.favorite_folders);
153153
} else if (response.status === 409) {
154154
alert(await response.text());
155+
props.elementRef.current.querySelector('.inode-name').innerText = props.name;
155156
} else {
156157
console.error(response);
157158
}

finder/admin/folder.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from finder.models.file import InodeModel, FileModel
1515
from finder.models.folder import FolderModel, PinnedFolder
16-
from finder.models.inode import DiscardedInode, InodeManager
16+
from finder.models.inode import DiscardedInode, InodeManager, filename_validator
1717
from finder.models.label import Label
1818

1919
from .inode import InodeAdmin
@@ -228,9 +228,14 @@ def update_inode(self, request, folder_id):
228228
except (InodeModel.DoesNotExist, KeyError):
229229
return HttpResponseNotFound(f"Inode(id={body.get('id', '<missing>')}) not found.")
230230
current_folder = self.get_object(request, folder_id)
231-
if current_folder.listdir(name=body['name'], is_folder=True).exists():
231+
inode_name = body['name']
232+
try:
233+
filename_validator(inode_name)
234+
except ValidationError as exc:
235+
return HttpResponseBadRequest(exc.message, status=409)
236+
if current_folder.listdir(name=inode_name, is_folder=True).exists():
232237
msg = gettext("A folder named “{name}” already exists.")
233-
return HttpResponseBadRequest(msg.format(name=body['name']), status=409)
238+
return HttpResponseBadRequest(msg.format(name=inode_name), status=409)
234239
update_values = {}
235240
for field in self.get_fields(request, obj):
236241
if field in body and body[field] != getattr(obj, field):

finder/models/inode.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,9 @@ def get_queryset(self):
166166
return queryset.filter(self.model.mime_types_query())
167167

168168

169+
169170
def filename_validator(value):
170-
pattern = re.compile(r"^[\w\d &%!/\\()\[\]{}._#~+-]+$")
171+
pattern = re.compile(r"^[\w\d\s\.&%!_#~+-]+$")
171172
if not pattern.match(value):
172173
msg = "'{filename}' is not a valid filename."
173174
raise ValidationError(msg.format(filename=value))

0 commit comments

Comments
 (0)