ContactsController: Include ETag and Last-Modified headers as needed.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
ContactResource: Remove duplicate db lookup.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
Allow OPTIONS requests on the root URL.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
ContactResource: Conditional debugging.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
ContactResource: Cleanup.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
AddressBookController: Deny GET requests on AddressBooks via CardDAV.

GET requests via the browser based interface still work, but Method Not
Allowed is a more correct response than Not Implemented.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
ContactsController: Skip any sort of rendering for the Not Modified case

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
BaseResource: Create a list of inherited explicit properties.

Per RFC 3744 most of the ACL related properties are considered to be
too expensive to return in an allprop request.  Yet, all of our
resources should respond to these properties.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
Implement PROPPATCH support.

- Gemfile: Update to latest version of dav4rack.
- Implement set_property in BaseResource so we can handle CardDAV
  specific properties.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>
Fix up ACL support a bit.

Signed-off-by: Alex Zepeda <alex@inferiorhumanorgans.com>