def rulesetUpload(component, logger, filetype, input_filename, content, netcfg): # Extract ruleset name from the input filename name = basename(input_filename) if not name.lower().endswith(".xml"): raise RulesetError('File extension is not ".xml"!') name = name[:-4] # Ensure that the ruleset doesn't exist on disk rulesetFilename(filetype, name, check_existing=True) # Decode the content content = decodeFileContent(content) # Open the ruleset the check the consistency ruleset = Ruleset(component, logger, netcfg, read_only=True) ruleset.load(logger, filetype, name, content=content) if component.core.getMultisiteType() == MULTISITE_SLAVE: if exists(MULTISITE_TEMPLATE_FILENAME): template = MULTISITE_TEMPLATE_NAME else: template = None replaceTemplate(logger, ruleset, template) # Write the ruleset try: ruleset.save() except IOError, err: raise RulesetError( tr("Unable to write into the file %s (%s): %s!"), basename(ruleset.filename), ruleset.filetype, exceptionAsUnicode(err), )
def rulesetDownload(filetype, name): filename = rulesetFilename(filetype, name) try: with open(filename, "rb") as fp: content = fp.read() except IOError, err: raise RulesetError(tr('Unable to open "%s" (%s): %s!'), basename(filename), filetype, exceptionAsUnicode(err))
def loadFile(self, ruleset_context, filetype, name, editable=False, from_template=None, action=None, ruleset_id=0, filename=None, content=None): # Log the action logger = ruleset_context.logger text = "Load %s: %s" % (filetype, name) if ruleset_id == 0: logger.info(text) else: logger.debug(text) if not content: # Get the filename if not filename: if filetype == "library": filename = LIBRARY_FILENAME else: filename = rulesetFilename(filetype, name) # Parse the XML file try: with open(filename) as fp: ruleset = etree.parse(fp).getroot() except IOError, err: if err.errno == ENOENT: if filetype == 'template': message = tr('The "%s" template does not exist. It has been deleted or renamed.') else: message = tr('The "%s" rule set does not exist. It has been deleted or renamed.') raise RulesetError(message, name) else: raise RulesetError( tr('Unable to open file "%s" (%s): %s'), basename(filename), filetype, exceptionAsUnicode(err))
def apply(self): self.error('Create ruleset "%s"' % self.name) logger = self.getLogger() ruleset = Ruleset(self.component, logger, self.netcfg) ruleset.create(logger, "ruleset", self.netcfg, base_template=MULTISITE_TEMPLATE_NAME) ruleset.saveAs(self.name) self.filename = rulesetFilename("ruleset", self.name)
def __init__(self, logger, component, netcfg, ruleset, template, use_template): LoggerChild.__init__(self, logger) self.component = component self.netcfg = netcfg self.ruleset = ruleset # Ruleset name (str) self.template = template self.use_template = use_template self.filename = rulesetFilename("ruleset", self.ruleset) self.old = File(self.filename + ".old", False)
def prepare(self): self.filename = None index = 2 name = "multisite" while exists( rulesetFilename("ruleset", name) ): name = "multisite-%s" % index index += 1 self.name = name for callback in self.name_callbacks: callback(name)
def rulesetDelete(core, filetype, name): """ Delete the specified ruleset. """ if (filetype == "template") and (core.getMultisiteType() == MULTISITE_SLAVE): raise RulesetError(tr("Can not delete a template from a slave.")) filename = rulesetFilename(filetype, name) try: unlink(filename) except IOError, err: raise RulesetError(tr("Unable to delete the file %s (%s): %s!"), name, filetype, exceptionAsUnicode(err))
def load(self, logger, filetype, name, filename=None, content=None): self.name = name if filename: self.filename = filename else: self.filename = rulesetFilename(filetype, name) self.filetype = filetype self.is_template = (filetype == "template") loader_context = LoadRulesetContext(logger) # Load an existing ruleset/template self.loadFile(loader_context, self.filetype, self.name, editable=True, filename=self.filename, content=content, ruleset_id=0) self.updateFusion() return self.formatRuleset(loader_context)
def saveAs(self, name): filename = rulesetFilename(self.filetype, name, check_existing=True) self.write(filename, name) return self.formatRuleset()