Skip to content
Draft
Show file tree
Hide file tree
Changes from 95 commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
8fcb33f
feature/update-web-ui
mar10 Mar 25, 2025
ef71d37
WiP
mar10 Mar 25, 2025
d59f50a
Load and sort nodes; open subfolders
mar10 Mar 26, 2025
5812855
Icons, Splitter
mar10 Mar 26, 2025
3bd7c9f
Gutter
mar10 Mar 27, 2025
4fd1c96
Rename & command palette
mar10 Mar 28, 2025
2a5988c
File previews
mar10 Mar 28, 2025
fc57663
Show placeholder while loading and on error
mar10 Mar 29, 2025
cf2cf63
Add typing
mar10 Mar 29, 2025
81afc6e
Download button
mar10 Mar 29, 2025
f3fa3d4
Rename button
mar10 Mar 29, 2025
677e365
Delete button
mar10 Mar 29, 2025
8f87e50
Copy Link button
mar10 Mar 29, 2025
03b9d07
Notifications toast
mar10 Mar 29, 2025
61ae6c7
Upload button
mar10 Mar 29, 2025
9323093
WiP
mar10 Mar 30, 2025
3690726
Cfreate folder
mar10 Mar 30, 2025
48b4d45
Refactor type-classification
mar10 Mar 30, 2025
90e1d37
Merge branch 'mar10/issue336' of https://github.com/mar10/wsgidav int…
mar10 Mar 30, 2025
62d4b6b
Dropzone in preview
mar10 Mar 30, 2025
54b0db7
cleanup
mar10 Mar 30, 2025
955d860
Cleanup
mar10 Mar 31, 2025
29ade88
Merge branch 'mar10/issue336' of https://github.com/mar10/wsgidav int…
mar10 Apr 2, 2025
5a77d5e
Improve upload methods
mar10 Apr 2, 2025
8dc26e6
Merge branch 'mar10/issue336' of https://github.com/mar10/wsgidav int…
mar10 Apr 2, 2025
0fcffa3
Update previews.js
mar10 Apr 2, 2025
3f3909e
Some upload scenarioa
mar10 Apr 2, 2025
e90bd04
Remove vendored Wunderbaum
mar10 Apr 3, 2025
535e55b
Cleanup
mar10 Apr 3, 2025
d817de0
Drop files to the desktop
mar10 Apr 5, 2025
18ca796
WiP
mar10 Apr 5, 2025
e53896e
Merge branch 'mar10/issue336' of https://github.com/mar10/wsgidav int…
mar10 Apr 5, 2025
6ad46c1
Update widgets.js
mar10 Apr 5, 2025
6acedca
dblclick
mar10 Apr 6, 2025
5faaa7a
WiP
mar10 Apr 9, 2025
a8b6a8a
Reload tree
mar10 May 25, 2025
9adeef6
Show help
mar10 May 26, 2025
aa94844
Fix drop file over folder node
mar10 May 26, 2025
a5f660f
Sort folders first
mar10 May 30, 2025
64e578e
Make date sortable. (use timestamps)
mar10 May 31, 2025
cca8c51
Re-sort lazy branches
mar10 May 31, 2025
7eebf1c
Fix move nodes via d'n'd
mar10 May 31, 2025
e6f209a
Update script.js
mar10 May 31, 2025
4ceeedb
Init splitter toggle button
mar10 May 31, 2025
d7a5f68
Fix reload()
mar10 Jun 8, 2025
bd26428
Restrict preview size
mar10 Jun 8, 2025
1e5c823
Update previews.js
mar10 Jun 8, 2025
161eec6
Online-Editing for Office documents
mar10 Jun 9, 2025
6018517
The UOF standard
mar10 Jun 9, 2025
4f90acd
Flat office formats
mar10 Jun 9, 2025
6f3be96
update css
mar10 Jun 28, 2025
30b71c3
Rename
mar10 Jun 28, 2025
2a624a3
Fix ruff warnings
mar10 Jun 28, 2025
404640c
js-config
mar10 Jun 28, 2025
680d2d7
Rename modules, add persisto
mar10 Jun 29, 2025
1c6e251
persistent settings
mar10 Jun 29, 2025
c06b22b
Remove obsolete files
mar10 Jun 29, 2025
0c2a3ff
More settings
mar10 Jun 30, 2025
682b2eb
Lint: check indentation and whitespace
mar10 Jul 8, 2025
acf8948
Add command button logic and UI enhancements
mar10 Aug 30, 2025
f595d7f
Some samples
mar10 Mar 19, 2026
4a924cc
Merge branch 'master' into mar10/issue336
mar10 Mar 19, 2026
eb56a78
Merge branch 'master' into mar10/issue336
mar10 Mar 19, 2026
f1b9e12
Fix spelling
mar10 Mar 19, 2026
e34182a
Fix user display
mar10 Mar 19, 2026
2a25df7
Improve header
mar10 Mar 19, 2026
59e4180
Add breadcrumb
mar10 Mar 19, 2026
3f2525f
Fix tests (skip dir_boroser)
mar10 Mar 20, 2026
1aeb0c6
Fix tests
mar10 Mar 20, 2026
ef7cf78
Blend in title tag
mar10 Mar 20, 2026
e4c78b3
Update Dockerfile
mar10 Mar 20, 2026
b67b7ea
Display DwvClient errors
mar10 Mar 20, 2026
69367f9
Improve new-folder prompt
mar10 Mar 20, 2026
3e01f5b
Discard toasts
mar10 Mar 20, 2026
510f3bb
Make command column wider
mar10 Mar 20, 2026
0130c35
Fix dnd move
mar10 Mar 20, 2026
c8801bb
Some preview info
mar10 Mar 20, 2026
cea596e
Fix XSS
mar10 Mar 20, 2026
5948db7
Fix tests for different WebUIs
mar10 Mar 20, 2026
15e38ff
Default DirBrowser instead of DavExplorer for now
mar10 Mar 20, 2026
350a349
Reformat
mar10 Mar 20, 2026
1e6ef67
Fix top-level drop
mar10 Mar 20, 2026
82790e6
Update app.css
mar10 Mar 20, 2026
81962dd
Persistent preview pane state
mar10 Mar 20, 2026
17c7b1e
Use Wunderbaum from CDN
mar10 Mar 20, 2026
c4e7435
Handle duplicate folder creation
mar10 Mar 20, 2026
e8f4f19
Update logo
mar10 Mar 20, 2026
eae03e8
Initial plan
Copilot Mar 22, 2026
0777439
Apply review feedback: fix all issues from PR review comments
Copilot Mar 22, 2026
42aa75b
fix tox
mar10 Mar 22, 2026
8f5ec94
Fix drop browser -> desktop on Windows
mar10 Mar 22, 2026
3c1e4dc
Use Wunderbaum from CDN
mar10 Mar 22, 2026
8f41624
Fix folder create
mar10 Mar 22, 2026
f8591c1
Promp 'replace existing file?'
mar10 Mar 22, 2026
0c6371b
Nicer banner colors
mar10 Mar 22, 2026
87e36c7
Merge remote-tracking branch 'origin/copilot/sub-pr-337' into mar10/i…
mar10 Mar 22, 2026
97d474d
Add docs
mar10 Mar 22, 2026
83035be
Add feature support details for drag-and-drop functionality in DAV Ex…
mar10 Apr 18, 2026
cb99083
Improve Docker Hub workflow triggers and tagging
mar10 Apr 18, 2026
aa4d0d6
Move dir_borwser and dav_explorer to mw folder
mar10 Apr 18, 2026
4cc0088
Update upload_dockerhub.yml
mar10 Apr 18, 2026
0ed71d7
Update upload_dockerhub.yml
mar10 Apr 18, 2026
e338ec6
tox -e lint
mar10 Apr 18, 2026
9e95748
reformat with latest ruff
mar10 Apr 18, 2026
8bb345d
Update upload_dockerhub.yml
mar10 Apr 18, 2026
509fe28
Add health check to docker
mar10 Apr 19, 2026
4fb3417
Merge branch 'feature/custom-docker-config' into mar10/issue336
mar10 Apr 19, 2026
64cfe83
Use /public instead of /srv as prefix in examples
mar10 Apr 19, 2026
3728f4a
Enable DavExplorer by default
mar10 Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ wsgidav*.yaml
wsgidav-props.shelve.dat
wsgidav-props.shelve.dir
manifests/
wsgidav/dav_explorer/htdocs/wunderbaum.*
wsgidav/dir_browser_2/htdocs/wunderbaum.esm.js
8 changes: 6 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
# Changelog

