Merge branch 'master' of git://gitorious.org/radicale/radicale

Conflicts:
	radicale/xmlutils.py
This commit is contained in:
Corentin Le Bail
2011-02-16 15:03:20 +01:00
11 changed files with 108 additions and 74 deletions

View File

@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# This file is part of Radicale Server - Calendar Server
# Copyright © 2008-2010 Guillaume Ayoub
# Copyright © 2008-2011 Guillaume Ayoub
# Copyright © 2008 Nicolas Kandel
# Copyright © 2008 Pascal Halter
#
@@ -56,6 +56,11 @@ def _check(request, function):
log.log(10, "Check if user has sufficient rights for performing ``request``.")
# ``_check`` decorator can access ``request`` protected functions
# pylint: disable=W0212
# If we have no calendar, don't check rights
if not request._calendar:
return function(request)
authorization = request.headers.get("Authorization", None)
if authorization:
challenge = authorization.lstrip("Basic").strip().encode("ascii")
@@ -94,6 +99,7 @@ class HTTPServer(server.HTTPServer):
class HTTPSServer(HTTPServer):
"""HTTPS server."""
PROTOCOL = "https"
def __init__(self, address, handler):
"""Create server by wrapping HTTP socket in an SSL socket."""
log.log(10, "Create server by wrapping HTTP socket in an SSL socket.")
@@ -163,7 +169,8 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler):
"""Manage GET request."""
log.log(10, "Manage GET request.")
self.do_HEAD()
self.wfile.write(self._answer)
if self._answer:
self.wfile.write(self._answer)
@check_rights
def do_HEAD(self):
@@ -180,6 +187,7 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler):
headers=self._calendar.headers, items=items)
etag = item.etag
else:
self._answer = None
self.send_response(client.GONE)
return
else:
@@ -212,12 +220,19 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler):
# No item or ETag precondition not verified, do not delete item
self.send_response(client.PRECONDITION_FAILED)
@check_rights
def do_MKCALENDAR(self):
"""Manage MKCALENDAR request."""
self.send_response(client.CREATED)
self.end_headers()
def do_OPTIONS(self):
"""Manage OPTIONS request."""
log.log(10, "Manage OPTIONS request.")
self.send_response(client.OK)
self.send_header(
"Allow", "DELETE, HEAD, GET, OPTIONS, PROPFIND, PUT, REPORT")
"Allow", "DELETE, HEAD, GET, MKCALENDAR, "
"OPTIONS, PROPFIND, PUT, REPORT")
self.send_header("DAV", "1, calendar-access")
self.end_headers()
@@ -227,7 +242,7 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler):
xml_request = self.rfile.read(int(self.headers["Content-Length"]))
self._answer = xmlutils.propfind(
self.path, xml_request, self._calendar,
self.headers.get("depth", "infinity"), self)
self.headers.get("depth", "infinity"))
self.send_response(client.MULTI_STATUS)
self.send_header("DAV", "1, calendar-access")