class DomainKeyResource(SimpleResource): """ Domainkey well-known resource. """ def __init__(self, domain, selector, pubkeyfile): """ """ assert domain assert selector SimpleResource.__init__(self, principalCollections=None, isdir=True, defaultACL=SimpleResource.allReadACL) self.makeKeyData(domain, selector, pubkeyfile) self.domain = domain self.selector = selector def makeKeyData(self, domain, selector, pubkeyfile): """ Check that a valid key exists, create the TXT record format data and make the needed child resources. """ # Get data from file try: with open(pubkeyfile) as f: key_data = f.read() except IOError, e: log.error( "DKIM: Unable to open the public key file: %s because of %s" % ( pubkeyfile, e, )) raise # Make sure we can parse a valid public key try: RSA.importKey(key_data) except: log.error("DKIM: Invalid public key file: %s" % (pubkeyfile, )) raise # Make the TXT record key_data = "".join(key_data.strip().splitlines()[1:-1]) txt_data = "v=DKIM1; s=ischedule; p=%s\n" % (key_data, ) # Setup resource hierarchy domainResource = SimpleResource(principalCollections=None, isdir=True, defaultACL=SimpleResource.allReadACL) self.putChild(domain, domainResource) selectorResource = SimpleDataResource( principalCollections=None, content_type=MimeType.fromString("text/plain"), data=txt_data, defaultACL=SimpleResource.allReadACL) domainResource.putChild(selector, selectorResource)
root.putChild("principals", principalCollection) if config.EnableCalDAV: root.putChild("calendars", calendarCollection) if config.EnableCardDAV: root.putChild('addressbooks', addressBookCollection) if config.DirectoryAddressBook.Enabled and config.EnableSearchAddressBook: root.putChild(config.DirectoryAddressBook.name, directoryBackedAddressBookCollection) # /.well-known if config.EnableWellKnown: log.info("Setting up .well-known collection resource") wellKnownResource = SimpleResource( principalCollections=(principalCollection,), isdir=True, defaultACL=SimpleResource.allReadACL ) root.putChild(".well-known", wellKnownResource) for enabled, wellknown_name, redirected_to in ( (config.EnableCalDAV, "caldav", "/",), (config.EnableCardDAV, "carddav", "/",), (config.TimezoneService.Enabled, "timezone", "/stdtimezones",), (config.Scheduling.iSchedule.Enabled, "ischedule", "/ischedule"), ): if enabled: if config.EnableSSL: scheme = "https" port = config.SSLPort else: scheme = "http"