Exemple #1
0
    def load_config(self, raw_config):
        if 'groups' not in raw_config:
            raise InvalidConfig("'groups' not defined in config")

        if 'rules' not in raw_config:
            raise InvalidConfig("'rules' not defined in config")

        for raw_group in raw_config['groups']:
            group = parsers.parse_group(raw_group)
            self.groups_by_name[group.name] = group

            for member in group.members:
                self.group_names_by_member[member].append(group.name)

        for raw_rule in raw_config['rules']:
            rule = parsers.parse_rule(raw_rule)
            if rule.group not in self.groups_by_name:
                raise InvalidConfig(
                    "Rule defined for group '{0}', but no such group is defined"
                    .format(rule.group))

            self.rules.append(rule)

        log.info("Successfully loaded %d groups: %s", len(self.groups_by_name),
                 ", ".join(self.groups_by_name.keys()))
        log.info("Successfully loaded %d rules", len(self.rules))

        self.has_been_initialized = True
def test_normal_rule_parses_ok(rule_data):
    rule = parsers.parse_rule(rule_data)

    # Do a comparison on the literals that should stay the same after parsing
    assert rule.group == rule_data['group']
    assert rule.allow == rule_data['allow']

    for regex_name in ['host', 'request_method', 'request_uri']:
        assert isinstance(getattr(rule, regex_name), re._pattern_type)
def test_missing_key_in_rule_errors(rule_data, missing_key):
    del rule_data[missing_key]
    with pytest.raises(exceptions.InvalidConfig):
        parsers.parse_rule(rule_data)