allow resources to decide for themselves if they want to be personal
authorchrysn <chrysn@fsfe.org>
Fri, 4 Apr 2014 11:49:19 +0000 (13:49 +0200)
committerJelmer Vernooń≥ <jelmer@jelmer.uk>
Sun, 10 Apr 2016 11:43:29 +0000 (11:43 +0000)
calypso/acl/htpasswd.py
calypso/acl/pam.py
calypso/principal.py
calypso/webdav.py
collection-config

index fb5fea0..2b1dff1 100644 (file)
@@ -63,11 +63,10 @@ def has_right(entity, user, password):
     for line in open(FILENAME).readlines():
         if line.strip():
             login, hash_value = line.strip().split(":", 1)
-            if login == user and (not PERSONAL or user == entity.owner):
+            if login == user and (not entity.personal or user == entity.owner):
                 return CHECK_PASSWORD(hash_value, password)
     return False
 
 
 FILENAME = os.path.expanduser(config.get("acl", "filename"))
-PERSONAL = config.getboolean("acl", "personal")
 CHECK_PASSWORD = locals()["_%s" % config.get("acl", "encryption")]
index 50a9839..03ce041 100644 (file)
@@ -31,12 +31,11 @@ from calypso import config
 
 LOG = logging.getLogger()
 SVC = config.get("acl", "pam_service")
-PERSONAL = config.getboolean("acl", "personal")
 
 def has_right(entity, user, password):
     """Check if ``user``/``password`` couple is valid."""
     LOG.debug("entity %s user %s", entity, user)
-    if entity.owner and entity.owner != user and PERSONAL:
+    if entity.owner and entity.owner != user and entity.personal:
         return False
     def pam_conv(auth, query_list, userData):
         result = []
index daed2fe..c952d08 100644 (file)
@@ -23,6 +23,9 @@ class Resource(object):
 
     owner = None # implement the interface for acls
 
+    def is_personal(self):
+        return True
+
 class Principal(Resource):
     def __init__(self, username):
         self.username = username
index 2ddc38c..b3ea38d 100644 (file)
@@ -626,3 +626,9 @@ class Collection(object):
             return self.metadata.getboolean('collection', 'is-calendar')
         except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, ValueError):
             return True
+
+    def is_personal(self):
+        try:
+            return self.metadata.getboolean('collection', 'personal')
+        except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, ValueError):
+            return config.get('acl', 'personal')
index c1a2e24..d725ceb 100644 (file)
@@ -18,4 +18,8 @@ is-calendar = 1
 # is-calendar.
 is-addressbook = 0
 
+# Set this collection to personal, meaning that only its owner can access it.
+# Defaults to the personal setting in the Calypso configuration's acl section.
+personal = False
+
 # vim:ft=cfg