[CalendarServer-changes] [1878] CalendarServer/branches/users/cdaboo/server2server-1842

source_changes at macosforge.org source_changes at macosforge.org
Mon Sep 17 19:17:09 PDT 2007


Revision: 1878
          http://trac.macosforge.org/projects/calendarserver/changeset/1878
Author:   cdaboo at apple.com
Date:     2007-09-17 19:17:08 -0700 (Mon, 17 Sep 2007)

Log Message:
-----------
Add basic authentication for server-to-server client requests.

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/server2server-1842/conf/servertoserver.dtd
    CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserver.py
    CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserverparser.py

Modified: CalendarServer/branches/users/cdaboo/server2server-1842/conf/servertoserver.dtd
===================================================================
--- CalendarServer/branches/users/cdaboo/server2server-1842/conf/servertoserver.dtd	2007-09-17 21:35:54 UTC (rev 1877)
+++ CalendarServer/branches/users/cdaboo/server2server-1842/conf/servertoserver.dtd	2007-09-18 02:17:08 UTC (rev 1878)
@@ -18,9 +18,14 @@
 
 <!ELEMENT servers (server*) >
 
-	<!ELEMENT server (uri, allow-requests-from, allow-requests-to, domains*) >
+	<!ELEMENT server (uri, authentication?, allow-requests-from, allow-requests-to, domains*) >
 
 		<!ELEMENT uri (#PCDATA) >
+		<!ELEMENT authentication (user, password) >
+		    <!ATTLIST authentication type (basic) "">
+		    <!ELEMENT user (#PCDATA) >
+		    <!ELEMENT password (#PCDATA) >
+
 		<!ELEMENT allow-requests-from EMPTY >
 		<!ELEMENT allow-requests-to EMPTY >
 		<!ELEMENT domains (domain*) >

Modified: CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserver.py
===================================================================
--- CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserver.py	2007-09-17 21:35:54 UTC (rev 1877)
+++ CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserver.py	2007-09-18 02:17:08 UTC (rev 1878)
@@ -107,10 +107,12 @@
             yield d
             proto = d.getResult()
             
+            log.msg("Sending server-to-server POST request: %s" % (self.server.path,))
             d = waitForDeferred(proto.submitRequest(ClientRequest("POST", self.server.path, self.headers, self.data)))
             yield d
             response = d.getResult()
     
+            log.msg("Received server-to-server POST response: %s" % (response.code,))
             d = waitForDeferred(davXMLFromStream(response.stream))
             yield d
             xml = d.getResult()
@@ -127,10 +129,18 @@
         self.headers = Headers()
         self.headers.setHeader('Host', self.server.host + ":%s" % (self.server.port,))
         self.headers.addRawHeader('Originator', self.scheduler.originator.cuaddr)
+        self._doAuthentication()
         for recipient in self.recipients:
             self.headers.addRawHeader('Recipient', recipient.cuaddr)
         self.headers.setHeader('Content-Type', MimeType("text", "calendar", params={"charset":"utf-8"}))
 
+    def _doAuthentication(self):
+        if self.server.authentication and self.server.authentication[0] == "basic":
+            self.headers.setHeader(
+                'Authorization',
+                ('Basic', ("%s:%s" % (self.server.authentication[1], self.server.authentication[2],)).encode('base64')[:-1])
+            )
+
     def _prepareData(self):
         self.data = str(self.scheduler.calendar)
 

Modified: CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserverparser.py
===================================================================
--- CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserverparser.py	2007-09-17 21:35:54 UTC (rev 1877)
+++ CalendarServer/branches/users/cdaboo/server2server-1842/twistedcaldav/servertoserverparser.py	2007-09-18 02:17:08 UTC (rev 1878)
@@ -35,6 +35,11 @@
 ELEMENT_ALLOW_REQUESTS_TO       = "allow-requests-to"
 ELEMENT_DOMAINS                 = "domains"
 ELEMENT_DOMAIN                  = "domain"
+ELEMENT_AUTHENTICATION          = "authentication"
+ATTRIBUTE_TYPE                  = "type"
+ATTRIBUTE_BASICAUTH             = "basic"
+ELEMENT_USER                    = "user"
+ELEMENT_PASSWORD                = "password"
 
 class ServerToServerParser(object):
     """
@@ -85,6 +90,7 @@
         self.allow_from = False
         self.allow_to = True
         self.domains = []
+        self.authentication = None
 
     def parseXML(self, node):
         for child in node._get_childNodes():
@@ -100,6 +106,8 @@
                 self.allow_to = True
             elif child_name == ELEMENT_DOMAINS:
                 self._parseDomains(child)
+            elif child_name == ELEMENT_AUTHENTICATION:
+                self._parseAuthentication(child)
             else:
                 raise RuntimeError("[%s] Unknown attribute: %s" % (self.__class__, child_name,))
         
@@ -111,6 +119,24 @@
                 if child.firstChild is not None:
                     self.domains.append(child.firstChild.data.encode("utf-8"))
 
+    def _parseAuthentication(self, node):
+        if node.hasAttribute(ATTRIBUTE_TYPE):
+            type = node.getAttribute(ATTRIBUTE_TYPE).encode("utf-8")
+            if type != ATTRIBUTE_BASICAUTH:
+                return
+        else:
+            return
+
+        for child in node._get_childNodes():
+            if child._get_localName() == ELEMENT_USER:
+                if child.firstChild is not None:
+                    user = child.firstChild.data.encode("utf-8")
+            elif child._get_localName() == ELEMENT_PASSWORD:
+                if child.firstChild is not None:
+                    password = child.firstChild.data.encode("utf-8")
+        
+        self.authentication = ("basic", user, password,)
+
     def _parseDetails(self):
         # Extract scheme, host, port and path
         if self.uri.startswith("http://"):

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070917/42e378af/attachment.html


More information about the calendarserver-changes mailing list