Parcourir la source

Merge pull request #507 from Unrud/auth

 Repair and test authentication
Guillaume Ayoub il y a 9 ans
Parent
commit
b85fc5bed6
3 fichiers modifiés avec 13 ajouts et 3 suppressions
  1. 1 1
      radicale/__init__.py
  2. 4 2
      radicale/rights.py
  3. 8 0
      radicale/tests/test_base.py

+ 1 - 1
radicale/__init__.py

@@ -388,7 +388,7 @@ class Application:
             self.logger.info("%s refused" % (user or "Anonymous user"))
             status = client.UNAUTHORIZED
             realm = self.configuration.get("server", "realm")
-            headers = headers.copy()
+            headers = dict(headers)
             headers.update ({
                 "WWW-Authenticate":
                 "Basic realm=\"%s\"" % realm})

+ 4 - 2
radicale/rights.py

@@ -134,10 +134,12 @@ class Rights(BaseRights):
             self.logger.debug(
                 "Test if '%s:%s' matches against '%s:%s' from section '%s'",
                 user, sane_path, re_user, re_collection, section)
-            user_match = re.fullmatch(re_user, user)
+            # Emulate fullmatch
+            user_match = re.match(r"(?:%s)\Z" % re_user, user)
             if user_match:
                 re_collection = re_collection.format(*user_match.groups())
-                if re.fullmatch(re_collection, sane_path):
+                # Emulate fullmatch
+                if re.match(r"(?:%s)\Z" % re_collection, sane_path):
                     self.logger.debug("Section '%s' matches", section)
                     return permission in regex.get(section, "permission")
                 else:

+ 8 - 0
radicale/tests/test_base.py

@@ -766,6 +766,14 @@ class BaseRequestsMixIn:
         assert status == 207
         assert "href>/user/<" in answer
 
+    def test_authentication(self):
+        """Test if server sends authentication request."""
+        self.configuration.set("rights", "type", "owner_only")
+        self.application = Application(self.configuration, self.logger)
+        status, headers, answer = self.request("MKCOL", "/user/")
+        assert status in (401, 403)
+        assert headers.get("WWW-Authenticate")
+
     def test_principal_collection_creation(self):
         """Verify existence of the principal collection."""
         status, headers, answer = self.request(