[CalendarServer-changes] [3437] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Dec 2 09:42:14 PST 2008


Revision: 3437
          http://trac.macosforge.org/projects/calendarserver/changeset/3437
Author:   sagen at apple.com
Date:     2008-12-02 09:42:14 -0800 (Tue, 02 Dec 2008)
Log Message:
-----------
Adds expanded-group-member-set property, and no longer expands group-member-set property

Modified Paths:
--------------
    CalendarServer/trunk/conf/auth/accounts-test.xml
    CalendarServer/trunk/twistedcaldav/customxml.py
    CalendarServer/trunk/twistedcaldav/directory/principal.py
    CalendarServer/trunk/twistedcaldav/resource.py

Modified: CalendarServer/trunk/conf/auth/accounts-test.xml
===================================================================
--- CalendarServer/trunk/conf/auth/accounts-test.xml	2008-12-02 17:37:22 UTC (rev 3436)
+++ CalendarServer/trunk/conf/auth/accounts-test.xml	2008-12-02 17:42:14 UTC (rev 3437)
@@ -92,4 +92,35 @@
     </members>
     <disable-calendar/>
   </group>
+  <group>
+    <uid>subgroup1</uid>
+    <guid>subgroup1</guid>
+    <password>subgroup1</password>
+    <name>Sub Group 1</name>
+    <members>
+      <member type="users">user10</member>
+      <member type="users">user11</member>
+    </members>
+  </group>
+  <group>
+    <uid>subgroup2</uid>
+    <guid>subgroup2</guid>
+    <password>subgroup2</password>
+    <name>Sub Group 2</name>
+    <members>
+      <member type="users">user12</member>
+      <member type="users">user13</member>
+    </members>
+  </group>
+  <group>
+    <uid>toplevelgroup</uid>
+    <guid>toplevelgroup</guid>
+    <password>toplevelgroup</password>
+    <name>Top Level Group</name>
+    <members>
+      <member type="groups">subgroup1</member>
+      <member type="groups">subgroup2</member>
+      <member type="users">user14</member>
+    </members>
+  </group>
 </accounts>

Modified: CalendarServer/trunk/twistedcaldav/customxml.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/customxml.py	2008-12-02 17:37:22 UTC (rev 3436)
+++ CalendarServer/trunk/twistedcaldav/customxml.py	2008-12-02 17:42:14 UTC (rev 3437)
@@ -350,6 +350,17 @@
 
     allowed_children = { (calendarserver_namespace, "email-address"): (0, None) }
 
+class ExpandedGroupMemberSet (davxml.WebDAVElement):
+    """
+    The expanded list of members of a (group) principal
+    """
+    namespace = calendarserver_namespace
+    name = "expanded-group-member-set"
+    protected = True
+    hidden = True
+
+    allowed_children = { (dav_namespace, "href"): (0, None) }
+
 class IScheduleInbox (davxml.WebDAVEmptyElement):
     """
     Denotes the resourcetype of a iSchedule Inbox.

Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py	2008-12-02 17:37:22 UTC (rev 3436)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py	2008-12-02 17:42:14 UTC (rev 3437)
@@ -554,7 +554,7 @@
     def url(self):
         return self.principalURL()
 
-    def _getRelatives(self, method, record=None, relatives=None, records=None, proxy=None):
+    def _getRelatives(self, method, record=None, relatives=None, records=None, proxy=None, infinity=False):
         if record is None:
             record = self.record
         if relatives is None:
@@ -577,21 +577,26 @@
                                 found = found.getChild("calendar-proxy-read")
                         relatives.add(found)
 
-                    self._getRelatives(method, relative, relatives, records)
+                    if infinity:
+                        self._getRelatives(method, relative, relatives, records,
+                            infinity=infinity)
 
         return relatives
 
     def groupMembers(self):
         return succeed(self._getRelatives("members"))
 
+    def expandedGroupMembers(self):
+        return succeed(self._getRelatives("members", infinity=True))
+
     @inlineCallbacks
     def groupMemberships(self):
-        groups = self._getRelatives("groups")
+        groups = self._getRelatives("groups", infinity=True)
 
         if config.EnableProxyPrincipals:
             # Get any directory specified proxies
-            groups.update(self._getRelatives("proxyFor", proxy='read-write'))
-            groups.update(self._getRelatives("readOnlyProxyFor", proxy='read-only'))
+            groups.update(self._getRelatives("proxyFor", proxy='read-write', infinity=True))
+            groups.update(self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=True))
 
             # Get proxy group UIDs and map to principal resources
             proxies = []
@@ -610,7 +615,7 @@
         proxyFors = set()
 
         if resolve_memberships:
-            memberships = self._getRelatives("groups")
+            memberships = self._getRelatives("groups", infinity=True)
             for membership in memberships:
                 results = (yield membership.proxyFor(read_write, False))
                 proxyFors.update(results)
@@ -618,9 +623,9 @@
         if config.EnableProxyPrincipals:
             # Get any directory specified proxies
             if read_write:
-                directoryProxies = self._getRelatives("proxyFor", proxy='read-write')
+                directoryProxies = self._getRelatives("proxyFor", proxy='read-write', infinity=True)
             else:
-                directoryProxies = self._getRelatives("readOnlyProxyFor", proxy='read-only')
+                directoryProxies = self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=True)
             proxyFors.update([subprincipal.parent for subprincipal in directoryProxies])
 
             # Get proxy group UIDs and map to principal resources
@@ -750,10 +755,10 @@
             return False
 
     def proxies(self):
-        return self._getRelatives("proxies")
+        return self._getRelatives("proxies", infinity=True)
 
     def readOnlyProxies(self):
-        return self._getRelatives("readOnlyProxies")
+        return self._getRelatives("readOnlyProxies", infinity=True)
 
     def hasEditableProxyMembership(self):
         return self.record.hasEditableProxyMembership()

Modified: CalendarServer/trunk/twistedcaldav/resource.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/resource.py	2008-12-02 17:37:22 UTC (rev 3436)
+++ CalendarServer/trunk/twistedcaldav/resource.py	2008-12-02 17:42:14 UTC (rev 3437)
@@ -700,6 +700,7 @@
         (calendarserver_namespace, "email-address-set"),
         (calendarserver_namespace, "calendar-proxy-read-for"  ),
         (calendarserver_namespace, "calendar-proxy-write-for" ),
+        (calendarserver_namespace, "expanded-group-member-set"),
     )
 
     @classmethod
@@ -789,12 +790,22 @@
                     *[davxml.HRef(principal.principalURL()) for principal in results]
                 ))
 
+            elif name == "expanded-group-member-set":
+                principals = (yield self.expandedGroupMembers())
+                returnValue(customxml.ExpandedGroupMemberSet(
+                    *[davxml.HRef(p.principalURL()) for p in principals]
+                ))
+
+
         result = (yield super(CalendarPrincipalResource, self).readProperty(property, request))
         returnValue(result)
 
     def groupMembers(self):
         return succeed(())
 
+    def expandedGroupMembers(self):
+        return succeed(())
+
     def groupMemberships(self):
         return succeed(())
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20081202/1581d37c/attachment.html>


More information about the calendarserver-changes mailing list