{"id":13752460,"url":"https://github.com/micromata/dave","last_synced_at":"2025-05-09T19:32:13.185Z","repository":{"id":40743667,"uuid":"129098289","full_name":"micromata/dave","owner":"micromata","description":"A totally simple and very easy to configure stand alone webdav server","archived":true,"fork":false,"pushed_at":"2023-10-20T17:52:15.000Z","size":21972,"stargazers_count":356,"open_issues_count":20,"forks_count":47,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-05T15:58:49.627Z","etag":null,"topics":["golang","https","standalone","webdav","webdav-server"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/micromata.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-11T13:29:45.000Z","updated_at":"2025-04-25T19:23:30.000Z","dependencies_parsed_at":"2024-06-18T21:33:48.090Z","dependency_job_id":"0fa31d1a-e62d-4d6b-8f07-cfefa9754e38","html_url":"https://github.com/micromata/dave","commit_stats":null,"previous_names":["micromata/swd","micromata/daffy"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micromata%2Fdave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micromata%2Fdave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micromata%2Fdave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micromata%2Fdave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/micromata","download_url":"https://codeload.github.com/micromata/dave/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253312330,"owners_count":21888621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","https","standalone","webdav","webdav-server"],"created_at":"2024-08-03T09:01:06.186Z","updated_at":"2025-05-09T19:32:12.763Z","avatar_url":"https://github.com/micromata.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/micromata/dave.svg?branch=master)](https://travis-ci.org/micromata/dave)\n[![Go Report](https://goreportcard.com/badge/github.com/micromata/dave)](https://goreportcard.com/report/github.com/micromata/dave)\n\n# dave - The simple WebDAV server\n\n## Sorry, this project is unmaintained 😢\n\nThanks to all contributors for your incredible work! \n\n\n## Introduction\n\n_dave_ is a simple WebDAV server that provides the following features:\n\n- Single binary that runs under Windows, Linux and OSX.\n- Authentication via HTTP-Basic.\n- TLS support - if needed.\n- A simple user management which allows user-directory-jails as well as full admin access to\n  all subdirectories.\n- Live config reload to allow editing of users without downtime.\n- A cli tool to generate BCrypt password hashes.\n\nIt perfectly fits if you would like to give some people the possibility to upload, download or\nshare files with common tools like the OSX Finder, Windows Explorer or Nautilus under Linux\n([or many other tools](https://en.wikipedia.org/wiki/Comparison_of_WebDAV_software#WebDAV_clients)).\n\nThe project name _dave_ is an abbreviation for: **D**istributed **A**uthoring and **V**ersioning\nmade **e**asy.\n\n## Table of Contents\n\n- [Configuration](#configuration)\n  * [First steps](#first-steps)\n  * [TLS](#tls)\n  * [Behind a proxy](#behind-a-proxy)\n  * [User management](#user-management)\n  * [Logging](#logging)\n  * [Live reload](#live-reload)\n- [Installation](#installation)\n  * [Binary-Installation](#binary-installation)\n  * [Build from sources](#build-from-sources)\n  * [Build and run with Docker](#build-and-run-with-docker)\n- [Connecting](#connecting)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Configuration\n\nThe configuration is done in form of a yaml file. _dave_ will scan the\nfollowing locations for the presence of a `config.yaml` in the following\norder:\n\n- The directory `./config`\n- The directory `$HOME/.swd` (swd was the initial project name of dave)\n- The directory `$HOME/.dave`\n- The current working directory `.`\n\nAlternatively, the path to a configuration file can be specified on the\ncommand-line:\n\n```sh\ndave --config /path/to/config.yaml\n```\n\n### First steps\n\nHere an example of a very simple but functional configuration:\n\n```yaml\naddress: \"127.0.0.1\"    # the bind address\nport: \"8000\"            # the listening port\ndir: \"/home/webdav\"     # the provided base dir\nprefix: \"/webdav\"       # the url-prefix of the original url\nusers:\n  user:                 # with password 'foo' and jailed access to '/home/webdav/user'\n    password: \"$2a$10$yITzSSNJZAdDZs8iVBQzkuZCzZ49PyjTiPIrmBUKUpB0pwX7eySvW\"\n    subdir: \"/user\"\n  admin:                # with password 'foo' and access to '/home/webdav'\n    password: \"$2a$10$DaWhagZaxWnWAOXY0a55.eaYccgtMOL3lGlqI3spqIBGyM0MD.EN6\"\n```\n\nWith this configuration you'll grant access for two users and the WebDAV\nserver is available under `http://127.0.0.1:8000/webdav`.\n\n### TLS\n\nAt first, use your favorite toolchain to obtain a SSL certificate and\nkeyfile (if you don't  already have some).\n\nHere an example with `openssl`:\n\n```sh\n# Generate a keypair\nopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365\n# Remove the passphrase from the key file\nopenssl rsa -in key.pem -out clean_key.pem\n```\n\nNow you can reference your keypair in the configuration via:\n\n```yaml\naddress: \"127.0.0.1\"    # the bind address\nport: \"8000\"            # the listening port\ndir: \"/home/webdav\"     # the provided base directory\ntls:\n  keyFile: clean_key.pem\n  certFile: cert.pem\nusers:\n...\n```\n\nThe presence of the `tls` section is completely enough to let the server\nstart with a TLS secured HTTPS connection.\n\nIn the current release version you must take care, that the private key\ndoesn't need a passphrase. Otherwise starting the server will fail.\n\n### Cross Origin Resource Sharing (CORS)\n\nIn case you intend to operate this server from a web browser based application,\nyou might need to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)\naccess. To achieve that, you can configure the host you want to grant access to:\n\n```yaml\ncors:\n  origin: \"*\"        # the origin to allow, or '*' for all\n  credentials: true  # whether to allow credentials via CORS\n```\n\nNote however that this has security implications, so be careful in production\nenvironments.\n\n### Behind a proxy\n\n_dave_ will also work behind a reverse proxy. Here is an example\nconfiguration with `apache2 httpd`'s `mod_proxy`:\n\n```xml\n\u003cLocation /webdav\u003e\n  ProxyPass           https://webdav-host:8000/\n  ProxyPassReverse    https://webdav-host:8000/\n\u003c/Location\u003e\n```\n\n### User management\n\nUser management in _dave_ is very simple, but optional. You don't have to add users if it's not\nnecessary for your use case. But if you do, each user in the `config.yaml` **must** have a\npassword and **can** have a subdirectory.\n\nThe password must be in form of a BCrypt hash. You can generate one calling the shipped cli\ntool `davecli passwd`.\n\nIf a subdirectory is configured for a user, the user is jailed within it and can't see anything\nthat exists outside of this directory. If no subdirectory is configured for an user, the user\ncan see and modify all files within the base directory.\n\n### Logging\n\nYou can enable / disable logging for the following operations:\n\n- **C**reation of files or directories\n- **R**eading of files or directories\n- **U**pdating of files or directories\n- **D**eletion of files or directories\n\nYou can also enable or disable the error log.\n\nAll file-operation logs are disabled per default until you will turn it on via the following\nconfig entries:\n\n```yaml\naddress: \"127.0.0.1\"    # the bind address\nport: \"8000\"            # the listening port\ndir: \"/home/webdav\"     # the provided base directory\nlog:\n  error: true\n  create: true\n  read: true\n  update: true\n  delete: true\n...\n```\n\nBe aware, that the log pattern of an attached tty differs from the log pattern of a detached tty.\n\nExample of an attached tty:\n\n\tINFO[0000] Server is starting and listening              address=0.0.0.0 port=8000 security=none\n\nExample of a detached tty:\n\n\ttime=\"2018-04-14T20:46:00+02:00\" level=info msg=\"Server is starting and listening\" address=0.0.0.0 port=8000 security=none\n\n### Live reload\n\nThere is no need to restart the server itself, if you're editing the user or log section of\nthe configuration. The config file will be re-read and the application will update it's own\nconfiguration silently in background.\n\n\n## Installation\n\n### Binary installation\n\nYou can check out the [releases page](https://github.com/micromata/dave/releases) for the latest\nprecompiled binaries.\n\nOtherwise you can use the binary installation via go get:\n\n```sh\ngo get github.com/micromata/dave/cmd/...\n```\n\n### Build from sources\n\n#### Setup\n\n1. Ensure you've set up _Go_. Take a look at the [installation guide](https://golang.org/doc/install)\n   and how you [set up your path](https://github.com/golang/go/wiki/SettingGOPATH)\n2. Create a source directory and change your working directory\n\n```sh\nmkdir -p $GOPATH/src/github.com/micromata/ \u0026\u0026 cd $GOPATH/src/github.com/micromata\n```\n\n3. Clone the repository (or your fork)\n\n```sh\ngit clone https://github.com/micromata/dave.git\n```\n\nTo build and install from sources you have two major possibilites:\n\n#### go install\n\nYou can use the plain go toolchain and install the project to your `$GOPATH` via:\n\n```sh\ncd $GOPATH/src/github.com/micromata/dave \u0026\u0026 go install ./...\n```\n\n#### magefile\n\nYou can also use mage to build the project.\n\nPlease ensure you've got [mage](https://magefile.org) installed. This can be done with the\nfollowing steps:\n\n```sh\ngit clone https://github.com/magefile/mage\ncd mage\ngo run bootstrap.go\n```\n\nThe [golint](https://github.com/golang/lint) utility is also required for `mage check`:\n\n```sh\ngo install golang.org/x/lint/golint\n```\n\nNow you can call `mage install` to build and install the binaries. If you just call `mage`,\nyou'll get a list of possible targets:\n\n\tTargets:\n\t  build            Builds dave and davecli and moves it to the dist directory\n\t  buildReleases    Builds dave and davecli for different OS and package them to a zip file for each os\n\t  check            Runs golint and go tool vet on each .go file.\n\t  clean            Removes the dist directory\n\t  fmt              Formats the code via gofmt\n\t  install          Installs dave and davecli to your $GOPATH/bin folder\n\t  installDeps      Runs dep ensure and installs additional dependencies.\n\n### Build and run with Docker\n\nThe image of dave is available on Docker Hub as [`micromata/dave`](https://hub.docker.com/r/micromata/dave).\n\nIf you like to build it for your own, just execute the following lines:\n\n```sh\ngit clone https://github.com/micromata/dave.git\ncd dave\ndocker build -t micromata/dave:latest .\n```\n\nYou can run dave with the following lines:\n\n```sh\n# create webdav home\nmkdir webdav-home\n\ndocker run -d \\\n\t-p 8000:8000 \\\n\t-v $(pwd)/examples/config-sample.yaml:/config.yaml:ro \\\n\t-v $(pwd)/webdav-home:/tmp:rw \\\n\tmicromata/dave:latest\n```\n\n## Connecting\n\nYou could simply connect to the WebDAV server with an HTTP(S) connection and a tool that\nallows the WebDAV protocol.\n\nFor example: Under OSX you can use the default file management tool *Finder*. Press _CMD+K_,\nenter the server address (e.g. `http://localhost:8000`) and choose connect.\n\n## Contributing\n\nEveryone is welcome to create pull requests for this project. If you're new to github, take\na look [here](https://help.github.com/categories/collaborating-with-issues-and-pull-requests/)\nto get an idea of it.\n\nIf you'd like to contribute, please make sure to use the [magefile](#magefile) and execute and\ncheck the following commands before starting a PR:\n\n```sh\nmage fmt\nmage check\n```\n\nIf you've got an idea of a function that should find it's way into this project, but you\nwon't implement it by yourself, please create a new issue.\n\n## License\n\nPlease be aware of the licenses of the components we use in this project. Everything else that has\nbeen developed by the contributions to this project is under the [Apache 2 License](LICENSE.txt).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicromata%2Fdave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicromata%2Fdave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicromata%2Fdave/lists"}