[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