## `feature/update-web-ui` / Unreleased

- WsgiDavExplorer: new web frontend that replaces DirBrowser by default.

## 4.4.0 / Unreleased

- [#343](https://github.com/mar10/wsgidav/issues/343)
- [#343](https://github.com/mar10/wsgidav/issues/343)
Add experimental middleware for impersonation (@leo9800)
- [#348](https://github.com/mar10/wsgidav/issues/348)
- [#348](https://github.com/mar10/wsgidav/issues/348)
Optionally set file/directory modification time when x-oc-mtime header presence (@leo9800)
- [#352](https://github.com/mar10/wsgidav/pull/352)
Apache htpasswd based domain controller (@leo9800)
Expand Down
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,12 @@ Main features:
Its open architecture allows to extend the functionality and integrate
WebDAV services into your project.<br>
Typical use cases are:
- Expose data structures as virtual, editable file systems.
- Allow online editing of MS Office documents.
- Expose data structures as virtual, editable file systems, that can be mapped in
_macoOS Finder_, _Windows File Explorer_, etc.
- Allow online editing of _MS Office_ and _LibreOffice_ documents.

- _DAV Explorer_: A simple built-in web interface allows up- and download files,
rename, move, copy, delete operations, and peviews.

## Status

Expand Down
Binary file added docs/source/DAV_Explorer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/source/api-doc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Package ``wsgidav``
wsgidav.dav_error
wsgidav.dav_provider
wsgidav.dir_browser
wsgidav.dav_explorer
wsgidav.error_printer
wsgidav.fs_dav_provider
wsgidav.http_authenticator
Expand Down
49 changes: 31 additions & 18 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,47 @@ Main Features
- Comes bundled with a server and a file system provider, so we can share a
directory right away from the command line.
- Designed to run behind any WSGI compliant server.
- Tested with different clients on different platforms (Windows, Linux, Mac).
- Tested with different clients on different platforms (Windows, Linux, macOS).
- Supports online editing of MS Office documents.
- Contains a simple web browser interface.
- SSL support
- Support for authentication using Basic or Digest scheme.
- Passes the `litmus test suite <http://www.webdav.org/neon/litmus/>`_.
- Open architecture allows to :doc:`user_guide_custom_providers`
(i.e. storage, locking, authentication, virtual file systems, ...).
- WsgiDAV is a `refactored version of PyFileServer <https://github.com/mar10/wsgidav/blob/master/docs/source/changelog04.md>`_
written by Ho Chun Wei.


DAV Explorer
------------
WsgiDAV comes with a slick web interface that allows to explore the DAV share and
perform basic operations (create, delete, move, copy, rename, ...) directly
in the browser, without the need for additional software or drive mapping. |br|
Up- and downloading of files is supported using drag-and-drop or file dialogs. |br|
Also inline editing of office documents is supported when MS Office or LibreOffice is
installed on the client machine.

.. image:: DAV_Explorer.png
:name: WsgiDAV explorer

.. note::

Release 4.0 introduces some refactorings and breaking changes. |br|
See :doc:`changes` for details.
DAV Explorer is available since version 4.4. |br|
It has beta status and is not enabled by default, but must be explicitly enabled
in the configuration file ``wsgidav.yaml``.


Supported Clients
-----------------

WsgiDAV comes with a web interface and was tested with different clients
(Windows File Explorer, macOS Finder, MS Office, LibreOffice, ...).

.. image:: teaser.png
:name: WsgiDAV clients

..
.. seealso::
:doc:`run-access`


Quickstart
Expand Down Expand Up @@ -76,7 +101,7 @@ WebDAV-aware client, such as MS Word, macOS Finder, Windows File Explorer, ...
$ wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=pam-login

**On Windows** we can enforce authentication against known users (e.g.
Windows NT Domain Controller) like so::
Windows Domain Controller) like so::

> wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=nt

Expand All @@ -96,18 +121,6 @@ for example::
$ docker run --rm -it -p 8080:8080 -v c:/temp:/var/wsgidav-root mar10/wsgidav


Supported Clients
=================

WsgiDAV comes with a web interface and was tested with different clients
(Windows File Explorer and drive mapping, MS Office, Ubuntu, Mac OS X, ...).

.. image:: teaser.png
:name: WsgiDAV clients

..
.. seealso::
:doc:`run-access`


.. |logo| image:: logo.png
Expand Down
15 changes: 11 additions & 4 deletions docs/source/reference_guide_architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ WsgiDAV implements this WSGI application stack::
http_authenticator.HTTPAuthenticator (middleware)
| \- Uses a domain controller object
|
dir_browser.WsgiDavDirBrowser (middleware, optional)
dav_explorer.WsgiDavExplorer (middleware, optional)
|
request_resolver.RequestResolver (middleware)
|
Expand Down Expand Up @@ -151,7 +151,7 @@ interface is implemented.
Applications
============

.. inheritance-diagram:: wsgidav.mw.base_mw wsgidav.dir_browser wsgidav.mw.cors wsgidav.mw.debug_filter wsgidav.dav_error wsgidav.error_printer wsgidav.http_authenticator wsgidav.rw_lock wsgidav.wsgidav_app wsgidav.request_server wsgidav.request_resolver
.. inheritance-diagram:: wsgidav.mw.base_mw wsgidav.dir_browser wsgidav.dav_explorer wsgidav.mw.cors wsgidav.mw.debug_filter wsgidav.dav_error wsgidav.error_printer wsgidav.http_authenticator wsgidav.rw_lock wsgidav.wsgidav_app wsgidav.request_server wsgidav.request_resolver
:parts: 2
:private-bases:

Expand Down Expand Up @@ -208,9 +208,9 @@ For every request:
``environ['httpauthentication.username']``


WsgiDavDirBrowser
WsgiDavExplorer
-----------------
Middleware :class:`wsgidav.dir_browser._dir_browser.WsgiDavDirBrowser`.
Middleware :class:`wsgidav.dav_explorer.app.WsgiDavExplorer`.
Handles GET requests on collections to display a HTML directory listing.

On init:
Expand All @@ -223,6 +223,13 @@ For every request:
Render collection members as directory (HTML table).


WsgiDavDirBrowser
-----------------
Middleware :class:`wsgidav.dir_browser._dir_browser.WsgiDavDirBrowser`.

Deprecated: replaced by :class:`wsgidav.dav_explorer.app.WsgiDavExplorer`.


RequestResolver
---------------
Middleware :class:`wsgidav.request_resolver.RequestResolver`.
Expand Down
13 changes: 9 additions & 4 deletions docs/source/sample_wsgidav.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
"/share2": "/path/to/share2"
},
"http_authenticator": {
"domain_controller": null, // Use simple_dc
"accept_basic": false, // Force digest authentication
"domain_controller": null, // Use simple_dc
"accept_basic": false, // Force digest authentication
"accept_digest": true,
"default_to_digest": true,
"trusted_auth_header": null
Expand All @@ -33,7 +33,7 @@
"password": "abc123"
}
},
"/share2": true // Allow anonymous access
"/share2": true // Allow anonymous access
}
},
"dir_browser": {
Expand All @@ -43,5 +43,10 @@
"davmount_links": false,
"ms_sharepoint_support": true,
"htdocs_path": null
},
"dav_explorer": {
"enable": true,
"response_trailer": "",
"htdocs_path": null
}
}
}
1 change: 1 addition & 0 deletions docs/source/user_guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ This section describes how to *use* the WsgiDAV library. |br|
user_guide_cli
user_guide_configure
user_guide_access
user_guide_dav_explorer
user_guide_lib
user_guide_custom_providers.rst
faq.rst
4 changes: 2 additions & 2 deletions docs/source/user_guide_cli.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ Command Line Interface

