Skip to content

Commit

Permalink
working UX for inode name with invalid characters
Browse files Browse the repository at this point in the history
  • Loading branch information
jrief committed Nov 17, 2024
1 parent c30cd15 commit c0e1f8e
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 4 deletions.
1 change: 1 addition & 0 deletions client/admin/Item.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ export function ListItem(props) {
props.folderTabsRef.current.setFavoriteFolders(body.favorite_folders);
} else if (response.status === 409) {
alert(await response.text());
props.elementRef.current.querySelector('.inode-name').innerText = props.name;
} else {
console.error(response);
}
Expand Down
11 changes: 8 additions & 3 deletions finder/admin/folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

from finder.models.file import InodeModel, FileModel
from finder.models.folder import FolderModel, PinnedFolder
from finder.models.inode import DiscardedInode, InodeManager
from finder.models.inode import DiscardedInode, InodeManager, filename_validator
from finder.models.label import Label

from .inode import InodeAdmin
Expand Down Expand Up @@ -228,9 +228,14 @@ def update_inode(self, request, folder_id):
except (InodeModel.DoesNotExist, KeyError):
return HttpResponseNotFound(f"Inode(id={body.get('id', '<missing>')}) not found.")
current_folder = self.get_object(request, folder_id)
if current_folder.listdir(name=body['name'], is_folder=True).exists():
inode_name = body['name']
try:
filename_validator(inode_name)
except ValidationError as exc:
return HttpResponseBadRequest(exc.message, status=409)
if current_folder.listdir(name=inode_name, is_folder=True).exists():
msg = gettext("A folder named “{name}” already exists.")
return HttpResponseBadRequest(msg.format(name=body['name']), status=409)
return HttpResponseBadRequest(msg.format(name=inode_name), status=409)
update_values = {}
for field in self.get_fields(request, obj):
if field in body and body[field] != getattr(obj, field):
Expand Down
3 changes: 2 additions & 1 deletion finder/models/inode.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,9 @@ def get_queryset(self):
return queryset.filter(self.model.mime_types_query())



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

0 comments on commit c0e1f8e

Please sign in to comment.