test/wsgidav/wsgidav.yaml

branch
dav-2
changeset 902
06fa328989ee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/wsgidav/wsgidav.yaml	Sat Jan 24 13:56:19 2026 +0100
@@ -0,0 +1,360 @@
+# WsgiDAV configuration file
+#
+# 1. Rename this file to `wsgidav.yaml`.
+# 2. Adjust settings as appropriate.
+# 3. Run `wsgidav` from the same directory or pass file path with `--config` option.
+#
+# See https://wsgidav.readthedocs.io/en/latest/user_guide_configure.html
+#
+# ============================================================================
+# SERVER OPTIONS
+
+#: Run WsgiDAV inside this  WSGI server.
+#: Supported servers:
+#:     cheroot, ext-wsgiutils, gevent, gunicorn, paste, uvicorn, wsgiref
+#: 'wsgiref' and 'ext_wsgiutils' are simple builtin servers that should *not* be
+#: used in production.
+#: All other servers must have been installed before, e.g. `pip install cheroot`.
+#: (The binary MSI distribution already includes 'cheroot'.)
+#: NOTE: Using 'gunicorn' with more than 1 worker can cause problems with the
+#: in-memory and shelve-based lock storage as both are not safe for concurrent
+#: access. (see issue #332) Instead, you can use 'gunicorn' with multiple `threads`
+#: or try the 'redis' based lock storage (#186).
+#: Default: 'cheroot', use the `--server` command line option to change this.
+
+server: cheroot
+
+#: Server specific arguments, passed to the server. For example cheroot:
+#:   https://cheroot.cherrypy.dev/en/latest/pkg/cheroot.wsgi.html#cheroot.wsgi.Server
+# server_args:
+#     max: -1
+#     numthreads: 10
+#     request_queue_size: 5
+#     shutdown_timeout: 5
+#     timeout: 10
+
+# Server hostname (default: localhost, use --host on command line)
+host: 127.0.0.1
+
+# Server port (default: 8080, use --port on command line)
+port: 8182
+
+# Transfer block size in bytes
+block_size: 8192
+
+#: Add the MS-Author-Via Response Header to OPTIONS command to allow editing
+#: with Microsoft Office (default: true)
+add_header_MS_Author_Via: true
+
+hotfixes:
+    #: Handle Microsoft's Win32LastModifiedTime property.
+    #: This is useful only in the case when you copy files from a Windows
+    #: client into a WebDAV share. Windows sends the "last modified" time of
+    #: the file in a Microsoft extended property called "Win32LastModifiedTime"
+    #: instead of the standard WebDAV property "getlastmodified". So without
+    #: this config option set to "True", the "last modified" time of the copied
+    #: file will be "now" instead of its original value.
+    #: The proper solution for dealing with the Windows WebDAV client is to use
+    #: a persistent property manager. This setting is merely a work-around.
+    #: NOTE: Works with Win10, can't work with Win7. Other versions untested.
+    emulate_win32_lastmod: false
+    #: Re-encode PATH_INFO using UTF-8 (falling back to ISO-8859-1).
+    #: This seems to be wrong, since per PEP 3333 PATH_INFO is always ISO-8859-1
+    #: encoded (see https://www.python.org/dev/peps/pep-3333/#unicode-issues).
+    #: However it also seems to resolve errors when accessing resources with
+    #: Chinese characters, for example (see issue #73).
+    re_encode_path_info: true
+    #: Force unquoting of PATH_INFO. This should already be done by the WSGI
+    #: Framework, so this setting should only be used to fix unexpected problems
+    #: there (false fixes issue #8, true fixes issue #228).
+    unquote_path_info: false
+    #: Hotfix for WinXP / Vista: accept 'OPTIONS /' for a 'OPTIONS *'
+    #: (default: false)
+    treat_root_options_as_asterisk: false
+
+
+# ----------------------------------------------------------------------------
+# SSL Support
+
+#: The certificate should match the servers hostname, so the bogus certs will
+#: not work in all scenarios.
+#: (Paths can be absolute or relative to this config file.)
+
+# ssl_certificate: 'wsgidav/server/sample_bogo_server.crt'
+# ssl_private_key: 'wsgidav/server/sample_bogo_server.key'
+# ssl_certificate_chain: null
+
+#: Cheroot server supports 'builtin' and 'pyopenssl' (default: 'builtin')
+# ssl_adapter: 'pyopenssl'
+
+# ----------------------------------------------------------------------------
+
+#: Modify to customize the WSGI application stack.
+#: See here for an example how to add custom middlewares:
+#:   https://wsgidav.readthedocs.io/en/latest/user_guide_configure.html#middleware-stack
+middleware_stack:
+    - wsgidav.mw.cors.Cors
+    # - wsgidav.mw.debug_filter.WsgiDavDebugFilter
+    - wsgidav.error_printer.ErrorPrinter
+    - wsgidav.http_authenticator.HTTPAuthenticator
+    # - wsgidav.mw.impersonator.Impersonator
+    - wsgidav.dir_browser.WsgiDavDirBrowser
+    - wsgidav.request_resolver.RequestResolver  # this must be the last middleware item
+
+# ==============================================================================
+# SHARES
+
+#: Application root, applied before provider mapping shares, e.g. 
+#:   <mount_path>/<share_name>/<res_path>
+#: Set this to the mount point (aka location) when WsgiDAV is running behind a 
+#: reverse proxy.
+#: If set, the mount path must have a leading (but not trailing) slash.
+mount_path: null
+
+#: Route share paths to DAVProvider instances
+#: By default a writable `FilesystemProvider` is assumed, but can be forced
+#: to read-only.
+#: Note that a DomainController may still restrict access completely or prevent
+#: editing depending on authentication.
+#:
+#: The following syntax variants are supported to use FilesystemProvider:
+#:     <share_path>: <folder_path>
+#: or
+#:     <share_path>: { 'root': <folder_path>, 'readonly': <bool> }
+#:
+#: or instantiate an arbitrary custom class:
+#:
+#:     <share_path>: { 'class': <class_path>, args: [<arg>, ...], kwargs: {<arg>: <val>, ...} }
+
+provider_mapping:
+    '/': 'testrepo'
+
+#: Additional configuration passed to `FilesystemProvider(..., fs_opts)`
+fs_dav_provider:
+    #: Mapping from request URL to physical file location, e.g.
+    #: make sure that a `/favicon.ico` URL is resolved, even if a `*.html`
+    #: or `*.txt` resource file was opened using the DirBrowser
+    # shadow_map:
+    #     '/favicon.ico': 'file_path/to/favicon.ico'
+    
+    #: Serve symbolic link files and folders (default: false)
+    follow_symlinks: false
+
+# ==============================================================================
+# AUTHENTICATION
+http_authenticator:
+    #: Allow basic authentication
+    accept_basic: true
+    #: Allow digest authentication
+    accept_digest: true
+    #: true (default digest) or false (default basic)
+    default_to_digest: true
+    #: Header field that will be accepted as authorized user.
+    #: Including quotes, for example: trusted_auth_header = 'REMOTE_USER'
+    trusted_auth_header: null
+    #: Domain controller that is used to resolve realms and authorization.
+    #: Default null: which uses SimpleDomainController and the
+    #: `simple_dc.user_mapping` option below.
+    #: (See http://wsgidav.readthedocs.io/en/latest/user_guide_configure.html
+    #: for details.)
+    domain_controller: null
+    # domain_controller: wsgidav.dc.simple_dc.SimpleDomainController
+    # domain_controller: wsgidav.dc.pam_dc.PAMDomainController
+    # domain_controller: wsgidav.dc.nt_dc.NTDomainController
+
+
+# Additional options for SimpleDomainController only:
+simple_dc:
+    # Access control per share.
+    # These routes must match the provider mapping.
+    # NOTE: Provider routes without a matching entry here, are inaccessible.
+    user_mapping:
+        '*':  # default (used for all shares that are not explicitly listed)
+            'dav':
+                password: 'testdavutils'
+                # Optional: passed to downstream middleware as environ["wsgidav.auth.roles"]
+                # roles: ['editor']
+
+# Additional options for NTDomainController only:
+nt_dc:
+    preset_domain: null
+    preset_server: null
+
+# Additional options for PAMDomainController only:
+pam_dc:
+    service: 'login'
+    encoding: 'utf-8'
+    resetcreds: true
+
+
+# ----------------------------------------------------------------------------
+# User/Group Impersonating
+# (Requires `wsgidav.mw.impersonator.Impersonator`, which is disabled by default.)
+impersonator:
+    # enabling impersonating
+    enable: false
+
+    # custom map WebDAV (HTTP) usernames to Unix usernames
+    # custom_user_mapping:
+    #     leonlee: leo
+    #     jenifer: jenny
+
+    # or, use WebDAV (HTTP) usernames as is
+    custom_user_mapping: null
+
+
+# ----------------------------------------------------------------------------
+# CORS
+# (Requires `wsgidav.mw.cors.Cors`, which is enabled by default.)
+cors:
+    #: List of allowed Origins or '*'
+    #: Default: false, i.e. prevent CORS
+    allow_origin: null
+    # allow_origin: '*'
+    # allow_origin:
+    #   - 'https://example.com'
+    #   - 'https://localhost:8081'
+
+    #: List or comma-separated string of allowed methods (returned as
+    #: response to preflight request)
+    allow_methods:
+    # allow_methods: POST,HEAD
+    #: List or comma-separated string of allowed header names (returned as
+    #: response to preflight request)
+    allow_headers:
+    #   - X-PINGOTHER
+    #: List or comma-separated string of allowed headers that JavaScript in
+    #: browsers is allowed to access.
+    expose_headers:
+    #: Set to true to allow responses on requests with credentials flag set
+    allow_credentials: false
+    #: Time in seconds for how long the response to the preflight request can
+    #: be cached (default: 5)
+    max_age: 600
+    #: Add custom response headers (dict of header-name -> header-value items)
+    #: (This is not related to CORS or required to implement CORS functionality)
+    add_always:
+    #    'X-Foo-Header: 'qux'
+
+# ----------------------------------------------------------------------------
+# Property Manager
+# null: (default) no support for dead properties
+# true: Use wsgidav.prop_man.property_manager.PropertyManager
+#       which is an in-memory property manager (NOT persistent)
+#
+# Example: Use persistent shelve based property manager
+#     property_manager:
+#        class: wsgidav.prop_man.property_manager.ShelvePropertyManager
+#        kwargs:
+#            storage_path: 'wsgidav-props.shelve'
+
+property_manager: null
+
+#: Optional additional live property modification
+#: Note: by default live properties like file size and last-modified time are
+#: read-only, but that can be overridden here if the underlying DAV provider
+#: supports it. For now only the FileSystemProvider supports it and only namely
+#: changes to the last-modified timestamp. Enable it with the mutable_live_props
+#: list as below to allow clients to use the utime system call or e.g. the
+#: touch or cp / rsync commands with the preserve-timestamp flags on a mounted
+#: DAV share.
+#: Please note that the timestamp is set on the actual file or directory, so it
+#: is persistent even for in-memory property managers. It should also be noted
+#: that mutable last-modified may not be compliant with the RFC 4918.
+mutable_live_props:
+    # Enable to allow clients to use e.g. the touch or cp / rsync commands with the
+    # preserve-timestamp flags in a mounted DAV share (may be RFC4918 incompliant)
+    - '{DAV:}getlastmodified'
+
+
+# ----------------------------------------------------------------------------
+# Lock Manager Storage
+#
+# null: No lock support
+# true: (default) shortcut for
+#     lock_storage: wsgidav.lock_man.lock_storage.LockStorageDict
+#
+# Note that the default LockStorageDict works in-memory, so it is
+# NOT persistent.
+#
+# Example: Use persistent shelve based lock storage:
+#     lock_storage:
+#         class: wsgidav.lock_man.lock_storage.LockStorageShelve
+#         kwargs:
+#             storage_path: /path/to/wsgidav_locks.shelve
+#
+# Check the documentation on how to develop custom lock storage.
+
+lock_storage: true
+
+
+# ==============================================================================
+# DEBUGGING
+
+#: Set verbosity level (can be overridden by -v or -q arguments)
+verbose: 3
+
+#: Suppress version info in HTTP response headers and error responses
+suppress_version_info: false
+
+logging:
+    #: Enable logging when using wsgidav in library mode (always on, when running as CLI)
+    enable: null
+    #: Set logging output format
+    #: (see https://docs.python.org/3/library/logging.html#logging.Formatter)
+    logger_date_format: '%H:%M:%S'
+    logger_format: '%(asctime)s.%(msecs)03d - %(levelname)-8s: %(message)s'
+    # Example: Add date,thread id, and logger name:
+    # logger_date_format: '%Y-%m-%d %H:%M:%S'
+    # logger_format: '%(asctime)s.%(msecs)03d - <%(thread)05d> %(name)-27s %(levelname)-8s: %(message)s'
+
+    #: Enable specific module loggers
+    #: E.g. ['lock_manager', 'property_manager', 'http_authenticator', ...]
+    # enable_loggers: ['http_authenticator', ]
+
+    # Enable max. logging for certain http methods
+    # E.g. ['COPY', 'DELETE', 'GET', 'HEAD', 'LOCK', 'MOVE', 'OPTIONS', 'PROPFIND', 'PROPPATCH', 'PUT', 'UNLOCK']
+    debug_methods: []
+
+    # Enable max. logging during  litmus suite tests that contain certain strings
+    # E.g. ['lock_excl', 'notowner_modify', 'fail_cond_put_unlocked', ...]
+    debug_litmus: []
+
+
+# ----------------------------------------------------------------------------
+# WsgiDavDirBrowser
+
+dir_browser:
+    enable: true
+    #: List of fnmatch patterns that will be hidden in the directory listing
+    ignore:
+        - '.DS_Store'  # macOS folder meta data
+        - 'Thumbs.db'  # Windows image previews
+        - '._*'  # macOS hidden data files
+    #: Add a trailing slash to directory URLs (by generating a 301 redirect)
+    directory_slash: true
+    #: Display WsgiDAV icon in header
+    icon: true
+    #: Raw HTML code, appended as footer (true: use a default trailer)
+    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
+    #: The path to the directory that contains template.html and associated
+    #: assets.
+    #: The default is the htdocs directory within the dir_browser directory.
+    htdocs_path: null

mercurial