The WsgiDAV server was tested with these platforms

* Mac OS X
* Ubuntu
* macOS
* Linux
* Windows

To serve the ``/tmp`` folder as WebDAV ``/`` share, simply run::
Expand Down
10 changes: 5 additions & 5 deletions docs/source/user_guide_configure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ pass the class instead of the instantiated object.
The built-in middleware derives from :class:`~wsgidav.mw.base_mw.BaseMiddleware`,
so we can simplify as::

from wsgidav.dir_browser import WsgiDavDirBrowser
from wsgidav.dav_explorer import WsgiDavExplorer
from wsgidav.mw.debug_filter import WsgiDavDebugFilter
from wsgidav.error_printer import ErrorPrinter
from wsgidav.http_authenticator import HTTPAuthenticator
Expand All @@ -136,7 +136,7 @@ so we can simplify as::
WsgiDavDebugFilter,
ErrorPrinter,
HTTPAuthenticator,
WsgiDavDirBrowser,
WsgiDavExplorer,
RequestResolver, # this must be the last middleware item
],
...
Expand All @@ -147,7 +147,7 @@ removes the directory browser, and adds a third-party debugging tool::

import dozer

# from wsgidav.dir_browser import WsgiDavDirBrowser
# from wsgidav.dav_explorer import WsgiDavExplorer
from wsgidav.mw.debug_filter import WsgiDavDebugFilter
from wsgidav.error_printer import ErrorPrinter
from wsgidav.http_authenticator import HTTPAuthenticator
Expand All @@ -166,7 +166,7 @@ removes the directory browser, and adds a third-party debugging tool::
WsgiDavDebugFilter,
ErrorPrinter,
HTTPAuthenticator,
# WsgiDavDirBrowser,
# WsgiDavExplorer,
RequestResolver, # this must be the last middleware item
],
...
Expand All @@ -191,7 +191,7 @@ should be explicitly listed::
- wsgidav.mw.debug_filter.WsgiDavDebugFilter
- wsgidav.error_printer.ErrorPrinter
- wsgidav.http_authenticator.HTTPAuthenticator
- wsgidav.dir_browser.WsgiDavDirBrowser
- wsgidav.dav_explorer.WsgiDavExplorer
- wsgidav.request_resolver.RequestResolver

