deronnax пре 11 година
родитељ
комит
f846f107e6
1 измењених фајлова са 19 додато и 18 уклоњено
  1. 19 18
      radicale/__init__.py

+ 19 - 18
radicale/__init__.py

@@ -36,6 +36,7 @@ import posixpath
 import socket
 import ssl
 import wsgiref.simple_server
+import re
 # Manage Python2/3 different modules
 # pylint: disable=F0401,E0611
 try:
@@ -55,6 +56,7 @@ VERSION = "0.9"
 # Standard "not allowed" response that is returned when an authenticated user
 # tries to access information they don't have rights to
 NOT_ALLOWED = (client.FORBIDDEN, {}, None)
+WELLKNOWNRE = re.compile(r'/.well-known/(carddav|caldav)/?')
 
 
 class HTTPServer(wsgiref.simple_server.WSGIServer, object):
@@ -286,24 +288,23 @@ class Application(object):
             user = environ.get("REMOTE_USER")
             password = None
 
-        if path.startswith('/.well-known/'):
-            fragment = path.rstrip("/").rsplit('/', 1)[-1]
-            redirect = config.get("well-known", fragment)
-            if redirect:
-                if not user and "%(user)s" in redirect:
-                    status = client.UNAUTHORIZED
-                    headers = {
-                        "WWW-Authenticate":
-                        "Basic realm=\"%s\"" % config.get("server", "realm")}
-                    log.LOGGER.info("refused /.well-known/ redirection to anonymous user")
-                else:
-                    redirect = redirect % locals()
-                    status = client.SEE_OTHER
-                    log.LOGGER.info("/.well-known/ redirection to: %s" % redirect)
-                    headers = {"Location": redirect.encode('utf8')}
-                status = "%i %s" % (status, client.responses.get(status, "Unknown"))
-                start_response(status, headers.items())
-                return []
+        wkfragment = WELLKNOWNRE.match(path)
+        if wkfragment:
+            redirect = config.get("well-known", wkfragment.group(1))
+            if not user and "%(user)s" in redirect:
+                status = client.UNAUTHORIZED
+                headers = {
+                    "WWW-Authenticate":
+                    "Basic realm=\"%s\"" % config.get("server", "realm")}
+                log.LOGGER.info("refused /.well-known/ redirection to anonymous user")
+            else:
+                redirect = redirect % locals()
+                status = client.SEE_OTHER
+                log.LOGGER.info("/.well-known/ redirection to: %s" % redirect)
+                headers = {"Location": redirect.encode('utf8')}
+            status = "%i %s" % (status, client.responses.get(status, "Unknown"))
+            start_response(status, headers.items())
+            return []
 
         is_authenticated = auth.is_authenticated(user, password)
         is_valid_user = is_authenticated or not user