Esempio n. 1
0
 def handle_rule_versions(self, filename, rule_type, rule):
     """
     For each version of a rule found in the ruleset, append a new Rule object
     """
     if 'versions' in rule:
         versions = rule.pop('versions')
         for version_key_suffix in versions:
             version = versions[version_key_suffix]
             version['key_suffix'] = version_key_suffix
             tmp_rule = dict(rule, **version)
             self.rules[filename].append(Rule(filename, rule_type,
                                              tmp_rule))
     else:
         self.rules[filename].append(Rule(filename, rule_type, rule))
Esempio n. 2
0
    def prepare_rules(self, attributes = [], ip_ranges = [], params = {}):
        """
        Update the ruleset's rules by duplicating fields as required by the HTML ruleset generator

        :return:
        """
        for filename in self.rule_definitions:
            if filename in self.rules:
                for rule in self.rules[filename]:
                    rule.set_definition(self.rule_definitions, attributes, ip_ranges, params)
            else:
                self.rules[filename] = []
                new_rule = Rule(filename, self.rule_type, {'enabled': False, 'level': 'danger'})
                new_rule.set_definition(self.rule_definitions, attributes, ip_ranges, params)
                self.rules[filename].append(new_rule)
Esempio n. 3
0
    def load(self, rule_type, quiet=False):
        """
        Open a JSON file definiting a ruleset and load it into a Ruleset object

        :param quiet:
        :return:
        """
        if self.filename and os.path.exists(self.filename):
            try:
                with open(self.filename, 'rt') as f:
                    ruleset = json.load(f)
                    self.about = ruleset['about']
                    self.rules = {}
                    for filename in ruleset['rules']:
                        self.rules[filename] = []
                        for rule in ruleset['rules'][filename]:
                            self.rules[filename].append(
                                Rule(filename, rule_type, rule['enabled'],
                                     rule['level'] if 'level' in rule else '',
                                     rule['args'] if 'args' in rule else []))
            except Exception as e:
                printException(e)
                printError('Error: ruleset file %s contains malformed JSON.' %
                           self.filename)
                self.rules = []
                self.about = ''
        else:
            self.rules = []
            if not quiet:
                printError('Error: the file %s does not exist.' %
                           self.filename)
Esempio n. 4
0
    def prepare_rules(self, attributes=[], ip_ranges=[], params={}):
        """
        Update the ruleset's rules by duplicating fields as required by the HTML ruleset generator

        :return:
        """
        for filename in self.rule_definitions:
            if filename in self.rules:
                for rule in self.rules[filename]:
                    rule.set_definition(self.rule_definitions, attributes,
                                        ip_ranges, params)
            else:
                self.rules[filename] = []
                new_rule = Rule(filename, self.rule_type, False, 'danger', [])
                new_rule.set_definition(self.rule_definitions, attributes,
                                        ip_ranges, params)
                self.rules[filename].append(new_rule)
Esempio n. 5
0
 def load_rules(self, file, rule_type, quiet=False):
     file.seek(0)
     ruleset = json.load(file)
     self.about = ruleset['about']
     self.rules = {}
     for filename in ruleset['rules']:
         self.rules[filename] = []
         for rule in ruleset['rules'][filename]:
             self.rules[filename].append(
                 Rule(filename, rule_type, rule['enabled'],
                      rule['level'] if 'level' in rule else '',
                      rule['args'] if 'args' in rule else []))