It is also possible to pass options as named args (i.e. 'kwargs')::
Expand Down
40 changes: 40 additions & 0 deletions docs/source/user_guide_dav_explorer.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
============
DAV Explorer
============

*This section describes how to use the built-in WsgiDAV web interface, DAV Explorer.*

WsgiDAV comes with a slick web interface that allows to explore the DAV share and
perform basic operations (create, delete, move, copy, rename, ...) directly
in the browser, without the need for additional software or drive mapping. |br|
Up- and downloading of files is supported using drag-and-drop or file dialogs. |br|
Also inline editing of office documents is supported when MS Office or LibreOffice is
installed on the client machine.

.. image:: DAV_Explorer.png
:name: WsgiDAV explorer

.. note::

DAV Explorer is available since version 4.4. |br|
It has beta status and is not enabled by default, but must be explicitly enabled
in the configuration file ``wsgidav.yaml``.

.. toctree::
:maxdepth: 1

Configuration
-------------

TODO: Add configuration instructions here. |br|
See :doc:`user_guide_configure` for more details on how to configure WsgiDAV.

Using DAV Explorer
------------------

TODO: Add detailed instructions here.

Known Limitations
-----------------

TODO: Add detailed instructions here.
4 changes: 2 additions & 2 deletions docs/source/user_guide_lib.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ Using the Library
:hidden:


