Issue Description
Following the migration guide, I imported the FileNodes via WebDAV.
This leads to the root folder (which stalwart names based on the account’s display name) being imported as a FileNode. For user accounts this regularly contains characters that have to be URL-encoded, such as spaces or diacritics.
When exporting this FileNode tree to a current stalwart server, this root folder is created. (The fact that this modifies the directory tree by inserting the root node as a sub node is a separate issue). When querying the stalwart server via e.g.
curl -u [email protected] -X PROPFIND https://api.example.com/dav/file/[email protected]/ | yq -p xml -o xml, stalwart returns a filenode for the root node with
href: /dav/file/admin%40example.com/
display name: System administrator
as well as a filenode with
href: /dav/file/admin%40example.com/System administrator/
display name: System administrator
Note that while the @ is correctly escaped with %40 in the relative href path, the space in System administrator is not.
I assume that vandelay creates the FileNodes via the JMAP API.
Expected Behavior
FileNodes imported by vandelay via WebDAV and exported to a new server are correctly escaped in the WebDAV API.
Actual Behavior
FileNodes imported by vandelay via WebDAV and exported to a new server are not escaped in the WebDAV API.
Reproduction Steps
- Setup stalwart v0.15.x server A
- Import directory tree of the ‘System administrator’ account using vandelay from server A
- Setup stalwart v0.16.x server B
- Export directory tree to the ‘System administrator’ account on server B
- Query WebDAV using e.g. curl (see above)
Stalwart Version
v0.16.x
Installation Method
Docker
Database Backend
RocksDB
Blob Storage
RocksDB
Search Engine
Internal
Directory Backend
Internal
Additional Context
Before posting, I have searched for the term ‘vandelay webdav’ and did not identify any related issues.
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on