Просмотр исходного кода

Add support for the Caldav-Sync Android client

Marten Gajda 14 лет назад
Родитель
Сommit
380acebd71
2 измененных файлов с 14 добавлено и 3 удалено
  1. 10 2
      radicale/__init__.py
  2. 4 1
      radicale/ical.py

+ 10 - 2
radicale/__init__.py

@@ -39,11 +39,11 @@ import wsgiref.simple_server
 # pylint: disable=F0401
 try:
     from http import client, server
-    from urllib.parse import unquote, urlparse
+    from urllib.parse import quote, unquote, urlparse
 except ImportError:
     import httplib as client
     import BaseHTTPServer as server
-    from urllib import unquote
+    from urllib import quote, unquote
     from urlparse import urlparse
 # pylint: enable=F0401
 
@@ -221,6 +221,14 @@ class Application(object):
             if calendars:
                 status, headers, answer = function(
                     environ, calendars, content, user)
+            elif user and self.acl.has_right(user, user, password):
+                # Check if the user/password couple matches,
+                # redirect user to his principal home in this case
+                location = "/%s/" % str(quote(user))
+                log.LOGGER.info("redirecting to %s" % location)
+                status = client.FOUND
+                headers = {"Location": location}
+                answer = "Redirecting to %s" % location
             else:
                 status = client.UNAUTHORIZED
                 headers = {

+ 4 - 1
radicale/ical.py

@@ -171,7 +171,10 @@ class Calendar(object):
         """
         self.encoding = "utf-8"
         split_path = path.split("/")
-        self.owner = split_path[0] if len(split_path) > 1 else None
+        if (principal and split_path) or len(split_path) > 1:
+            self.owner = split_path[0]
+        else:
+            self.owner = None
         self.path = os.path.join(FOLDER, path.replace("/", os.sep))
         self.local_path = path if path != '.' else ''
         self.is_principal = principal