# ExDav v0.4.9 - Table of Contents

> CalDAV server library — mount as a Plug, bring your own storage adapter.
Heavily WIP / beta software; APIs may change between releases.

## Modules

- [ExDav](ExDav.md): CalDAV server library.
- [ExDav.Authenticator](ExDav.Authenticator.md): Behaviour for CalDAV authenticators.
- [ExDav.Authenticator.Basic](ExDav.Authenticator.Basic.md): HTTP Basic authenticator. Verifies the username/password pair via a
configurable `:verify` MFA tuple `{module, function}` invoked as
`apply(module, function, [username, password])`. Returns the username
as the principal on success.
- [ExDav.CalDav.Plug](ExDav.CalDav.Plug.md): Top-level Plug that handles CalDAV requests under the `/dav` prefix.
- [ExDav.CalDav.XML](ExDav.CalDav.XML.md): XML response builders and small request parsers for the CalDAV
endpoints. Generates Multi-Status (RFC 4918) responses with the
CalDAV (RFC 4791) and CalendarServer extensions.

- [ExDav.CardDav.Plug](ExDav.CardDav.Plug.md): Top-level Plug that handles CardDAV requests under the `/dav` prefix.
- [ExDav.CardDav.XML](ExDav.CardDav.XML.md): XML response builders and small request parsers for the CardDAV
endpoints. Generates Multi-Status (RFC 4918) responses with the
CardDAV (RFC 6352) namespace extensions.

- [ExDav.ICal](ExDav.ICal.md): Tiny iCalendar helpers — just enough to extract the UID and primary
component (VEVENT vs VTODO) from an iCalendar object and to compute
an ETag from its serialized form.

- [ExDav.Storage](ExDav.Storage.md): Behaviour for DAV storage adapters (CalDAV and CardDAV).
- [ExDav.Storage.Memory](ExDav.Storage.Memory.md): In-memory implementation of `ExDav.Storage`. Backed by a single Agent
registered under the module name, for use in dev demos and tests.
- [ExDav.Storage.Postgres](ExDav.Storage.Postgres.md): Postgres-backed implementation of `ExDav.Storage`. Owns its own users,
collections, resources, and tombstones tables; the Repo module is
configured via `config :ex_dav, repo: MyApp.Repo`.
- [ExDav.Storage.Postgres.Schemas.Collection](ExDav.Storage.Postgres.Schemas.Collection.md): A DAV collection (calendar or addressbook) owned by a user.
- [ExDav.Storage.Postgres.Schemas.Resource](ExDav.Storage.Postgres.Schemas.Resource.md): A single DAV resource (a calendar object or vCard).
- [ExDav.Storage.Postgres.Schemas.Tombstone](ExDav.Storage.Postgres.Schemas.Tombstone.md): Records the deletion of a DAV resource for sync-collection.
- [ExDav.Storage.Postgres.Schemas.User](ExDav.Storage.Postgres.Schemas.User.md): A DAV principal.
- [ExDav.VCard](ExDav.VCard.md): vCard 4.0 parser and serialiser. vCard 3.0 is explicitly rejected.

## Mix Tasks

- [mix ex_dav.gen.migration](Mix.Tasks.ExDav.Gen.Migration.md): Generates Ecto migration files for ExDav schema changes.