This section describes how to use the ``wsgidav`` package to implement custom
WebDAV servers.
*This section describes how to use the ``wsgidav`` package in your Python projects
to implement custom WebDAV servers.*


.. todo::
Expand Down
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ select = [
"T", # print, ...
# "D", # pydocstyle
"I", # isort
# "C", # codespell
# "C", # codespell
"W191", # Indentation contains tabs
"W292", # Trailing whitespace
"W293", # Blank line contains whitespace
# "SIM", #
]

Expand Down
29 changes: 9 additions & 20 deletions sample_wsgidav.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,9 @@ middleware_stack:
# - wsgidav.mw.debug_filter.WsgiDavDebugFilter
- wsgidav.error_printer.ErrorPrinter
- wsgidav.http_authenticator.HTTPAuthenticator
# - wsgidav.dir_browser.WsgiDavDirBrowser
- wsgidav.dav_explorer.WsgiDavExplorer
# - wsgidav.mw.impersonator.Impersonator
- wsgidav.dir_browser.WsgiDavDirBrowser
- wsgidav.request_resolver.RequestResolver # this must be the last middleware item

# ==============================================================================
Expand Down Expand Up @@ -354,12 +355,12 @@ logging:


# ----------------------------------------------------------------------------
# WsgiDavDirBrowser
# WsgiDavExplorer

dir_browser:
dav_explorer:
enable: true
#: List of fnmatch patterns that will be hidden in the directory listing
ignore:
ignore_list:
- '.DS_Store' # macOS folder meta data
- 'Thumbs.db' # Windows image previews
- '._*' # macOS hidden data files
Expand All @@ -371,22 +372,10 @@ dir_browser:
response_trailer: true
#: Display the name and realm of the authenticated user (or 'anomymous')
show_user: true
show_logout: true
#: Send <dm:mount> response if request URL contains '?davmount'
#: (See https://tools.ietf.org/html/rfc4709)
davmount: true
#: Add a 'Mount' link at the top of the listing
davmount_links: false
#: Invoke MS Office documents for editing using WebDAV by adding a JavaScript
#: click handler.
#: - For IE 11 and below invokes the SharePoint ActiveXObject("SharePoint.OpenDocuments")
#: - If the custom legacy Firefox plugin is available, it will be used
#: https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ff407576(v%3Doffice.14)
#: - Otherwise the Office URL prefix is used (e.g. 'ms-word:ofe|u|http://server/path/file.docx')
ms_sharepoint_support: true
#: Invoke Libre Office documents for editing using WebDAV
libre_office_support: true
show_login: true
#: Generate `ms-word:ofe|u|" prefix for office URLs (Microsoft and LibreOffice)
office_support: true
#: The path to the directory that contains template.html and associated
#: assets.
#: The default is the htdocs directory within the dir_browser directory.
#: The default is the htdocs directory within the dav_explorer directory.
htdocs_path: null
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ exclude =
# CHANGELOG.md
wsgidav =
dir_browser/htdocs/*.*
dav_explorer/htdocs/*.*


[options.data_files]
Expand Down
Loading
Loading