def HandleEvent(self, event=None): """ Updates which files this plugin handles based upon filesystem events. Allows configuration items to be added/removed without server restarts. """ action = event.code2str() if event.filename[0] == "/": return epath = "".join([self.data, self.handles[event.requestID], event.filename]) if posixpath.isdir(epath): ident = self.handles[event.requestID] + event.filename else: ident = self.handles[event.requestID][:-1] fname = "".join([ident, "/", event.filename]) if event.filename.endswith(".xml"): if action in ["exists", "created", "changed"]: if event.filename.endswith("key.xml"): key_spec = dict(list(lxml.etree.parse(epath).find("Key").items())) self.key_specs[ident] = {"bits": key_spec.get("bits", 2048), "type": key_spec.get("type", "rsa")} self.Entries["Path"][ident] = self.get_key elif event.filename.endswith("cert.xml"): cert_spec = dict(list(lxml.etree.parse(epath).find("Cert").items())) ca = cert_spec.get("ca", "default") self.cert_specs[ident] = { "ca": ca, "format": cert_spec.get("format", "pem"), "key": cert_spec.get("key"), "days": cert_spec.get("days", 365), "C": cert_spec.get("c"), "L": cert_spec.get("l"), "ST": cert_spec.get("st"), "OU": cert_spec.get("ou"), "O": cert_spec.get("o"), "emailAddress": cert_spec.get("emailaddress"), } cp = ConfigParser() cp.read(self.core.cfile) self.CAs[ca] = dict(cp.items("sslca_" + ca)) self.Entries["Path"][ident] = self.get_cert if action == "deleted": if ident in self.Entries["Path"]: del self.Entries["Path"][ident] else: if action in ["exists", "created"]: if posixpath.isdir(epath): self.AddDirectoryMonitor(epath[len(self.data) :]) if ident not in self.entries and posixpath.isfile(epath): self.entries[fname] = self.__child__(epath) self.entries[fname].HandleEvent(event) if action == "changed": self.entries[fname].HandleEvent(event) elif action == "deleted": if fname in self.entries: del self.entries[fname] else: self.entries[fname].HandleEvent(event)
def HandleEvent(self, event=None): """ Updates which files this plugin handles based upon filesystem events. Allows configuration items to be added/removed without server restarts. """ action = event.code2str() if event.filename[0] == '/': return epath = "".join([self.data, self.handles[event.requestID], event.filename]) if posixpath.isdir(epath): ident = self.handles[event.requestID] + event.filename else: ident = self.handles[event.requestID][:-1] fname = "".join([ident, '/', event.filename]) if event.filename.endswith('.xml'): if action in ['exists', 'created', 'changed']: if event.filename.endswith('key.xml'): key_spec = dict(list(lxml.etree.parse(epath).find('Key').items())) self.key_specs[ident] = { 'bits': key_spec.get('bits', 2048), 'type': key_spec.get('type', 'rsa') } self.Entries['Path'][ident] = self.get_key elif event.filename.endswith('cert.xml'): cert_spec = dict(list(lxml.etree.parse(epath).find('Cert').items())) ca = cert_spec.get('ca', 'default') self.cert_specs[ident] = { 'ca': ca, 'format': cert_spec.get('format', 'pem'), 'key': cert_spec.get('key'), 'days': cert_spec.get('days', 365), 'C': cert_spec.get('c'), 'L': cert_spec.get('l'), 'ST': cert_spec.get('st'), 'OU': cert_spec.get('ou'), 'O': cert_spec.get('o'), 'emailAddress': cert_spec.get('emailaddress') } cp = ConfigParser() cp.read(self.core.cfile) self.CAs[ca] = dict(cp.items('sslca_' + ca)) self.Entries['Path'][ident] = self.get_cert if action == 'deleted': if ident in self.Entries['Path']: del self.Entries['Path'][ident] else: if action in ['exists', 'created']: if posixpath.isdir(epath): self.AddDirectoryMonitor(epath[len(self.data):]) if ident not in self.entries and posixpath.isfile(epath): self.entries[fname] = self.__child__(epath) self.entries[fname].HandleEvent(event) if action == 'changed': self.entries[fname].HandleEvent(event) elif action == 'deleted': if fname in self.entries: del self.entries[fname] else: self.entries[fname].HandleEvent(event)