Merge pull request #100 from chripo/fix-access

Fix access
This commit is contained in:
Guillaume Ayoub 2014-02-05 12:47:43 +01:00
commit c953211175

View File

@ -264,9 +264,6 @@ class Application(object):
path = environ["PATH_INFO"] path = environ["PATH_INFO"]
# Find collection(s)
items = ical.Collection.from_path(path, environ.get("HTTP_DEPTH", "0"))
# Get function corresponding to method # Get function corresponding to method
function = getattr(self, environ["REQUEST_METHOD"].lower()) function = getattr(self, environ["REQUEST_METHOD"].lower())
@ -280,17 +277,21 @@ class Application(object):
else: else:
user = password = None user = password = None
is_authenticated = auth.is_authenticated(user, password)
is_valid_user = is_authenticated or not user
if is_valid_user:
items = ical.Collection.from_path(path,
environ.get("HTTP_DEPTH", "0"))
read_allowed_items, write_allowed_items = \ read_allowed_items, write_allowed_items = \
self.collect_allowed_items(items, user) self.collect_allowed_items(items, user)
else:
read_allowed_items, write_allowed_items = None, None
is_authenticated = auth.is_authenticated(user, password) if is_valid_user and (
(read_allowed_items or write_allowed_items) or
if ((read_allowed_items or write_allowed_items) (is_authenticated and function == self.propfind) or
and (not user or is_authenticated)) or \ function == self.options):
(is_authenticated and function == self.propfind) or \
function == self.options or not items:
# Collections found, or authenticated PROPFIND request,
# or OPTIONS request, or no items at all
status, headers, answer = function( status, headers, answer = function(
environ, read_allowed_items, write_allowed_items, content, environ, read_allowed_items, write_allowed_items, content,
user) user)