<!-- review: finished -->

<a id="external-dav-ext"></a>

# DAV-Ext

This module extends WebDAV support with the PROPFIND, OPTIONS, LOCK, and UNLOCK methods.

The standard [DAV](https://en.angie.software//angie/docs/configuration/modules/http/http_dav.md#http-dav) module provides a partial implementation of
WebDAV and supports only the GET, HEAD, PUT, DELETE, MKCOL, COPY, and MOVE methods.
For full WebDAV support, you need to enable the standard
`http_dav_module` module, as well as this module for the missing methods.

<a id="installation-7"></a>

## Installation

To [install](https://en.angie.software//angie/docs/installation/index.md#install-packages) the module, use one of the
following packages:

- Angie: `angie-module-dav-ext`
- Angie PRO: `angie-pro-module-dav-ext`

<a id="loading-the-module-6"></a>

## Loading the Module

Load the module in the `main{}` context:

```nginx
load_module modules/ngx_http_dav_ext_module.so;
```

<a id="configuration-example-83"></a>

## Configuration Example

```nginx
dav_ext_lock_zone zone=lock_zone:10m;
server {
    listen 80 default_server;

    location / {
        root /usr/share/angie/html;

        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
        dav_ext_lock zone=lock_zone;
    }
}
```

<a id="request-execution-examples"></a>

## Request Execution Examples

Uploading a file to the server:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 201 Created
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Content-Length: 0
Location: http://127.0.0.1/testf1.txt
Connection: keep-alive
```

Overwriting the same file:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 204 No Content
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Connection: keep-alive
```

Locking the file from being overwritten:

```console
$ curl -i -X LOCK http://127.0.0.1/testf1.txt
HTTP/1.1 200 OK
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 392
Connection: keep-alive
Lock-Token: <urn:7502d56f>
```

Attempting to overwrite the file:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 423
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Content-Length: 0
Connection: keep-alive
```

The file is locked. Unlocking the file:

```console
$ curl -i -X UNLOCK -H 'Lock-Token: <urn:7502d56f>' http://127.0.0.1/testf1.txt
HTTP/1.1 204 No Content
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Connection: keep-alive
```

Overwriting the file:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 204 No Content
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Connection: keep-alive
```

The file has been successfully unlocked and overwritten.

<a id="additional-information-7"></a>

## Additional Information

Detailed documentation and source code are available at:
[https://github.com/arut/nginx-dav-ext-module](https://github.com/arut/nginx-dav-ext-module)
