def save(obj, parser): if parser == None: parser = obj._parser try: ruleTable = PolicyRuleTableModel.objects.get(name=obj.name) ruleTable.type = obj._policy ruleTable.defaultParser = obj._parser ruleTable.defaultPersistence = obj._persistenceBackend ruleTable.defaultPersistenceFlag = obj._persist ruleTable.save() except: ruleTable = PolicyRuleTableModel( name=obj.name, uuid=obj.uuid, type=obj._policy, defaultParser=parser, defaultPersistence=obj._persistenceBackend, defaultPersistenceFlag=obj._persist) ruleTable.save() #flag to know if save comes from addRule or removeRule() addRule = 0 uuidInRuleSet = list() for rule in obj._ruleSet: #need to removeRule later uuidInRuleSet.append(rule.rule.getUUID()) #lbergesio: Rule is saved parsed, as a string #Possibly if Rule exists (try) it is not required to update its fields.==> #==> IT IS NEEDED FOR THE RuleTable.moveRule() try: ruleModel = PolicyRuleModel.objects.get( RuleUUID=rule.rule.getUUID()) except: # If #Rules == #Models then it is the PolicyRuleTableModel being # deleted, not the PolicyRuleModel (last is the normal case) if len(obj._ruleSet) != PolicyRuleModel.objects.all().count(): addRule = 1 ruleModel = PolicyRuleModel(RuleUUID=rule.rule.getUUID()) ruleModel.RuleTableName = obj.name ruleModel.Rule = ParseEngine.craftRule(rule.rule, obj._parser) ruleModel.RuleIsEnabled = rule.enabled ruleModel.RulePosition = obj._ruleSet.index(rule) ruleModel.save() #if the save() comes from a removeRule, check which one was removed and delete if not addRule: for ruleModel in PolicyRuleModel.objects.filter( RuleTableName=obj.name): if ruleModel.RuleUUID not in uuidInRuleSet: ruleModel.delete() break
def loadRuleSet(table_uuid): Django.logger.debug('Loading Rule set...') try: ruleTable = PolicyRuleTableModel.objects.get(uuid = table_uuid) except: return list() rules = PolicyRuleModel.objects.filter(RuleTableName = ruleTable.name).order_by('RulePosition') ruleSet = [] #The rules sort by priority for rule in rules: ruleObj= ParseEngine.parseRule(rule.Rule) ruleObj._uuid = rule.RuleUUID ruleEntry = RuleEntry(ruleObj,rule.RuleIsEnabled) ruleSet.append(ruleEntry) return ruleSet
def loadRuleSet(table_uuid): Django.logger.debug('Loading Rule set...') try: ruleTable = PolicyRuleTableModel.objects.get(uuid=table_uuid) except: return list() rules = PolicyRuleModel.objects.filter( RuleTableName=ruleTable.name).order_by('RulePosition') ruleSet = [] #The rules sort by priority for rule in rules: ruleObj = ParseEngine.parseRule(rule.Rule) ruleObj._uuid = rule.RuleUUID ruleEntry = RuleEntry(ruleObj, rule.RuleIsEnabled) ruleSet.append(ruleEntry) return ruleSet
def save(obj, parser): if parser == None: parser = obj._parser try: ruleTable = PolicyRuleTableModel.objects.get(name=obj.name) ruleTable.type = obj._policy ruleTable.defaultParser = obj._parser ruleTable.defaultPersistence = obj._persistenceBackend ruleTable.defaultPersistenceFlag = obj._persist ruleTable.save() except: ruleTable = PolicyRuleTableModel(name = obj.name, uuid = obj.uuid, type = obj._policy, defaultParser = parser, defaultPersistence = obj._persistenceBackend, defaultPersistenceFlag = obj._persist) ruleTable.save() #flag to know if save comes from addRule or removeRule() addRule = 0 uuidInRuleSet=list() for rule in obj._ruleSet: #need to removeRule later uuidInRuleSet.append(rule.rule.getUUID()) #lbergesio: Rule is saved parsed, as a string #Possibly if Rule exists (try) it is not required to update its fields.==> #==> IT IS NEEDED FOR THE RuleTable.moveRule() try: ruleModel = PolicyRuleModel.objects.get(RuleUUID = rule.rule.getUUID()) except: # If #Rules == #Models then it is the PolicyRuleTableModel being # deleted, not the PolicyRuleModel (last is the normal case) if len(obj._ruleSet) != PolicyRuleModel.objects.all().count(): addRule = 1 ruleModel = PolicyRuleModel(RuleUUID = rule.rule.getUUID()) ruleModel.RuleTableName = obj.name ruleModel.Rule = ParseEngine.craftRule(rule.rule, obj._parser) ruleModel.RuleIsEnabled = rule.enabled ruleModel.RulePosition = obj._ruleSet.index(rule) ruleModel.save() #if the save() comes from a removeRule, check which one was removed and delete if not addRule: for ruleModel in PolicyRuleModel.objects.filter(RuleTableName = obj.name): if ruleModel.RuleUUID not in uuidInRuleSet: ruleModel.delete() break
def addRule(self,string,enabled=True,pos=None,parser=None,pBackend=None,persist=True): if not parser: parser = self._parser rule = ParseEngine.parseRule(string, parser) rule.setUUID(uuid.uuid4().hex) with self._mutex: if pos > len(self._ruleSet): #raise Exception("Invalid position") self._ruleSet.append(RuleEntry(rule,enabled)) elif pos !=None: self._ruleSet.insert(pos,RuleEntry(rule,enabled)) else: self._ruleSet.append(RuleEntry(rule,enabled)) if self._persist: self.save()